【C++】ウィンドウハンドルの5つの取得方法【基本と応用】

【C++】ウィンドウハンドルの5つの取得方法【基本と応用】

ウィンドウハンドル (HWND) とは?

Windowsプログラムでは、ウィンドウごとに識別子として「ウィンドウハンドル(HWND)」が割り当てられます。C++では、Windows APIを使用して特定のウィンドウのハンドルを取得できます。

FindWindow関数でウィンドウハンドルを取得

FindWindow関数を使用すると、ウィンドウのタイトルまたはクラス名を指定してハンドルを取得できます。

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = FindWindow(NULL, TEXT("メモ帳"));
    if (hwnd) {
        std::cout << "ウィンドウハンドル: " << hwnd << std::endl;
    } else {
        std::cout << "ウィンドウが見つかりませんでした。" << std::endl;
    }
    return 0;
}

このコードは「メモ帳」のウィンドウハンドルを取得します。

GetForegroundWindow関数でアクティブウィンドウのハンドルを取得

現在アクティブなウィンドウのハンドルを取得するには、GetForegroundWindow関数を使用します。

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = GetForegroundWindow();
    if (hwnd) {
        std::cout << "現在のフォアグラウンドウィンドウのハンドル: " << hwnd << std::endl;
    } else {
        std::cout << "ウィンドウが取得できませんでした。" << std::endl;
    }
    return 0;
}

GetDesktopWindow関数でデスクトップウィンドウのハンドルを取得

GetDesktopWindow関数を使うと、デスクトップウィンドウのハンドルを取得できます。

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = GetDesktopWindow();
    std::cout << "デスクトップウィンドウのハンドル: " << hwnd << std::endl;
    return 0;
}

GetTopWindow関数で最上位のウィンドウのハンドルを取得

GetTopWindow関数を使用すると、特定のウィンドウの最上位の子ウィンドウのハンドルを取得できます。

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = GetTopWindow(NULL);
    std::cout << "最上位のウィンドウのハンドル: " << hwnd << std::endl;
    return 0;
}

EnumWindows関数で全ウィンドウのハンドルを列挙

全ウィンドウのハンドルを取得したい場合、EnumWindows関数を使用します。

#include <windows.h>
#include <iostream>

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
    std::cout << "ウィンドウハンドル: " << hwnd << std::endl;
    return TRUE;
}

int main() {
    EnumWindows(EnumWindowsProc, 0);
    return 0;
}

複数の方法を組み合わせる例

例えば、指定のウィンドウを探し、それがフォアグラウンドかどうかを判定することができます。

#include <windows.h>
#include <iostream>

int main() {
    HWND hwnd = FindWindow(NULL, TEXT("メモ帳"));
    if (hwnd) {
        HWND foreground = GetForegroundWindow();
        if (hwnd == foreground) {
            std::cout << "メモ帳はフォアグラウンドウィンドウです。" << std::endl;
        } else {
            std::cout << "メモ帳はフォアグラウンドウィンドウではありません。" << std::endl;
        }
    } else {
        std::cout << "ウィンドウが見つかりませんでした。" << std::endl;
    }
    return 0;
}

このように、複数の関数を組み合わせることで、より高度な処理が可能になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です