C# 将外部应用程序移到屏幕前部
我正在运行的应用程序需要调用一个单独的应用程序来进行扫描。我通过启动一个新的C# 将外部应用程序移到屏幕前部,c#,winapi,C#,Winapi,我正在运行的应用程序需要调用一个单独的应用程序来进行扫描。我通过启动一个新的System.Diagnostics.Process调用另一个应用程序。一旦我得到了这个过程,我就调用一个方法来为这个应用程序提供焦点。我尝试了两种不同的方法来让外部应用程序成为焦点,但都不起作用。有人能帮忙吗 代码如下: using System.Runtime.InteropServices; [DllImport("user32.dll")] private static extern bool
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
方法。两者都不起作用
我是否使用了错误的方法,或者我使用的代码中是否存在错误?谢谢大家 使用SetWindowPos,但当您不想让窗口成为最顶层时,请再次调用它,将第二个参数设置为-2(HWND_NOTOPMOST),而不是-1(HWND_topmost)尝试将进程设置为后台,即:this.SendToBack();这只是另一个解决方案,部分修复。SetForegroundWindow应该可以工作,在调用GiveSpecifiedAppTheFocus之前是否启动了该应用程序?是的,下面是流程。1) 接收要发送给扫描实用程序的消息,2)检查扫描实用程序是否正在运行(如果是,请转到4),3)启动扫描实用程序,4)向扫描实用程序发送要扫描的文档,5)将焦点交给扫描实用程序。我没有收到任何错误消息或任何东西…只是再次尝试了ShowWindow/SetWindowPos方法,它现在可以工作了,但它始终位于顶部,即使我单击了后台的应用程序。我正在再次尝试前台版本…SetForeGroundIndow不起作用…太棒了,它起作用了!private static void GiveSpecifiedAppTheFocus(int-processID){try{Process p=Process.GetProcessById(processID);//ShowWindow(p.MainWindowHandle,1);SetWindowPos(p.MainWindowHandle,new-IntPtr(0),0,0,0,3);//setForeGroundInow(p.MainWindowHandle);}catch{throw;}