Process.Start()
を使用して私のプログラムからメモ帳を開きますが、新しい開かれたメモ帳が画面をカバーしています。しかし、私は自分のアプリケーションの焦点を維持したい。プロセス(メモ帳)を開いた後にフォームにフォーカスを戻す方法は?
同様にI(同じProcess.Startを使用して)、MS ExcelとWordを開くが、戻って私のフォームにフォーカスを取得するためには、私が書くために必要なのは次のとおりです。メモ帳で
this.Focus();
しかし癖:私はメモ帳を開きます(とこのような他のすべてのプロセス)
今メモ帳に焦点を当てています。
私はこれらを試してみました:
this.Activate()
、this.Focus()
、別のより長いソリューションはhereからもらった[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern IntPtr SetFocus(HandleRef hWnd); { IntPtr hWnd = myProcess.Handle; SetFocus(new HandleRef(null, hWnd)); }
[DllImport("User32")] private static extern int SetForegroundWindow(IntPtr hwnd); [DllImportAttribute("User32.DLL")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_SHOW = 5; private const int SW_MINIMIZE = 6; private const int SW_RESTORE = 9; { ShowWindow(Process.GetCurrentProcess().MainWindowHandle, SW_RESTORE); SetForegroundWindow(Process.GetCurrentProcess().MainWindowHandle); }
をは言うまでもないです。
まだメモ帳に焦点を当てています。ウィンドウに焦点を当てるだけでは、なぜそれほど難しいのですか?アプリケーション自体のウィンドウですか?
編集:私はメモ帳を最小限に開くことができますが、上記のコードをすべて試してもフォームにフォーカスを当てることはできません。メモ帳は最小化されて開きますが、フォーカスはメモ帳(Windows XPで時々表示されるもの)とフォームに集中しています。
はそれがOKを開始します最小化された状態のウィンドウ? – NoviceProgrammer
はい、問題はありませんが、それでも動作しません。私は私の質問でそれを更新します – nawfal
これを試しましたか? http://stackoverflow.com/questions/2121911/starting-a-process-without-stealing-focus-c – NoviceProgrammer