PDA

Просмотр полной версии : [Помогите!] Перехват мыши и симуляция нажатия клавиши


Dimedrol1536
09.07.2011, 15:59
unit Unit1;

interface

uses
Windows, Messages, ShellApi,SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
HookHandle: hHook;
implementation

{$R *.dfm}
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);

type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;

keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);

for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end; { PostKeyEx32 }

function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
begin
if Code >= 0 then begin
result := 0;
msg := Pointer(LParam);
with Form1 do
if (Msg.Message = WM_LBUTTONDOWN) then
begin
PostKeyEx32(Ord('K'), [], False);
end
else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
HookHandle := SetWindowsHookEx(0, @HookProc, HInstance, 0);
end;
end.
После запуска игы "Поинт Блэнк" Хук перестаёт работать.
Нужна помощь по работоспособности Хука.

Добавлено через 5 часов 46 минут
Кто-нибудь может помочь?

Dinmaite
11.07.2011, 00:25
А что тут думать? Фрост блочит хуки, обходите фрост. Закрывать?

Dimedrol1536
11.07.2011, 11:21
обходите фрост. Закрывать?
Обход фроста есть (от Винсома ([Ссылки могут видеть только зарегистрированные и активированные пользователи])). И выходит, что дело не в фросте, а перехватует хук окно игры. Возможно ли обойти защиту?
Пока закрывть не надо.