C# 如何从C语言中的应用程序获取后台运行的应用程序菜单项的句柄#
我正在开发一个应用程序,它将是在后台运行的许多其他工具的界面。我面临一个问题。在启动后台应用程序期间,它需要加载特定文件(文件-->加载-->文件名) 让前端应用程序为C# 如何从C语言中的应用程序获取后台运行的应用程序菜单项的句柄#,c#,automation,C#,Automation,我正在开发一个应用程序,它将是在后台运行的许多其他工具的界面。我面临一个问题。在启动后台应用程序期间,它需要加载特定文件(文件-->加载-->文件名) 让前端应用程序为Fapp,后台应用程序为Bapp。Fapp是否可以获取Bapp菜单项的句柄并触发加载功能。我能得到按钮的手柄,但不能得到菜单项的手柄 现在我们使用AutoIt来实现这一点,我尝试在C#本身中实现这一点。在获得要调用其菜单的窗口句柄后,您可以使用 humenu GetMenu(HWND)windowsapi获取菜单 humenu
Fapp
,后台应用程序为Bapp
。Fapp
是否可以获取Bapp
菜单项的句柄并触发加载功能。我能得到按钮的手柄,但不能得到菜单项的手柄
现在我们使用AutoIt来实现这一点,我尝试在C#本身中实现这一点。在获得要调用其菜单的窗口句柄后,您可以使用
windowsapi获取菜单humenu GetMenu(HWND)
进入文件菜单,然后再次打开菜单humenu GetSubMenu(humenu,int)
获取有关菜单的信息BOOL GetMenuItemInfo(…)
- 您可以使用
PostMessage((IntPtr)hWnd,WM_命令,0,ID_菜单项)代码>()以在该项目上执行单击
所有这些API都是AutoIt调用的(我认为)。如果您的
Bapp
是一个具有普通windows菜单的普通windows应用程序,而不是一个花哨的WPF应用程序或功能区,则此解决方案有效。如果是这种情况,那么您所看到的菜单可能不是菜单(从技术上讲)您确定这是让两个应用程序相互对话的正确方法吗
如果您没有BApp的源代码,也没有可以使用的API,那么假装是交互式用户可能是与之交互的唯一方式。只要意识到它充满了问题,考虑一下当会发生什么
- BApp尚未运行
- BApp打开了一个模式对话框
- BAPP处于操作(或挂起)的中间,其菜单被禁用
- BApp将更新为新版本,其UI将发生更改
this._host = new ServiceHost(service);
this._host.AddServiceEndpoint(typeof(IContract), new NetTcpBinding(), address);
this._host.Open();
这将使您能够让两人完全独立地交谈。如果您的Bapp能够以某种方式调用Win32 API,则可以通过使用向Fapp发送自定义消息来实现。在Fapp中,处理此消息并采取适当的操作
我不认为获取控件的句柄并调用其处理程序是正确的方法。检查菜单项的访问修饰符….“工具”是否等于“过程”?如果是这样的话,您是否阅读过.NET中有关进程间通信(IPC)的内容?否则,“工具”是什么意思?我所说的“工具”是指另一个应用程序,不一定是.net应用程序,比如用python开发的可执行文件。@andy。我没有我正在尝试获取句柄的应用程序的代码。我不会将此标记为WPF问题,因为您的问题是对另一个似乎不基于WPF的应用程序进行“反向工程”。您可能需要了解有关Bapp实现的更多信息,以搜索能够深入了解它的工具。老鼠!刚刚发现你不是在说两个WPF应用。