我正在运行的应用程序需要调用单独的应用程序来进行扫描。我正在通过启动新的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;
}
}
第一种方案使用ShowWindow
和SetWindowPos
方法,另一种方法使用SetForegroundWindow
方法。两者都不会起作用......
我使用了错误的方法,还是我在使用的代码中出错?谢谢大家!
答案 0 :(得分:4)
使用SetWindowPos,但是当你不希望窗口成为最顶层时再次调用它,第二个参数设置为-2(HWND_NOTOPMOST)而不是-1(HWND_TOPMOST)
答案 1 :(得分:0)
尝试将您的流程设置为背景,即:this.SendToBack();这只是另一种解决方案,部分修复。