Функция SendInput (Чужое окно игнорирует программные события !!!)

Тема в разделе "WASM.WIN32", создана пользователем Naruto, 22 фев 2012.

  1. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Используя Функцию SendInput программа имитирует действия мыши (клавы) в чужом окне, это чужое
    окно как то фильтрует эти события и определяет было ли это действие программным или же это реальное нажатие(перемещение) мыши и игнорирует програмные события.

    Как сделать так чтоб он реагировало на программные события???

    Помогите кто нить!!!!!!!!!
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Программый инпут может детектиться через LL-хук, в который передается флаг injected. Поэтому можно попробовать перед SendInput установить свой LL-хук, который будет сбрасывать этот флаг и вызывать CallNextHookEx
     
  3. LightMoon

    LightMoon New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2012
    Сообщения:
    73
    Что это такое ??
     
  4. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    GetAsyncKeyState используется для получения флагов нажатых ФИЗИЧЕСКИХ кнопок мыши.

    Кроме сброса флага LLMHF_INJECTED,какие еще способы есть??
     
  5. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    LightMoon
    LL = Low Level = SendWindowsHookEx c idHook = WH_KEYBOARD_LL или WH_MOUSE_LL

    Naruto
    не знаю
     
  6. Euler

    Euler New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2009
    Сообщения:
    56
    Может целевая программа запущена с максимальными привилегиями, а ваша нет?
     
  7. Naruto

    Naruto New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2010
    Сообщения:
    28
    Сделал хук на мышь смотрю флаг Inject все работает но почему то мышь после хука не перемещается, вот код
    мож кто скажет что не прально:

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;
    type MSLLHOOKSTRUCT=record
    pt:tagPOINT;
    mouseData:lol: WORD;
    flags:lol: WORD;
    time:lol: WORD;
    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;
    K:lol: WORD;
    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.


    Все разобрался все работает