Просмотр полной версии : Переназначение клавиш
DeaD_MoroZ
03.12.2009, 19:38
Собственно, у кого есть какие мысли по поводу:например, сделать так что бы при нажатии на славишу alt печатолось слово ПРИВЕТ(не в отдельной просграмме, а в Windows в целом).
Scancode Map не предлагать, так как мне нужно задать фразу на клавишу. Я понимаю что надо с хуками работать, но не могу сообразить как...
SultanOFF
03.12.2009, 23:35
хм перехватывать клавишу alt допустим..
DeaD_MoroZ
04.12.2009, 05:36
хм перехватывать клавишу alt допустим..
обсолютно не понял ответа... тебе для справки: код клавиши ALT --> 164
а код "привет" --> 71,72,66,68,84,78
mr. ZetRikS
04.12.2009, 07:00
В архиве трейнер к игрушке, когда то занимался, вот чей то сорец завалялся, в нём как раз то чт тебе нуна :)
_http://narod.ru/disk/15642683000/Trainer.template.delphi-M_A_R_T.rar.html
P.S. если я правильно тебя понял...
procedure SendKey(H: Hwnd; Key: char);
procedure SendShift(H: HWnd; Down: Boolean);
var vKey, ScanCode, wParam: Word;
lParam: longint;
begin
vKey:= $10;
ScanCode:= MapVirtualKey(vKey, 0);
wParam:= vKey or ScanCode shl 8;
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;
procedure SendCtrl(H: HWnd; Down: Boolean);
var vKey, ScanCode, wParam: Word;
lParam: longint;
begin
vKey:= $11;
ScanCode:= MapVirtualKey(vKey, 0);
wParam:= vKey or ScanCode shl 8;
lParam:= longint(ScanCode) shl 16 or 1;
if not(Down) then lParam:= lParam or $C0000000;
SendMessage(H, WM_KEYDOWN, vKey, lParam);
end;
var vKey, ScanCode, wParam: Word;
lParam, ConvKey: longint;
Shift, Ctrl: boolean;
begin
ConvKey:= OemKeyScan(ord(Key));
Shift:= (ConvKey and $00020000) <> 0;
Ctrl:= (ConvKey and $00040000) <> 0;
ScanCode:= ConvKey and $000000FF or $FF00;
vKey:= ord(Key);
wParam:= vKey;
lParam:= longint(ScanCode) shl 16 or 1;
if Shift then SendShift(H, true);
if Ctrl then SendCtrl(H, true);
SendMessage(H, WM_KEYDOWN, vKey, lParam);
SendMessage(H, WM_CHAR, vKey, lParam);
lParam:= lParam or $C0000000;
sleep(50);
SendMessage(H, WM_KEYUP, vKey, lParam);
if Shift then SendShift(H, false);
if Ctrl then SendCtrl(H, false);
end;
procedure SendString(H: HWND; s: string);
var i: integer;
begin
for i:=1 to Length(s) do SendKey(H, s[i]);
end;
procedure timer;
var PT: TPoint;
begin
while true do begin
GetCursorPos(PT);
getasynckeystate(164);
if getasynckeystate(164)<>0 then SendString(WindowFromPoint(PT),'Привет!');
sleep(1);
end;
end;
var TID: cardinal;
begin
createthread(nil,0,@timer,nil,0,TID);
end.
Отправляет в любое окно, но надо мышкой подвести указатель к тому окну =)
DeaD_MoroZ
04.12.2009, 13:49
Спасибо. Но я сделал по своему, и у меня один вопрос:как сделать что бы полностью заблокировать функцию кнопки(программа при нажатии home печатает "привет" и при повторном переходит в начало строки и опять печатает "привет")
Мож кому надо--> http://slil.ru/28295384 пароль:serega
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot