Forum Replies Created
-
AuthorPosts
-
DWWParticipant'TCount' wrote:
Просто непонятно, что прога будет делать. Виртуальная клава…Вижу, что месадж отправляется какому-то окну…Вопрос: какому?
Есть обычная процедура нажатия, но она работает только внутри проги.
procedure PressKey(Key:Integer);
begin
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(Key,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;
Проблему закрыл. Всем спасибо. Обошелся в коде без ProcessMessages. Да здравствует красивый код)
DWWParticipant'TCount' wrote:Я просто не знаю структуру проги. Но логика такова, что код в потоке, а операции с окном (формой) – через синхронизацию.
Просто интернет полон примеров, в которых идут вызовы keybd_event друг за дружкой, и все нажатия типа у них нормально эмулируются. У меня без PostMessage не получается это сделать. Если кто подскажет в чем моя ошибка и что я недопонимаю. буду благодарен. Т.е. проблема, я думаю, в очереди сообщений. Без PostMessage можно как-нибудь заставить отработать нормально keybd_event? Или только потоки и все?
DWWParticipant'TCount' wrote:Кстати, Application.ProcessMessages опасная штука, особенно если использовать ее повсеместно. У меня в какой-то проге тоже из-за этого падения были. Именно потому, что Application.ProcessMessages манипулирует с очередью сообщений.
Может лучше через потоки реализовывать?
то есть если я в потоке напишу:
if VKShift then
keybd_event(VK_SHIFT, 0, 0, 0);
PostMessage(Wnd,WM_KEYDOWN, VKey,0);
if VKShift then begin
VKShift:=false;
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
end;
код отработает без проблем? только потом синхронизировать вывод надо?
DWWParticipant'TCount' wrote:А почему бы не установить версию 9.16 и проверить на ней?)
Попробовал. Не помогло.
-
AuthorPosts