作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的大局问题:我需要将信号从 Windows 10 桌面应用(或服务,实际上)发送到同一操作系统实例/机器上的 UWP XAML MVVM 应用。
我在全局命名空间中使用命名信号量,但这些在 UWP 上根本不起作用(出于安全原因,可能是设计使然)。没有快乐。
我尝试了 UWP 套接字,只有当客户端在远程计算机上时,它才作为监听器与 UWP 一起工作。这也是安全设计决策吗?不知道。使应用免于环回限制没有帮助,因为这仅适用于 UWP 应用是发出请求的客户端的情况。没有快乐。
好的,所以我只剩下向操作系统上的特定窗口发送 Windows 消息...
我的测试应用程序是 GitHub 上 UWP 的 AdventureWorks 示例。我如何得到它来处理从不同进程发送的 Windows 消息?我很难过。
下面是我的测试客户端代码。
问题:我如何在 AdventureWorks 中处理此消息?将代码更改保持在最低限度很重要,但目前我被卡住了,不知道如何继续。 (这似乎是一个严密的 secret ......)
求助!请提供示例代码。
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));
}
}
最佳答案
Windows 10 UWP 应用服务通信可以是在 UWP 应用之间发送一组键值的选项之一。
引用: https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/how-to-create-and-consume-an-app-service
关于windows - 如何在 UWP XAML MVVM 应用程序上接收最简单的 Windows 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019961/
我是一名优秀的程序员,十分优秀!