Проблема с почтовыми сообщениями Windows C#

[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); 

public void keyPress(){
        const uint WM_KEYDOWN = 0x100;
        const uint WM_KEYUP = 0x0101;
        PostMessage(Process, WM_KEYDOWN, (int)Keys.Q, (IntPtr)Convert.ToInt32("00100001", 16));
        Thread.Sleep(1000);
        PostMessage(Process, WM_KEYUP, (int)Keys.Q, (IntPtr)Convert.ToInt32("C0100001", 16));
}

Я пытаюсь вызвать PostMessage с помощью Keydown и keyup. Я знаю, что процесс получает сообщение, потому что я просматриваю сообщения с помощью spy++ и отправляю те же wParam и lParams, которые вызываются, когда я сам нажимаю кнопку в окне. Я пытался использовать SendKeys.sendwait вместе с setforeground, но та же проблема возникает, когда одно и то же сообщение появляется в spy++, но в окне нет активного ответа.


person vifs    schedule 19.02.2014    source источник
comment
Является ли Process дескриптором окна?   -  person Jumpei    schedule 19.02.2014
comment
Извините, Process — это IntPtr, полученный из Processes.MainWindowHandle.   -  person vifs    schedule 22.02.2014


Ответы (1)


SendInput — лучшая альтернатива для правильного моделирования входных данных.

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

person SMUsamaShah    schedule 10.03.2016