Я создаю два приложения, используя winui3C# в качестве приложения-отправителя и приложения-получателя. В приложении-отправителе я использовал findwindow() и send message() при событии нажатия кнопки. В приложении-получателе я хочу показывать уведомление, когда приложение-отправитель отправляет сообщение. Проблема в том, что результат Findwindow() равен «0x0000000000000000». Есть идеи, что мне осталось сделать в этом отношении? Спасибо.
Вот мой код отправителя
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private const uint WM_USER = 0x0400; // Custom message range for user-defined messages
private const int WM_MY_MESSAGE = (int)(WM_USER + 1); // Custom message identifier
private async void SendMessageButton_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
{
try
{
// Find the window handle of the receiver app
IntPtr hWnd = FindWindow(null, "com.receiver"); //namespace of receiver app
if (hWnd != IntPtr.Zero)
{
// Send a message to the receiver app
SendMessage(hWnd, (uint)WM_MY_MESSAGE, IntPtr.Zero, IntPtr.Zero);
await ShowMessageDialog("Message sent to the receiver app.");
}
else
{
await ShowMessageDialog("Receiver app window not found.");
}
}
catch (Exception ex)
{
await ShowMessageDialog("An error occurred: " + ex.Message);
}
}
мой приемник:
private const int WM_MY_MESSAGE = 0x0400 + 1; // Custom message identifier
public MainPage()
{
this.InitializeComponent();
RegisterWindowMessage();
}
private void RegisterWindowMessage()
{
// Register the custom window message
RegisterWindowMessage("WM_MY_MESSAGE");
}
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int RegisterWindowMessage(string lpString);
private void Dispatcher_AcceleratorKeyActivated(CoreDispatcher sender, AcceleratorKeyEventArgs args)
{
// Handle the custom window message
if (args.KeyStatus.RepeatCount == WM_MY_MESSAGE)
{
ShowNotification("Message received from sender app.");
}
}
private async void ShowNotification(string message)
{
var dialog = new MessageDialog(message);
await dialog.ShowAsync();
}
@SimonMourier, спасибо! Я проверил свой Microsoft.UI.Xaml.Window.Current, и результат равен нулю. Я не знаю почему, но это может быть проблема в том, что FindWindow не работает.





Window.Current Property: Настольные приложения всегда возвращают значение null для этого свойства.
Если вы хотите получить дескриптор окна в winui3, я предлагаю вам использовать GetWindowHandle вместо findWindow. Обратитесь к документу: Получить дескриптор окна
FindWindow(null, "com.receiver")должно работать нормально (возвращать ненулевой дескриптор), если вы ищете открытое окно WinUI3, для которого свойствоTitleустановлено в"com.receiver".