[WIN32API]別プロセスのウィンドウハンドル取得について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Foo

[WIN32API]別プロセスのウィンドウハンドル取得について

#1

投稿記事 by Foo » 13年前

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が起動したものなのかを区別する方法があればご教授お願いできませんでしょうか。

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: [WIN32API]別プロセスのウィンドウハンドル取得について

#2

投稿記事 by ISLe » 13年前

GetAncestor(hWnd1, GA_ROOTOWNER)が返すハンドルのウィンドウのクラス名が…
・ProgmanまたはWorkerWのときはデスクトップに類するウィンドウ
・Shell_TrayWndのときはタスクバーに類するウィンドウ
というふうに個別にチェックするしかないようです。

Windows 7で調べたら、通知領域の隠れたアイコンを表示するウィンドウとかガジェットとかも特別なクラス名を持っていますね。

Foo

Re: [WIN32API]別プロセスのウィンドウハンドル取得について

#3

投稿記事 by Foo » 13年前

回答ありがとうございます。
私も調べてみたのですが、
Windows7だと、スタートメニューはShell_TrayWnd下ではなく、デスクトップにあったりして、
結構面倒臭そうですね。

とりあえず、画面上のパーツを一つ一つ確認する方向で頑張ってみようと思います。

閉鎖

“C言語何でも質問掲示板” へ戻る