Fooです。
WIN32API ChildWindowFromPoint WindowFromPoint についての質問です。
WIN32APIを用い、一定時間ごとに現在のマウス座標を含むウィンドウを最小化するプログラムを書こうと考えたのですが、
ユーザーが立ち上げた応用アプリケーションのウィンドウと、システムが立ち上げたウィンドウとの区別がつけられずに困っています。
具体的には、スタートメニュー(窓ロゴのやつ)や、デスクトップ上のアイコンなどの ウィンドウハンドルを取得し、最小化しようとしてしまいます。
void contact(){
POINT pt;
GetCursorPos(&pt);
auto hWnd1 = WindowFromPoint(pt);
if(hWnd1){
ScreenToClient(hWnd1,&pt);
auto hWnd2 = ChildWindowFromPoint(hWnd1,pt);
if(hWnd2){
hWnd1 = hWnd2;
}
}
ShowWindow(hWnd1,SW_MINIMIZE);
}
取得したウィンドウハンドルが、ユーザーによって起動されたソフトのウィンドウのものなのか、
OSが起動したものなのかを区別する方法があればご教授お願いできませんでしょうか。
[WIN32API]別プロセスのウィンドウハンドル取得について
Re: [WIN32API]別プロセスのウィンドウハンドル取得について
GetAncestor(hWnd1, GA_ROOTOWNER)が返すハンドルのウィンドウのクラス名が…
・ProgmanまたはWorkerWのときはデスクトップに類するウィンドウ
・Shell_TrayWndのときはタスクバーに類するウィンドウ
というふうに個別にチェックするしかないようです。
Windows 7で調べたら、通知領域の隠れたアイコンを表示するウィンドウとかガジェットとかも特別なクラス名を持っていますね。
・ProgmanまたはWorkerWのときはデスクトップに類するウィンドウ
・Shell_TrayWndのときはタスクバーに類するウィンドウ
というふうに個別にチェックするしかないようです。
Windows 7で調べたら、通知領域の隠れたアイコンを表示するウィンドウとかガジェットとかも特別なクラス名を持っていますね。
-
Foo
Re: [WIN32API]別プロセスのウィンドウハンドル取得について
回答ありがとうございます。
私も調べてみたのですが、
Windows7だと、スタートメニューはShell_TrayWnd下ではなく、デスクトップにあったりして、
結構面倒臭そうですね。
とりあえず、画面上のパーツを一つ一つ確認する方向で頑張ってみようと思います。
私も調べてみたのですが、
Windows7だと、スタートメニューはShell_TrayWnd下ではなく、デスクトップにあったりして、
結構面倒臭そうですね。
とりあえず、画面上のパーツを一つ一つ確認する方向で頑張ってみようと思います。