代码之家  ›  专栏  ›  技术社区  ›  Mick

如何查询与“net use”类似的记忆中的UNC连接?

  •  0
  • Mick  · 技术社区  · 16 年前

    我了解如何从注册表(HKEY\ U CURRENT\ U USER\网络)检索映射驱动器的UNC路径,但我也需要检索到未映射的网络资源的远程连接。

    alt text http://www.freeimagehosting.net/uploads/5bf1a0e3c5.jpg

    有人知道我可以从哪个位置查询这个,或者我可以调用一个API来获取这个吗?建议涉及vbscript,C和Delphi是非常欢迎的!

    2 回复  |  直到 16 年前
        1
  •  2
  •   RRUZ    16 年前

    米克,试着用 Win32_NetworkConnection WMI 等级

    检查这个样品

    program GetWMI_Win32_NetworkConnection;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils
      ,ActiveX
      ,ComObj
      ,Variants;
    
    
    Procedure  GetWin32_NetworkConnection;
    var
      objWMIService : OLEVariant;
      colItems      : OLEVariant;
      colItem       : OLEVariant;
      oEnum         : IEnumvariant;
      iValue        : LongWord;
    
      function GetWMIObject(const objectName: String): IDispatch;
      var
        chEaten: Integer;
        BindCtx: IBindCtx;
        Moniker: IMoniker;
      begin
        OleCheck(CreateBindCtx(0, bindCtx));
        OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker));
        OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result));
      end;
    
    begin
      objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2');
      colItems      := objWMIService.ExecQuery('SELECT * FROM Win32_NetworkConnection','WQL',0);
      oEnum         := IUnknown(colItems._NewEnum) as IEnumVariant;
      while oEnum.Next(1, colItem, iValue) = 0 do
      begin
        Writeln('Caption        '+colItem.Caption);
        Writeln('Name           '+colItem.Name);
        Writeln('ConnectionState'+colItem.ConnectionState);
        Writeln('ConnectionType '+colItem.ConnectionType);
        Writeln('Description    '+colItem.Description);
        Writeln('DisplayType    '+colItem.DisplayType);
        Writeln('LocalName      '+colItem.LocalName);
        Writeln('ProviderName   '+colItem.ProviderName);
        Writeln('RemoteName     '+colItem.RemoteName);
        Writeln('RemotePath     '+colItem.RemotePath);
        Writeln('ResourceType   '+colItem.ResourceType);
        Writeln('Status         '+colItem.Status);
        Writeln('UserName       '+colItem.UserName);
        Writeln;
      end;
    end;
    
    
    begin
     try
        CoInitialize(nil);
        try
          GetWin32_NetworkConnection;
          Readln;
        finally
        CoUninitialize;
        end;
     except
        on E:Exception do
        Begin
            Writeln(E.Classname, ': ', E.Message);
            Readln;
        End;
      end;
    end.
    
        2
  •  2
  •   Anders    16 年前

    WNetOpenEnum

    (如果您需要支持Win9x,那么您可能必须回到 NetUseEnum