6

実行中のアプリケーションを切り替えるc#アプリケーションを作成したいと思います。WindowsのAlt+Tabのような正確な機能を実行する必要があります。Windows APIの関数を使用SetForegroundWindow()していますが、Windowsのタスクバーでアプリケーションを最小化するとうまく機能しません。そこで機能を追加しましShowWindow()たが、ユーザーが設定した元のサイズでウィンドウを表示できないという問題があります。

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

[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

例:ウィンドウを最大化してから、タスクバーに最小化します。私が電話するとき:

ShowWindow(processWindowHandle, ShowWindowCmd.SW_NORMAL);
WindowsApi.SetForegroundWindow(processWindowHandle);

ウィンドウが最大化されていません。ShowWindowCmd.SW_NORMALパラメータを試してみましたが、同じ結果になりました。

4

1 に答える 1

2

私は以前にこれを行いました。すべてのリストを開いて、すべてを最小化し、それを繰り返して、各プログラムを復元したいプログラムと比較してから、そのプログラムを復元します。復元する1つのウィンドウを識別する方法が必要です。以前は、環境を制御していたのでMainWindowTitleを使用していました。したがって、各MainWindowTitleが一意であることが保証でき、そのような贅沢はないかもしれません。

私が過去にこれに使用したコードは以下のとおりです、それはうまくいきました:

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

void SwitchDatabase(string mainWindowTitle)
{
        try
        {
            bool launched = false;

            Process[] processList = Process.GetProcesses();

            foreach (Process theProcess in processList)
            {
                ShowWindow(theProcess.MainWindowHandle, 2);
            }

            foreach (Process theProcess in processList)
            {
                if (theProcess.MainWindowTitle.ToUpper().Contains(mainWindowTitle.ToUpper()))
                {
                    ShowWindow(theProcess.MainWindowHandle, 9);
                    launched = true;
                }
            }
        }
        catch (Exception ex)
        {
            ThrowStandardException(ex);
        }
}
于 2013-03-26T13:52:56.793 に答える