WinUI3 FindWindow() продолжает возвращать 0x0000000000000000

Я создаю два приложения, используя 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();
}
FindWindow(null, "com.receiver") должно работать нормально (возвращать ненулевой дескриптор), если вы ищете открытое окно WinUI3, для которого свойство Title установлено в "com.receiver".
Simon Mourier 19.04.2024 08:41

@SimonMourier, спасибо! Я проверил свой Microsoft.UI.Xaml.Window.Current, и результат равен нулю. Я не знаю почему, но это может быть проблема в том, что FindWindow не работает.

Su Myat Kyaw 19.04.2024 09:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Window.Current Property: Настольные приложения всегда возвращают значение null для этого свойства.

Если вы хотите получить дескриптор окна в winui3, я предлагаю вам использовать GetWindowHandle вместо findWindow. Обратитесь к документу: Получить дескриптор окна

Другие вопросы по теме