启动应用程序并将其发送到第二台显示器?有没有办法在另一个屏幕上通过流程开始/午餐?有人在这里问,但没有答案。注意:这不是我的应用程序中的表单,我询问的是在另一个屏幕上运行外部程序!由于该窗口不是您的,因此您只能通过调用WindowsAPI来移动它。您必须这样做:如果您不知道窗口的标题,则不能使用FindWindow。在这种情况下,当然,您可以使用Screen.AllScreens[n].WorkingArea来检索所需屏幕的位置和大小,然后您可以相对于该屏幕定位窗口。首先获取第二台显示器的面积使用:Rectanglearea=Screen.AllScreens[1].WorkingArea;使用WindowsAPISetWindowPos移动它,使用从另一个进程启动它时获得的Process.MainWindowHandle作为句柄。Timwi提供了一个非常有用的提示,因此我决定创建一个PowerShell脚本来调用带有这些函数的库以便于使用,并分享解决方案。我需要在启动时运行多个Chrome窗口,GitHub上的解决方案正好解决了这个问题(相关问题:https://superuser.com/a/901790/111424)。但底层逻辑是相同的:找到要操作的Windows句柄。如Timwi所述,您通常可以使用FindWindow或EnumWindows。但是,如果你的程序很简单,只有一个主窗口,那么就只是:varhndl=proc.MainWindowHandle有了句柄,就可以使用下面的函数了。您只需要提供显示编号(从1开始)和句柄:publicstaticboolMoveToMonitor(IntPtrwindowHandle,intmonitor){monitor=monitor-1;返回WinApi.SetWindowPos(windowHandle,IntPtr.Zero,Screen.AllScreens[monitor].WorkingArea.Left,Screen.AllScreens[monitor].WorkingArea.Top,1000,800,SetWindowPosFlags.SWP_NOZORDER|SetWindowPosFlags.SWP_NOREDRAW);您可以在http://www.pinvoke.net/找到所有枚举和函数导入,或者只需在GitHub上复制我的代码:https://github.com/alex-tomin/Tomin.Tools.KioskMode。您需要启动进程,获取进程主窗口并使用API调用(如SetWindowPos())将窗口移动到所需的屏幕。尝试将这段代码放在form_load方法中:this.setdesktoplocation(intx,inty);this.windowstate=formwindowstate.maximized;x的值必须大于主屏幕的宽度。例如,如果您的主屏幕的分辨率为1366x786像素,您应该为其指定至少1368或更高的xa值。这个对我有用。但它仅用于调试目的。毕竟,当应用程序完成时,您必须在主监视器中运行它。以上就是C#学习教程:启动应用发送到第二台显示器?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
