] Что могло привести к тому, что щелчки мыши, отправленные PostMessage, игнорировались? [

] [

] Я искал способ отправлять щелчки мыши в фоновое приложение в Windows (то есть по дескриптору). Тестовое окно, которое я использовал для подтверждения моего кода, было рабочий принимает и обрабатывает щелчки, но мое целевое приложение - нет (хотя Spy ++ показывает сообщения). [

] [

] Что могло быть причиной этого? И есть ли обходной путь? [

] [

] Вот код C #, который я использую. [

] [
public enum WMessages : int
{
    WM_LBUTTONDOWN = 0x201,
    WM_LBUTTONUP = 0x202,

    WM_KEYDOWN = 0x100,
    WM_KEYUP = 0x101,

    WH_KEYBOARD_LL = 13,
    WH_MOUSE_LL = 14,
}

[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", SetLastError = true)]
private static extern int PostMessage(HandleRef hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);

public void SendClick(WMessages type, Point pos)
{
    switch(type)
    {
        case WMessages.WM_LBUTTONDOWN:
            PostMessage(new HandleRef(null, this.process.MainWindowHandle),
                (UInt32)WMessages.WM_LBUTTONDOWN, (IntPtr)0x1,
                (IntPtr)((pos.Y << 16) | (pos.X & 0xFFFF)));
            return;
        case WMessages.WM_LBUTTONUP:
            PostMessage(new HandleRef(null, this.process.MainWindowHandle),
                (UInt32)WMessages.WM_LBUTTONDOWN, (IntPtr)0x1,
                (IntPtr)((pos.Y << 16) | (pos.X & 0xFFFF)));
            return;
        default:
            return;
    }
}

SendClick(WMessages.WM_LBUTTONDOWN, Cursor.Position);
SendClick(WMessages,WM_LBUTTONUP, Cursor.Position);
] [

] Можно ли этого достичь? Есть ли лучший способ добиться этого? [

] [

] Примечание: приведенный выше код не работает, когда приложение активно и указатель мыши находится в правильном месте. Я также ищу специально для отправки ввода в фоновое приложение, поэтому о SendInput и других не может быть и речи. [

] [

] Спасибо [

]
5
задан Idan K 28 August 2011 в 18:58
поделиться