获取Windows资源管理器C++的当前路径

获取Windows资源管理器C++的当前路径,c++,windows,path,window,explorer,C++,Windows,Path,Window,Explorer,实际上,我想在Windows上检测特定文件夹的打开时间,但经过一些研究后,这似乎是不可能的。所以,我想获取windows资源管理器的当前路径,这样我就可以将其与相关文件夹的路径进行比较,但我不知道如何获取此路径。。。我只有这个功能,但它只给我文件夹的名称 string GetActiveWindowTitle() { char wnd_title[256]; HWND hwnd=GetForegroundWindow(); GetWindowText(hwnd,wnd_t

实际上,我想在Windows上检测特定文件夹的打开时间,但经过一些研究后,这似乎是不可能的。所以,我想获取windows资源管理器的当前路径,这样我就可以将其与相关文件夹的路径进行比较,但我不知道如何获取此路径。。。我只有这个功能,但它只给我文件夹的名称

string GetActiveWindowTitle()
{
    char wnd_title[256];
    HWND hwnd=GetForegroundWindow();
    GetWindowText(hwnd,wnd_title,sizeof(wnd_title));
    return wnd_title;
}

提前感谢

仅限德尔福。自己翻译成C++。
function GetPathByExplorerHandle(AHandle: THandle): UnicodeString;

    function GetFolderIDList(AObj: IUnknown): PItemIDList;
    var
      PersistFolder2: IPersistFolder2;
      PersistIDList: IPersistIDList;
    begin
      if Succeeded(AObj.QueryInterface(IPersistFolder2, PersistFolder2)) then
        try
          if Succeeded(PersistFolder2.GetCurFolder(Result)) then Exit;
        finally
          PersistFolder2 := nil;
        end;

      if Succeeded(AObj.QueryInterface(IPersistIDList, PersistIDList)) then
        try
          if Succeeded(PersistIDList.GetIDList(Result)) then Exit;
        finally
          PersistIDList := nil;
        end;

      raise EOleSysError.Create('', E_NOTIMPL, 0);
    end;

var
  ShellWindows: IShellWindows;
  i: Integer;
  Dispatch: IDispatch;
  WebBrowser2: IWebBrowser2;
  ServiceProvider: IServiceProvider;
  ShellBrowser: IShellBrowser;
  ShellView: IShellView;
  ItemIDList: PItemIDList;
  ShellFolder: IShellFolder;
  ChildItem: PItemIDList;
  StrRet: TStrRet;
begin
  Result := '';
  OleCheck(CoCreateInstance(CLASS_ShellWindows, nil, CLSCTX_INPROC_SERVER or CLSCTX_LOCAL_SERVER, IShellWindows, ShellWindows));
  try
    for i := ShellWindows.Count - 1 downto 0 do
      begin
        Dispatch := ShellWindows.Item(i);
        try
          OleCheck(Dispatch.QueryInterface(IWebBrowser2, WebBrowser2));
          try
            if WebBrowser2.HWND = AHandle then
              begin
                OleCheck(Dispatch.QueryInterface(IServiceProvider, ServiceProvider));
                try
                  OleCheck(ServiceProvider.QueryService(SID_STopLevelBrowser, IShellBrowser, ShellBrowser));
                  try
                    OleCheck(ShellBrowser.QueryActiveShellView(ShellView));
                    try
                      ItemIDList := GetFolderIDList(ShellView);
                      try
                        OleCheck(SHBindToParent(ItemIDList, IShellFolder, Pointer(ShellFolder), ChildItem));
                        try
                          OleCheck(ShellFolder.GetDisplayNameOf(ChildItem, SHGDN_FORPARSING, StrRet));
                          case StrRet.uType of
                            STRRET_WSTR:
                              begin
                                Result := StrRet.pOleStr;
                                CoTaskMemFree(StrRet.pOleStr);
                              end;
                            STRRET_OFFSET:
                              if Assigned(ChildItem) then
                                begin
                                  Inc(PByte(ChildItem), StrRet.uOffset);
                                  Result := UnicodeString(PAnsiChar(ChildItem));
                                end;
                            STRRET_CSTR:
                              Result := UnicodeString(AnsiString(StrRet.cStr));
                          end;
                          Exit;
                        finally
                          ShellFolder := nil;
                        end;
                      finally
                        CoTaskMemFree(ItemIDList);
                      end;
                    finally
                      ShellView := nil;
                    end;
                  finally
                    ShellBrowser := nil;
                  end;
                finally
                  ServiceProvider := nil;
                end;
              end;
          finally
            WebBrowser2 := nil;
          end;
        finally
          Dispatch := nil;
        end;
      end;
  finally
    ShellWindows := nil;
  end;
end;