我的大图片问题: 我需要从Windows 10桌面应用程序(或真正的服务)向同一OS实例/机器上的UWP XAML MVVM应用程序发送信号。如何在UWP XAML MVVM应用程序上接收最简单的Windows消息?
我在全局命名空间中使用了命名信号量,但这些在UWP上根本无法工作(出于安全原因,也许是设计)。没有快乐。
我试过UWP插座,并与UWP这个工程为收听只有当客户端是在远程机器上。这也是一个安全设计决定吗?不知道。从回送限制中豁免应用程序不会有帮助,因为只有在UWP应用程序是发出请求的客户端时才适用。没有快乐。
OK,所以我留下的OS上发送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));
}
}
在问候“?试过UWP插座,这一点也适用与UWP因为只有当客户端是在远程计算机上收听这是一个安全的设计决策,太不知道” ,您是否认为这可能不起作用,因为Package Manifest中没有启用“Private Networks(Client&Server)”功能? – Saxar
我已经制定了胜利10应用程序以及uwp应用程序,您可以实施信号器广播/信号到其他应用程序。 –