フォーカスがあるウィンドウハンドルを取得

制作:KrK (Knuth for Kludge)

情報・ご感想はこちら

KrK's Cracked Text > はしくれコード


環境

ソース


#include <windows.h>    // Win32API

//---------------------------------------------------------------------
// フォーカスがあるウィンドウハンドルを取得
// 作成 20140211 KrK
// 戻り値:フォーカスウィンドウハンドル
//---------------------------------------------------------------------
HWND GetFocusWindow()
{
  HWND hForegroundWnd;  // 最前面ウィンドウ
  HWND hFocusWnd;       // フォーカスがあるウィンドウ
  INT foregroundID;     // 最前面ウィンドウのスレッドID
  DWORD processID;      // プロセスID
  DWORD currentID;      // カレントウィンドウのスレッドID

  // カレントウィンドウのスレッドIDを取得
  currentID = GetCurrentThreadId();

  // 最前面ウィンドウのスレッドIDを取得
  hForegroundWnd = GetForegroundWindow();
  foregroundID = GetWindowThreadProcessId(hForegroundWnd, &processID);

  // フォーカスのあっているウィンドウがあった
  if (AttachThreadInput(foregroundID, currentID, TRUE))
  {
    // ウィンドウを最前面に
    SetForegroundWindow(hForegroundWnd);

    // フォーカスがあるウィンドウハンドルを取得
    hFocusWnd = GetFocus();

    // 操作できるようにする
    AttachThreadInput(foregroundID, currentID, FALSE);
  }

  // フォーカスのあっているウィンドウがなかった
  else
  {
    hFocusWnd = NULL;
  }

  // フォーカスがあるウィンドウハンドルを返す
  return hFocusWnd;
}

使い方


// フォーカスがあるウィンドウハンドルを取得
HWND hFocusWnd = GetForegroundWindow();

// フォーカスがあるウィンドウがあった
if (hFocusWnd != NULL)
{
  ~;
}

使用条件


免責事項