1

C# Windows アプリケーションがあり、最終的に相互運用コンポーネントからダイアログを起動します。問題は、このダイアログ ウィンドウが c# アプリケーションのメイン ウィンドウの背後に表示されることがあり、ユーザーがそれを見つけるために Alt キーを押しながらタブ操作を行う必要があることです。

このダイアログウィンドウを見つけて前に出すための対策を講じました...

private static extern bool SetForegroundWindow(IntPtr hWnd);

public class SearchData
{
    public string Wndclass;
    public string Title;
    public IntPtr hWnd;
}

private static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, ref SearchData data);
private delegate bool EnumWindowsProc(IntPtr hWnd, ref SearchData data);

public static bool EnumProc(IntPtr hWnd, ref SearchData data)
{
  //Code to determine whether the window from handle hWnd is our target window.
  //apply handle, title, class to data and halt the enumeration
}

...しかし、ダイアログのclassNameとフォームのタイトルが変更されるため、ダイアログを「見つける」ことには問題があります。

ただし、ダイアログ ウィンドウの親プロセス ([タスク マネージャー] > [プロセスに移動]) は、現在のプロセスと同じです。したがって、このダイアログ ウィンドウを正しく「見つける」ために、私の目的は、すべてのウィンドウを列挙し、親プロセス ID を見つけて、CurrentProcess と比較することです。

ウィンドウ ハンドルから親プロセス全体を取得する方法はありますか?

4

2 に答える 2

1

GetWindowThreadProccessId will do the work.

于 2012-09-26T08:54:05.800 に答える
0

ダイアログを開く前に、アプリケーション ウィンドウを非表示にしてみてください。そうすれば後ろには見えません。

于 2012-09-26T08:32:20.850 に答える