如何在UWP XAML MVVM应用程序上接收最简单的Windows消息?
我的大问题:
我需要从同一个操作系统实例/机器上的 Windows 10桌面应用程序(或服务)发送信号到UWP XAML MVVM应用程序. 我在全局命名空间中使用了命名信号量,但这些在UWP上根本不起作用(出于安全原因,可能是设计).没有快乐. 我尝试过UWP套接字,只有当客户端在远程计算机上时才能使用UWP作为监听器.这也是一个安全设计决定吗?不知道.免除应用程序的环回限制没有帮助,因为这仅适用于UWP应用程序是发出请求的客户端.没有快乐. 好的,所以我只剩下向Windows上的特定窗口发送Windows消息… 我的测试应用程序是GitHub上UWP的AdventureWorks示例.如何处理从其他进程发送的Windows消息?我很难过. 以下是我的测试客户端代码. 题: 请帮忙!请提供示例代码. class Program { [DllImport("user32.dll")] public static extern IntPtr FindWindow(string lpClassName,String lpWindowName); [DllImport("user32.dll")] public static extern int SendMessage(IntPtr hWnd,uint wMsg,IntPtr wParam,IntPtr lParam); [DllImport("user32.dll",SetLastError = true,CharSet = CharSet.Auto)] static extern uint RegisterWindowMessage(string lpString); [DllImport("kernel32.dll")] static extern uint GetLastError(); static void Main(string[] args) { const string lpClassName = "ApplicationFrameWindow"; const string lpWindowName = "AdventureWorks.Shopper"; IntPtr hwnd = FindWindow(lpClassName,lpWindowName); uint messageId = RegisterWindowMessage("MetaAutomationMessage"); int sendMessageResult = SendMessage(hwnd,messageId,IntPtr.Zero,IntPtr.Zero); Console.WriteLine(string.Format("Message result is '{0}',",sendMessageResult)); uint lastError = GetLastError(); Console.WriteLine(string.Format("GetLastError result is '{0}',lastError)); } } 解决方法
UWP应用程序是沙盒,因此您无法通过设计向Win32应用程序发送或接收消息等.
有一些可能不太令人满意的选项,例如通过本地套接字启用环回通信:https://stackoverflow.com/a/33263253/95190(这可能是你尝试过的 – 目前尚不清楚). 但是,如果您需要从本地安装的服务与Universal应用程序进行通信,则UWP应用程序可能不是当今最佳平台选择. 有一些方法可以启动应用程序并在启动时提供一些数据,但Win32服务不应启动交互式用户进程(因此,它也不是传递数据的好方法). 如果需要与Win32应用程序/服务进行通信,您可能需要考虑将应用程序构建为WPF应用程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – Vim作为默认编辑器
- Emacs / GDB:始终使用gdb-many-windows在特定窗口中显示源
- windows – 允许非管理员以管理员身份运行程序(如setuid位)
- windows-8 – Windows 8是否支持Visual Source Safe?
- Windows.event未定义 – Firefox中的JavaScript错误
- .net – 导致Windows在此WPF功能区应用程序中挂起的原因
- 在Windows程序中打印调试输出
- .net – 将PCL转换为常规类库
- windows-8 – 使用WritableBitmapEx从xaml控件创建位图图像
- 部署 – 如何在Windows Azure中部署Orchard CMS?
- active-directory – Windows bginfo显示A.D到期
- Windows Phone 8的Windows Phone 7自动暗/光图标
- active-directory – 委派在Microsoft Exchange
- 如何获取Windows / C#顶层窗口的进程名称和标题
- windows – 您最喜欢的云计算提供商是什么?
- group-policy – 如何使用软件安装GPO部署.exe
- 如何在另一个dll中使用带有Entity框架的asp.net动
- windows-phone-7 – 以编程方式切换飞行模式
- 在Windows上使用线程.简单的例子?
- filter – 使用Microsoft DTV-DVD视频解码器播放