私はc#でプロセスウィンドウをフォアグラウンド/フォーカスに設定しようとしています(その瞬間にフォーカスがないアプリケーションから)。したがって、user32.dllstatic extern bool SetForegroundWindow(IntPtr hWnd)
メソッドを使用しています:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
public void setFocus()
{
SetForegroundWindow(process.MainWindowHandle);
}
すべてが正常に機能していますが、Visual Studio 2008 を開いている場合に限り、VS08 からアプリケーションを起動する必要さえありません。プロジェクトを開いておくだけで十分です。プロジェクトを閉じている瞬間、アプリケーションは他のウィンドウをフォアグラウンドに設定できません。唯一の結果は、タスクバーで他のウィンドウが青色で強調表示されることです。VS08 でプロジェクトを再び開くと、問題なく動作しています。
理由は少しもわかりません...問題は、彼がdllをインポートできないことですが、それが強調表示されずstatic extern bool ShowWindow(IntPtr hWnd, IntPtr status);
、プロジェクトが閉じられても他のwin32関数が機能していることだと思いました。
この問題の解決策やヒントはありますか?
編集: 関数のコメントを読みましたが、アプリケーションにフォーカスがないことがわかったので、これを試しました:
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll")]
static extern bool AllowSetForegroundWindow(int procID);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
public void setAUTFocus()
{
IntPtr hWnd = GetForegroundWindow();
uint processID = 0;
uint threadID = GetWindowThreadProcessId(hWnd, out processID);
int intID = (int)processID;
AllowSetForegroundWindow(intID);
SetForegroundWindow(process.MainWindowHandle);
}
今、私は現在フォーカスがあるウィンドウプロセスを探しており、このウィンドウに設定しAllowSetForegroundWindow
、今ウィンドウにフォーカスを設定しようとしています。しかし、同じ問題があり、VS でプロジェクトを開いた瞬間に動作します。そうでない場合は、タスクバーに青いハイライトしか表示されません。
アプリケーションを実行している間、vs プロジェクトを開いたり閉じたりできます。開いている瞬間はすべてが機能し、閉じている瞬間は機能していません。アプリケーションの実行中に VS プロジェクトと対話することはありません。真剣に、私はそれを理解していません。