【C++】ウィンドウハンドルの5つの取得方法【基本と応用】
- ウィンドウハンドル (HWND) とは?
- FindWindow関数でウィンドウハンドルを取得
- GetForegroundWindow関数でアクティブウィンドウのハンドルを取得
- GetDesktopWindow関数でデスクトップウィンドウのハンドルを取得
- GetTopWindow関数で最上位のウィンドウのハンドルを取得
- EnumWindows関数で全ウィンドウのハンドルを列挙
- 複数の方法を組み合わせる例
ウィンドウハンドル (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;
}
このように、複数の関数を組み合わせることで、より高度な処理が可能になります。