用delphi进行按键替换

qq969686 2009-11-22 05:12:35
RT

我想用delphi 制作个按键替换的小程序 ,用于玩魔兽真三 换键,虽然网上有很多,但我想自己弄个,

请教个详细的 制作步骤教程, 谢谢
...全文
95 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Moon2011123 2011-04-11
  • 打赏
  • 举报
回复
hook:= SetWindowsHookEx(13, @HookProc, HINSTANCE, 0);
第一个参数13是什么意思啊,能讲解一下吗?
hjkto 2009-11-23
  • 打赏
  • 举报
回复
刚才申请了一个网页小游戏,测试也无问题呀?
hjkto 2009-11-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 qq969686 的回复:]
按一下 就替换 
[/Quote]

7楼的代码,我刚才在ie中,计算器中,记事本中
都测试了可以的
你是按一下也好,一直按也好,b都会变成c
qq969686 2009-11-23
  • 打赏
  • 举报
回复
按一下 就替换
hjkto 2009-11-23
  • 打赏
  • 举报
回复
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);

你是想按住不放呢,还是按一下是一下呢?
hjkto 2009-11-23
  • 打赏
  • 举报
回复
怎么可能,我都测试过了?
qq969686 2009-11-23
  • 打赏
  • 举报
回复
bc 我按b 出现b 按c 出现c
???????
hjkto 2009-11-22
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
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
hjkto 2009-11-22
  • 打赏
  • 举报
回复
版主提到的哪个消息我不会用
我的想法是:用键盘低级钩子,钩住你要替换的哪些按键,同时模拟按下要替换的按键
只是想法,没实践
不知按键频率快时,会不会出问题?
hjkto 2009-11-22
  • 打赏
  • 举报
回复
观注一下
gyk120 2009-11-22
  • 打赏
  • 举报
回复
你可以用消息钩子,过滤相应的按键消息,换成你自己的,用WH_Debug
qq969686 2009-11-22
  • 打赏
  • 举报
回复
楼上可不给个联系方式 请教一下
qq969686 2009-11-22
  • 打赏
  • 举报
回复
请问用 怎么使用键盘钩子啊 我对这个不怎么清楚 看过点
slmax1 2009-11-22
  • 打赏
  • 举报
回复
可以用钩子过程呀,很简单的,如果只是替换按键的话

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧