#10 05.05.07 02:23
#11 05.05.07 14:42
Re: Подскажите в дельфи
Ох еще одна проблемка(наверно уже достал)
По некоторым причинам через апи не могу сделать, нашел код на ассемблере:
Код::
procedure EmulateKey(Wnd: HWND; VKey: Integer); asm push 0 push edx push 0101H //WM_KEYUP push eax push 0 push edx push 0100H //WM_KEYDOWN push eax call PostMessage call PostMessage end;
но это только для клавы. Подскажите как такой же сделать для мыши, ато ассемблер я вообще не знаю(
Offline
#12 05.05.07 15:58
Re: Подскажите в дельфи
{Эмуляция нажатия клавиши с клавиатуры}
procedure SetKey(const Key: Byte);
begin
try
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);
except
end;
end;
далее по мышке:
// Эмуляция нажатия левой кнопки
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
// Эмуляция нажатия правой кнопки
{
mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
}
// Эмуляция двойного клика
{
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
//Симуляция левого клика по объекту чей Handle ты знаешь
{
SendMessage(Handle, WM_LBUTTONDOWN, 0,0);
SendMessage(Handle, WM_LBUTTONUp, 0,0);
}
можно и координаты клика задавать, но эт чуть посложнее))
а вообще советую если ты эмулируешь нажатие клавиши в определенной форме, то и отправляей только ей, а не всей системе.
Offline
#13 05.05.07 16:57
Re: Подскажите в дельфи
Не, я конечно понимаю по SendMessage все хорошо и прекрасно, только не работает это в моем случае. Не знаю в чем дело конкретно, наверно там есть дочерние окна или еще что-то. Короче работает только по коду написаному выше, на ассемблере. Вот мне и надо такой же для мыши
Offline
#14 05.05.07 18:48
#15 05.05.07 19:10
#16 05.05.07 19:26
#17 05.05.07 19:58
#18 05.05.07 20:02
Re: Подскажите в дельфи
но скажу одно замечание: не пытайся эмулировать нажатие клавиш клавиатуры и мыши SendMessage'ом, для этого есть SendInput!
SendMessage'ом конечно можно, но нереально сложно повторить нужные сообщения нужным окнам, какие посылаются при реальном нажатии на клавиши. там ведь не только результирующему окну сообщение идет.
А SendInput эмулирует реальное нажатие клавиш
Offline

