какие функции вызываются при нажатии на заголовок формы? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть форма, которая включает в себя процесс Unity. Иногда происходит «что-то», что делает невозможным выполнение некоторых действий над процессом. Я обнаружил, что нажатие на заголовок снова дает возможность выполнять те действия, которые мне нужны в моем процессе.

«что-то» - это моя функция:

private void button1_Click(object sender, EventArgs e)
        {
            myNCServer.SendMessage();
            myNCServer.SendMyObject();

            position = myNCServer.GetPosition();
            compteur++;
            unityHWNDLabel.Text = "position = " + position + " (Updated " + compteur + " times)";


        }

так что я хотел бы знать, что на самом деле происходит, чтобы я мог снова включить свой процесс, не нажимая на заголовок

или если у вас есть другие идеи о том, как с этим справиться ... =)

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 31 мая 2019
    private const int WM_ACTIVATE = 0x0006;
    private readonly IntPtr WA_ACTIVE = new IntPtr(1);

    private void button1_Click(object sender, EventArgs e)
    {
        things();

        SendMessage(unityHWND, WM_ACTIVATE, WA_ACTIVE, IntPtr.Zero);
    }

сделал трюк

спасибо @ Kr15

1 голос
/ 31 мая 2019

То, что вы пытаетесь сделать, будет грязным обходным путем, и, возможно, найдутся лучшие решения для вашей проблемы, соответственно. причина вашей проблемы лежит где-то еще и должна быть решена другим подходом.

Но, чтобы ответить на ваш конкретный вопрос, что происходит при нажатии на полосу титов: ваша программа затем получает сообщение WM_NCACTIVATE (https://docs.microsoft.com/en-us/windows/desktop/winmsg/wm-ncactivate). Это происходит на уровне API win32, который находится под уровнем .NET. Если вы ' Если вы никогда не работали с Win32 API, вы должны сначала прочитать о его механизме «отправки сообщений» (https://docs.microsoft.com/de-de/windows/desktop/winmsg/about-messages-and-message-queues).). Вы можете отправлять сообщения Win32 API в .NET через PInvoke, используя синхронную функцию SendMessage () (https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-sendmessage) или используя асинхронную функцию PostMessage () (https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-postmessagea). Это должно быть хорошей точкой входа для вашего обходного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...