0

最もアクティブな Windows Explorer インスタンスのフル パスを取得する必要があります。

したがって、HWND l_pExplorerhwnd = ::GetForegroundWindow(); を呼び出して、Explorer.exe へのハンドルを取得しました。

取得したこのハンドルを使用して、アドレス バーの編集コントロールを取得する必要があります。Spy++ を使用して、エディット コントロールのクラス名を ToolbarWindow32 として取得しました。

ここで、次のコード スニペットを使用して FindWindowEx を使用してウィンドウを見つけようとしました。しかし、私はそれを取り戻すことができません。助けてください

  HWND l_pExplorerhwnd = ::GetForegroundWindow();
  TCHAR l_szTempName[MAX_PATH];

  if(l_pExplorerhwnd)
  {
    ::GetWindowModuleFileName(l_pExplorerhwnd, l_szTempName, MAX_PATH);
    MessageBox(0, l_szTempName, 0, 0);
    if(::FindWindowEx(l_pExplorerhwnd, NULL, L"ToolbarWindow32", NULL))
    {
      ::GetWindowText(::FindWindowEx(l_pExplorerhwnd, NULL, L"ToolbarWindow32", NULL), l_szTempName, MAX_PATH);
      MessageBox(0, l_szTempName, 0, 0);
    }
    else
    {
      MessageBox(0, L"Error Error ", 0, 0);
    }
  }
  else
  {
    MessageBox(0, L"Error Error Error", 0, 0);
  }
4

1 に答える 1

0

質問に直接答えるにFindWindowExは、子孫ではなく、親ウィンドウの直接の子で機能します。したがって、子を 1 つずつトラバースする必要があります。

CabinetWClass
WorkerW
ReBarWindow32
Address Band Root
msctls_progress32
Breadcrumb Parent
ToolbarWindow32

この階層は、現在私のシステムにあるものにすぎないことに注意してください。Tom Whittock が述べたように、これを使用するのは非常に悪い習慣です。ウィンドウ階層が更新ごとに変更される可能性があるかどうか、または実行時の設計によって変更される可能性があるかどうかはわかりません。

コードに関するもう 1 つのコメント。TCHAR マッピングを使用しているため (Win98 をサポートするつもりでない限り、現在使用する理由は通常ありませんが)、文字列リテラル_T("")L"".

于 2012-04-05T13:54:10.963 に答える