Используя Функцию SendInput программа имитирует действия мыши (клавы) в чужом окне, это чужое окно как то фильтрует эти события и определяет было ли это действие программным или же это реальное нажатие(перемещение) мыши и игнорирует програмные события. Как сделать так чтоб он реагировало на программные события??? Помогите кто нить!!!!!!!!!
Программый инпут может детектиться через LL-хук, в который передается флаг injected. Поэтому можно попробовать перед SendInput установить свой LL-хук, который будет сбрасывать этот флаг и вызывать CallNextHookEx
GetAsyncKeyState используется для получения флагов нажатых ФИЗИЧЕСКИХ кнопок мыши. Кроме сброса флага LLMHF_INJECTED,какие еще способы есть??
LightMoon LL = Low Level = SendWindowsHookEx c idHook = WH_KEYBOARD_LL или WH_MOUSE_LL Naruto не знаю
Сделал хук на мышь смотрю флаг Inject все работает но почему то мышь после хука не перемещается, вот код мож кто скажет что не прально: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type MSLLHOOKSTRUCT=record pt:tagPOINT; mouseDataWORD; flagsWORD; timeWORD; dwExtraInfo:pointer; end; type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; HH:hwnd; implementation {$R *.dfm} function LowLevelMouseProc(Code: Integer; wParam: DWORD;lparam: pointer): Longint; stdcall; var ms :MSLLHOOKSTRUCT; KWORD; begin k:=MSLLHOOKSTRUCT(lParam^).flags; form1.Edit1.Text:=IntToStr(K); asm PUSH lparam pop k end; Result:=CallNextHookEx(HH,Code,wParam,k); end; procedure TForm1.Button1Click(Sender: TObject); begin HH:=SetWindowsHookEx(WH_MOUSE_LL, @LowLevelMouseProc, hInstance, 0); form1.Edit2.Text:=IntToStr(HH); end; procedure TForm1.Button2Click(Sender: TObject); begin UnhookWindowsHookEx(HH); end; procedure TForm1.Button3Click(Sender: TObject); var arrI:TInput; begin ZeroMemory(@arrI, SizeOf(TInput) * 1); arrI.Itype:=INPUT_MOUSE; arrI.mi.dwFlags:=MOUSEEVENTF_LEFTDOWN;//флаг нажатия левой кгопки мыши SendInput(1,arrI,SizeOf(TInput));//синтезирует нажатия клавиши, движения и щелчки кнопкой мыши. end; end. Все разобрался все работает