Отправка правого ALT + C с помощью PostMessage

Я пытаюсь отправить в моем приложении право alt + C.

Я попытался сделать это следующим образом:

PostMessage(hWindow, WM_KEYDOWN, (IntPtr)0x0043, (IntPtr)0x0012);
Delay(1000);
PostMessage(hWindow, WM_KEYUP, (IntPtr)0x0043, (IntPtr)0x0012);

а также

PostMessage(hWindow, WM_KEYDOWN, (IntPtr)0x0043, (IntPtr)0x0001);
Delay(1000);
PostMessage(hWindow, WM_KEYUP, (IntPtr)0x0043, (IntPtr)0x0001);

но это не правильно. Как я должен это использовать?

 cadi210808 июл. 2012 г., 20:08
Но мне нужно отправить его в программу в фоновом режиме ...
 Hans Passant08 июл. 2012 г., 19:05
Вы не можете подделать состояние клавиатуры с помощью PostMessage, ваша программа не увидит нажатой клавишу ALT. Требуется SendInput, который запрещает настройку для конкретного окна. Обычно есть какое-то другое сообщение, генерируемое в ответ на нажатие клавиши ALT + C, обычно WM_COMMAND. Поддельный это.
 Hans Passant08 июл. 2012 г., 20:58
Да, конечно, это то, что каждый говорит, когда задает этот вопрос. Но программы всегда были написаны и протестированы с ожиданием, что они находятся на переднем плане, когда они обрабатывают ввод с клавиатуры. И не работают хорошо, когда они не работают. Где-то есть программист, который может помочь вам исправить программу, а мы не можем помочь вам найти его.

Ответы на вопрос(3)

Чередовать их, как

alt down
c down
delay
c up
alt up
 cadi210808 июл. 2012 г., 18:33
Но какой ключ для Alt правильно? Потому что оба варианта, 0x0001 и 0x0012, не работают.
Решение Вопроса

это возможно с использованием PostMessage. Я использовал программу Spy ++ (она внутри Visual Studio или вы можете скачать ее)http://mdb-blog.blogspot.com/2010/11/microsoft-spy-or-spyxx-for-download.htmlЯ запустил notepad.exe и Spy ++ и использовал функцию FindWindow для работы с этим блокнотом. Затем я использовал Spy-> LogMessages, во вкладке «Сообщения» я очистил все и оставил флажок «Клавиатура», а в выводе я проверил параметры необработанного сообщения.

Затем в блокноте я нажал Alt + 1, и я отметил значения из сообщений окна. Теперь я знаю, где используют WM_KEYDOWN, WM_KEYUP, WM_SYSKEYUP и т. Д. И значение lParam, wParam.

Моя функция:

    public void PressKeyWithAlt(uint key, uint lParamDown, uint lParamUp)
    {
        PostMessage(hWindow, WM_KEYDOWN, VK_CONTROL, 0x001D0001);
        PostMessage(hWindow, WM_KEYDOWN, VK_MENU, 0x21380001);
        PostMessage(hWindow, WM_KEYDOWN, key, lParamDown);
        Delay(1000);
        PostMessage(hWindow, WM_KEYUP, key, lParamUp);
        PostMessage(hWindow, WM_SYSKEYUP, VK_CONTROL, 0xE01D0001);
        PostMessage(hWindow, WM_KEYUP, VK_MENU, 0xC1380001);
    }

и например для alt + 1

PressKeyWithAlt(VK_1, 0x20020001, 0xE0020001);

Спасибо за всю помощь.

 04 сент. 2014 г., 09:17
Здравствуйте, я сделал именно то, что вы сделали, но это не работает. вот мой вопрос в stackoverflowstackoverflow.com/questions/25659399/… если вы можете помочь мне, я буду очень благодарен.

WM_SYSKEYDOWN а такжеWM_SYSKEYUP сообщения вместо. Они генерируются при нажатии или отпускании клавиши F10 или ALT +.

Ваш ответ на вопрос