用delphi进行按键替换 RT我想用delphi 制作个按键替换的小程序 ,用于玩魔兽真三 换键,虽然网上有很多,但我想自己弄个,请教个详细的 制作步骤教程, 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用消息钩子,过滤相应的按键消息,换成你自己的,用WH_Debug unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; KBDLLHOOKSTRUCT = record vkCode: DWORD; ScanCode: DWORD; Flags: DWORD; Time: DWORD; dwExtraInfo: DWORD; end;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; Hook: HHOOK;implementation{$R *.dfm} function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; var p: PKBDLLHOOKSTRUCT; y: Integer;begin y:= 0;if nCode = HC_ACTION thenbegin case WParam of WM_KEYDOWN, WM_SYSKEYDOWN: begin p:= PKBDLLHOOKSTRUCT(Lparam); if p^.vkCode=66 then begin y:=1; keybd_event(Ord('C'), 0, 0, 0); keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0); end; end; WM_KEYUP, WM_SYSKEYUP: begin y:=1; end; end; end;if y = 1 then Result:= 1 else Result:= CallNextHookEx(hook,nCode,WParam,LParam); end;function SetHook: Boolean; stdcall;begin if hook <> 0 then begin Result:= False; Exit; end; hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0); Result:= hook <> 0;end;function DelHook: Boolean; stdcall;begin if hook <> 0 then begin UnhookWindowshookEx(hook); hook:= 0; end; Result:= hook = 0;end;procedure TForm1.Button1Click(Sender: TObject);begin SetHook;end;procedure TForm1.Button2Click(Sender: TObject);begin DelHook;end;end.上面的代码,当你按下键盘的b时,变成c了打开一个记事本,测试一下我测试没问题,无论按多快,都能变成c bc 我按b 出现b 按c 出现c??????? p:= PKBDLLHOOKSTRUCT(Lparam); if p^.vkCode=66 then begin y:=1; keybd_event(Ord('C'), 0, 0, 0); end; end; WM_KEYUP, WM_SYSKEYUP: begin y:=1;keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);你是想按住不放呢,还是按一下是一下呢? hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);第一个参数13是什么意思啊,能讲解一下吗? 求助DataSnap客户端insert数据时候错误,说数据类型未知 问一个Delphi+Crystal report 9 VCL 公式赋值报错问题。分不多,可以用我自己做的日历控件交换此问题的正确答案 文本内容中发现无效字符。 非DELPHI专业的我,诚恳的问一下数据库基础的问题! 用BDE中的TTable联接Paradox数据库时需输入用户名和密码的问题? 一个关于全局变量的问题? 高分请教,不够再加 关于SQL SERVER主键的问题 很头痛的问题:delphi中如何处理二进制数 激情放送 DELPHI 编译出来的EXE老被360提示说是木马。 dbgride多条数据插入问题
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
dwExtraInfo: DWORD;
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
Hook: HHOOK;
implementation{$R *.dfm}
function HookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
p: PKBDLLHOOKSTRUCT;
y: Integer;
begin
y:= 0;
if nCode = HC_ACTION then
begin
case WParam of
WM_KEYDOWN, WM_SYSKEYDOWN:
begin
p:= PKBDLLHOOKSTRUCT(Lparam);
if p^.vkCode=66 then
begin
y:=1;
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
end;
end;
WM_KEYUP, WM_SYSKEYUP:
begin
y:=1;
end;
end;
end;
if y = 1 then Result:= 1 else Result:= CallNextHookEx(hook,nCode,WParam,LParam); end;function SetHook: Boolean; stdcall;begin
if hook <> 0 then
begin
Result:= False;
Exit;
end;
hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
Result:= hook <> 0;
end;function DelHook: Boolean; stdcall;
begin
if hook <> 0 then
begin
UnhookWindowshookEx(hook);
hook:= 0;
end;
Result:= hook = 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetHook;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
DelHook;
end;end.
上面的代码,当你按下键盘的b时,变成c了
打开一个记事本,测试一下
我测试没问题,无论按多快,都能变成c
???????
if p^.vkCode=66 then
begin
y:=1;
keybd_event(Ord('C'), 0, 0, 0);
end;
end;
WM_KEYUP, WM_SYSKEYUP:
begin
y:=1;
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);你是想按住不放呢,还是按一下是一下呢?
第一个参数13是什么意思啊,能讲解一下吗?