6

特定のバックグラウンド プロセス (つまり、既に実行中のアプリケーション) を特定してフォアグラウンドにする方法を誰か教えてもらえますか? たとえば、メモ帳アプリケーションがバックグラウンドで実行されている場合、WIN32 アプリケーションを実行すると、メモ帳アプリケーションが識別され、メモ帳がポップアップまたはフォアグラウンドになるはずです。

SwitchToThisWindow() 関数を試してみましたが、Alt+tab のように動作します。バックグラウンド プロセスは識別されません。

Plsは私にこれのためのウォークスルーガイドを提案します..

ありがとうございました..

4

2 に答える 2

5

「バックグラウンドプロセス」の意味は明確ではありませんが、いくつかのアイデアがあります。

EnumWindowsを使用して、デスクトップ上のすべてのトップレベルHWNDを取得します。これには、フィルターで除外する必要のないものがたくさん含まれます。Spy ++で遊んで、HWNDツリーがどのように見えるか、およびここでどのような種類のHWNDを見つけるかを確認することをお勧めします。

このセットから、非表示のHWNDを除外または無視する必要があります(IsWindowVisibleを使用するか、WS_VISIBLEスタイルを確認してください)。

また、WS_POPUPが設定されているウィンドウを除外します。これらは、ツールチップ、メニューポップアップ、フローティングツールバーなどです。

現在アクティブなウィンドウを除外するには(まだ知らない場合)、idThread=0でGetGUIThreadInfoを使用します。GUIHREADINFO.hwndActiveはアクティブなウィンドウを返すため、それ以外のトップレベルのHWNDは非アクティブなウィンドウです。

最小化されたウィンドウを特に探している場合は、IsIconic(hwnd)を使用してそれらを検出できます。

最後に、「背景」と見なすウィンドウを見つけたら、GetWindowTextを使用してタイトルを取得するか、GetWindowThreadProcessIdを使用してプロセスIDを取得できます。

于 2012-06-13T11:23:16.887 に答える
3

しかし、バックグラウンドプロセスを特定する方法はありますか

これは Unix シェルの概念であり、Windows にはありません。現在、フォアグラウンドにないウィンドウを作成した 10 個の「バックグラウンド」プロセスと、作成していない別の 50 個程度のプロセスがあります。それらのどれもバックグラウンド プロセスではありません。それらはすべて同じようにバックグラウンドです。通常、ウィンドウのタスクバー ボタンをクリックするか、Alt+Tab を押してウィンドウの 1 つを前面に切り替えます。または、コードで SetForegroundWindow() を呼び出します。

于 2012-06-13T07:41:04.933 に答える