我的大问题是:
我需要从Windows 10桌面应用程序(或服务)向同一操作系统实例/机器上的UWP XAML MVVM应用程序发送信号。
我曾经使用全局命名信号量,但这些在UWP上根本不起作用(出于设计原因,可能是出于安全考虑)。没有收获。
我尝试了UWP套接字,这仅在客户端位于远程机器上时才与UWP作为监听器一起工作。这也是一个安全设计决策吗?我不知道。豁免应用程序的环回限制并没有帮助,因为这仅适用于UWP应用程序是发出请求的客户端的情况。没有收获。
好吧,所以我只能向操作系统上的特定窗口发送Windows消息......
我的测试应用程序是GitHub上的UWP AdventureWorks示例。我如何让它处理来自不同进程的Windows消息?我被卡住了。
以下是我的测试客户端代码。
问题: 我如何在AdventureWorks中处理此消息?重要的是尽量减少代码更改,但目前我被卡住了,不知道该怎么做。(似乎这是一个紧密保持的秘密......)
请帮忙!请提供示例代码。
我曾经使用全局命名信号量,但这些在UWP上根本不起作用(出于设计原因,可能是出于安全考虑)。没有收获。
我尝试了UWP套接字,这仅在客户端位于远程机器上时才与UWP作为监听器一起工作。这也是一个安全设计决策吗?我不知道。豁免应用程序的环回限制并没有帮助,因为这仅适用于UWP应用程序是发出请求的客户端的情况。没有收获。
好吧,所以我只能向操作系统上的特定窗口发送Windows消息......
我的测试应用程序是GitHub上的UWP AdventureWorks示例。我如何让它处理来自不同进程的Windows消息?我被卡住了。
以下是我的测试客户端代码。
问题: 我如何在AdventureWorks中处理此消息?重要的是尽量减少代码更改,但目前我被卡住了,不知道该怎么做。(似乎这是一个紧密保持的秘密......)
请帮忙!请提供示例代码。
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));
}
}