6

外部アプリケーション (ポーカー オンライン ゲーム テーブル) のウィンドウが他のすべてのウィンドウを飛び越えるタイミングを確認したいのは、自分がプレイする番だからです。

問題は、Game テーブルがフォアグラウンドでジャンプすることです...しかし、ウィンドウはアクティブになりません...これは、API GetForegroundWindow (および fatcこの API は、前のウィンドウのハンドルを引き続き返します。これは、すべてのデスクトップ ウィンドウを飛び越えるゲーム テーブルの下にある場合も同様です)。また、GetTopWindow API も機能しません。

ここでの問題は、それがアクティブでない場合でも、一番上の VISIBLE ウィンドウ (私の目には他のすべての開いているウィンドウの上にあるウィンドウ) のハンドルを見つける方法ですか?


いいえ、ウィンドウは TopMost ウィンドウではありません。実際、別のウィンドウをクリックすると、バックグラウンドになります。それが TopMost ウィンドウである必要がある場合は、一番上に残ります。

おそらく、WM_SHOW または WM_NOACTIVATE フラグによってフォアグラウンドに配置されます。

4

3 に答える 3

2

EnumWindowsおそらくWindowFromPointAPI関数。VB.NET アプリケーションで P/Invoke を介してそれらを使用し、目的のウィンドウを識別する途中でウィンドウの位置、キャプションなどをチェックする上から下の順序 (EnumWindows) でウィンドウを検索するか、直接検索することができます。特定の位置のウィンドウ (WindowFromPoint; 関心のあるウィンドウが画面の中央にポップアップするか、既に知っている別のウィンドウの中央に表示されるか、キャプションで簡単に見つけることができると思いました-このようにして、あなたのポイントを知ることができますすでに画面に関心があります)。

于 2012-08-26T08:00:03.630 に答える
1

アプリがSetWindowPos(..., HWND_TOPMOST, ...)最上位のウィンドウになるために使用しているように聞こえます。このように配置されたウィンドウは、最前面に表示するためにアクティブである必要はありません。

その場合、 を使用GetWindow(..., GW_HWNDFIRST)して、ウィンドウ マネージャーの z オーダーで一番上のウィンドウを見つけることができます。これを行う短いコード スニペットについては、http://support.microsoft.com/kb/126386を参照してください。

于 2012-08-26T03:47:31.887 に答える
0

SetForegroundWindow(hWnd)ポーカー アプリケーションは、自分の番になったときにウィンドウをトップに移動するなど、Win32 API を使用する必要があります。

このような呼び出しを検出するために、Windbg Script Tracing API 呼び出しを使用できます。

これを使用すると、別のツールを使用せずに、Windbg 画面からアプリケーションが使用している API を確認できます。API の詳細が必要な場合は、LogViewer.exe を実行し、このスクリプトを使用すると自動的に作成される .lgv ファイルを開きます。

ここに画像の説明を入力

ここに画像の説明を入力

拡張子が .LGV の出力ファイル。

ここに画像の説明を入力

LogViewer.exe は、Debugging Tools For Windows の一部です。Windbg をインストールした場所と同じ場所にあります。LogViewer.exe を使用して .LGV ファイルを開きます。

ここに画像の説明を入力

API_TRACING.TXT のソース コード:

$$
$$ =============================================================================
$$ Trace APIs during the Debugging Session. 
$$ Creates a log on Desktop and Windbg window.
$$ To see the more verbose log run logviewer.exe from Debugging Tools for Windows
$$ and open the file that has the .lgv extension.
$$ This file is inside LogExts on your desktop.
$$
$$ Compatibility: Win32, should work on Win64.
$$
$$ Usage: $$>< to run the program.
$$
$$ Roberto Alexis Farah
$$ Blog: blogs.msdn.com/debuggingtoolbox/
$$
$$ All my scripts are provided "AS IS" with no warranties, and confer no rights.
$$ =============================================================================
$$
!logexts.loge
!logexts.logc e *
!logexts.logo e v
!logexts.logb p
$$
$$ ====================================
$$ Logging is enabled for this process.
$$ ====================================

このすべての情報を取得すると、特定の呼び出し元/DLL/etc からどの API 呼び出しに注意する必要があるかがわかります。それが自分の番です。ポーカー ウィンドウが一番上に表示され、この KB 記事を使用してハンドルを見つけることができます。 TopMost ウィンドウの

于 2012-08-26T03:38:49.870 に答える