14

フォーカスを失うプログラムに問題があります。それは私のプログラムではありません。1〜2秒ごとにそのウィンドウにフォーカスを設定する2番目のプログラムを作成するにはどうすればよいですか? それは可能ですか?

4

2 に答える 2

25

他のプログラム/プロセスに焦点を当てたい場合は、次の Win32 API 呼び出しを使用できます。

[DllImport("user32.dll")]
static extern bool SetForegroundWindow (IntPtr hWnd);

private void BringToFront(Process pTemp)
{
    SetForegroundWindow(pTemp.MainWindowHandle);
}
于 2012-06-05T13:55:08.027 に答える
8

spy++ またはその他の UI ツールを使用して、フォーカスするウィンドウのクラス名を見つけます。たとえば、focusWindowClassName. 次に、以下の関数を追加します。

[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

[System.Runtime.InteropServices.DllImport("User32.dll")]
 public static extern bool ShowWindow(IntPtr handle, int nCmdShow);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

//Then:
// [Edit] Changed IntPrt to IntPtr
IntPtr hWnd = FindWindow("focusWindowClassName", null); // this gives you the handle of the window you need.

// then use this handle to bring the window to focus or forground(I guessed you wanted this).

// sometimes the window may be minimized and the setforground function cannot bring it to focus so:

/*use this ShowWindow(IntPtr handle, int nCmdShow);
*there are various values of nCmdShow 3, 5 ,9. What 9 does is: 
*Activates and displays the window. If the window is minimized or maximized, *the system restores it to its original size and position. An application *should specify this flag when restoring a minimized window */

ShowWindow(hWnd, 9); 
//The bring the application to focus
SetForegroundWindow(hWnd);

// you wanted to bring the application to focus every 2 or few second
// call other window as done above and recall this window again.
于 2015-07-24T06:53:38.577 に答える