3

このトピックに関する良い答えが見つからなかったので、誰かが私を助けてくれるかもしれません. 特定のアプリケーションを前面に出したい小さな個人用プログラムを作成しています。すでに機能していますが、小さな問題が 1 つあります。プロセスが最小化されると、コードが機能しません。プロセスは、最小化されていない場合のようにフォアグラウンドに表示されません。

コードのスニペットを次に示します。

public partial class Form1 : Form
{
    [DllImport("user32.dll")]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    public Form1()
    {
       InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process[] p
            = System.Diagnostics.Process.GetProcessesByName("Client");

        if (p.Length > 0)
        {
            SetForegroundWindow(p[0].MainWindowHandle);
        }
        else
        {
            MessageBox.Show("Window Not Found!");
        }
    }
}
4

1 に答える 1

8

フォアグラウンド ウィンドウとして設定する前に、ShowWindowを呼び出す必要があります。

おそらくSW_RESTORE

 [DllImport("user32.dll")]
 [return: MarshalAs(UnmanagedType.Bool)]
 static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

 if (p.Length > 0)
 {
   ShowWindow(p[0].MainWindowHandle, 9);
   SetForegroundWindow(p[0].MainWindowHandle);
 }

PInvoke.net - ShowWindowDllImportには、C# で関数を使用する例がいくつかあります。

于 2014-12-12T18:10:43.150 に答える