将外部应用程序移动到屏幕的前面

时间:2012-02-10 21:46:21

标签: c# winapi

我正在运行的应用程序需要调用单独的应用程序来进行扫描。我正在通过启动新的System.Diagnostics.Process来调用其他应用程序。一旦我完成了这个过程,我就会调用一个方法来为该应用程序提供重点。我尝试了两种不同的方式来关注外部应用程序,但两者都没有起作用。有人可以帮忙吗?

以下是代码:

using System.Runtime.InteropServices;

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hWnd, uint windowStyle);

    [DllImport("user32.dll")]
    private static extern bool SetWindowPos(IntPtr hWnd, 
      IntPtr hWndInsertAfter, int x, int y, int cx, int cy, uint uFlags);

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

    private static void GiveSpecifiedAppTheFocus(int processID)
    {
        try
        {
            Process p = Process.GetProcessById(processID);

            ShowWindow(p.MainWindowHandle, 1);
            SetWindowPos(p.MainWindowHandle, new IntPtr(-1), 0, 0, 0, 0, 3);

            //SetForegroundWindow(p.MainWindowHandle);
        }
        catch
        {
            throw;
        }
    }

第一种方案使用ShowWindowSetWindowPos方法,另一种方法使用SetForegroundWindow方法。两者都不会起作用......

我使用了错误的方法,还是我在使用的代码中出错?谢谢大家!

2 个答案:

答案 0 :(得分:4)

使用SetWindowPos,但是当你不希望窗口成为最顶层时再次调用它,第二个参数设置为-2(HWND_NOTOPMOST)而不是-1(HWND_TOPMOST)

答案 1 :(得分:0)

尝试将您的流程设置为背景,即:this.SendToBack();这只是另一种解决方案,部分修复。