![](/img/trans.png)
[英]How can I get the MainWindowHandle of a Windows 7 application running as user <foo> from within a service running as Local System?
[英]How to get a form from MainWindowHandle?
我有一个程序,仅允许其自身的一个实例运行。 我用这个代码
bool createdNew = true;
using(Mutex mutex = new Mutex(true, "MobilePOSServer", out createdNew))
{
if(createdNew)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
else
{
Process current = Process.GetCurrentProcess();
foreach(Process proc in Process.GetProcessesByName(current.ProcessName))
{
if(proc.Id != current.Id)
{
SetForegroundWindow(proc.MainWindowHandle);
}
}
}
}
我想做的是处理命令行参数,以在MainForm winform上调用一些start和stop方法。 我可以很好地开始。 但是从新的命令行窗口运行应用程序并尝试调用方法无法正常工作。 我可以把窗户弄到前面。 有什么办法可以从表格中获取表格吗?
还是更好的方法呢?
您将无法获得对表单本身的引用,不-该对象存在于另一个过程中。
如果您希望能够控制其他进程,则需要公开某种“远程访问”(在这种情况下,“远程”表示“进程外”,而不是“在另一台计算机上”)。 这可能是通过.NET远程,WCF或您自己的简单的协议,基于套接字,命名管道等。但是,它很可能是一个有点疼痛做-所以重达多少你真的想要这个功能,你开始把前太多的工作了。
这是您要找的东西吗?
如果要在远程应用程序上执行的方法很简单,则还可以使用SendMessage / PostMessage将Windows消息发送到其他应用程序并触发要执行的操作。
如果您真的需要与其他实例进行更多交互,而不仅仅是简单的触发器,那么我将不得不遵循Jon的回答,并选择带有命名管道的WCF。 正如他所说,这将是一个涉及更广泛的解决方案,您应该考虑该功能对于应用程序的真正重要性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.