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

制作: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)
{
  ~;
}

使用条件


免責事項