gpt4 book ai didi

windows - 如何在 UWP XAML MVVM 应用程序上接收最简单的 Windows 消息?

转载 作者:可可西里 更新时间:2023-11-01 13:26:06 26 4
gpt4 key购买 nike

我的大局问题:我需要将信号从 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com