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

本文关键字:屏幕 前面 移动 外部 应用程序 | 更新日期: 2023-09-27 18:24:00

我正在运行的应用程序需要调用一个单独的应用程序来进行一些扫描。我正在通过启动一个新的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方法。两者都不起作用。。。

我是否使用了错误的方法,或者我使用的代码中有错误?谢谢大家!

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

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

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