keybd_event(0x41, 0, 0, 0); // вот тут какой-то флаг
keybd_event(0x41, 0, KEYEVENTF_KEYUP, 0); // или введите капчу)
keybd_event и противоядие
Код:
Похожий пример или Может кто сообразит?
Код:
LRESULT CALLBACK MouseLowProc(int Code, WPARAM wParam, LPARAM lParam)
{
if (Code < 0) return CallNextHookEx(hhMouseLow, Code, wParam, lParam);
MSLLHOOKSTRUCT *msHS = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);
// если сообщение сгенерировано программно - не будем его обрабатывать
if (msHS->flags & LLMHF_INJECTED) return CallNextHookEx(hhMouseLow, Code, wParam, lParam);
...
{
if (Code < 0) return CallNextHookEx(hhMouseLow, Code, wParam, lParam);
MSLLHOOKSTRUCT *msHS = reinterpret_cast<MSLLHOOKSTRUCT*>(lParam);
// если сообщение сгенерировано программно - не будем его обрабатывать
if (msHS->flags & LLMHF_INJECTED) return CallNextHookEx(hhMouseLow, Code, wParam, lParam);
...
Или попробуй использовать в своих целях параметр dwExtraInfo в keybd_event
Но чтобы не порочить keybd_event попробую найти простое решение.
у WH_KEYBOARD_LL в lParam указатель на структуру KBDLLHOOKSTRUCT
typedef struct {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo; // бумбурум
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
Осталось обнаружить флаг хуком. Бум думу думать.
может
if(((PKBDLLHOOKSTRUCT)lParam)->dwExtraInfo==0)
Beep(40,10);
KBDLLHOOKSTRUCT
В этой структуре есть член flags, и в этих флагах бит 4 как раз и показывает то, что нужно. И не столь важно какой командой слать событие.
Т.е., проверяем так:
Смотрим описание структуры
В этой структуре есть член flags, и в этих флагах бит 4 как раз и показывает то, что нужно. И не столь важно какой командой слать событие.
Т.е., проверяем так:
Код:
KBDLLHOOKSTRUCT *kbdata;
kbdata = (KBDLLHOOKSTRUCT*)lParam;
if(kbdata->flags&0x0001000){действия, если нажатия сэмулированы}
else {действия, если пользователь нажал клавишу}
kbdata = (KBDLLHOOKSTRUCT*)lParam;
if(kbdata->flags&0x0001000){действия, если нажатия сэмулированы}
else {действия, если пользователь нажал клавишу}