2017年1月20日金曜日

他プロセスに対する GetFocus

他プロセスがフォーカスを持っている場合は、通常 GetFocus は NULL を返します。
RegisterHotKey の処理で GetFocus をしたい場面が出てくるとします。

#include <windows.h>
#include <stdio.h>

int main() {
 while (1) {
  HWND hwndForeground = GetForegroundWindow();
  DWORD procId = 0;
  DWORD threadId = GetWindowThreadProcessId(hwndForeground, &procId);
  AttachThreadInput(GetCurrentThreadId(), threadId, true);
  HWND hwndActive = GetActiveWindow();
  HWND hwndFocus = GetFocus();
  AttachThreadInput(GetCurrentThreadId(), threadId, false);
  printf("%p %p %p \n", hwndForeground, hwndActive, hwndFocus);
  Sleep(100);
 }
}


このようにしたらいけました。AttachThreadInput がキモですね…

GetActiveWindow == GetForegroundWindow になります。

GetFocus で、目当てのコントロールが取得できます。

0 件のコメント:

コメントを投稿