delphi 模拟左方向键 要求是系统按键,功能是 按一下左方向键,产生效果是按了两下方向键。程序用在游戏中,求代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我注册了一个系统热键VK_LEFT,但是发现他把吃掉了。在 procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;procedure TForm1.HotKeyDown(var Msg: Tmessage);begin if (msg.LParamHi = VK_LEFT) then begin beep();// Sleep(1000) ; beep();//这里两个beep都能运行,我的思路是把这两个beep换成两个左方向键,试了很多方法 //不起作用, keybd_event ,sendmessage都试过了,不行,有没有人帮我解决一下,谢谢。 end;end; 只要一捕捉到VK_LEFT消息,马上就运行这个过程了,肯定实现不了!能不能考虑用其他键代替? 实现了代码,但是到游戏中就失效了,可能游戏做了限制,有没有好的方式,用全局钩子不知道行不行?unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; public { Public declarations } end;var Form1: TForm1; HotKeyId: Integer; HotKeyId1: Integer;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);beginHotKeyId := GlobalAddAtom('MyHotKey') - $C000;//RegisterHotKey(Handle,hotkeyid,0,VK_LEFT); RegisterHotKey(HANDLE,hotkeyid,0,$41);HotKeyId1 := GlobalAddAtom('MyHotKey1') - $C001;//RegisterHotKey(Handle,hotkeyid,0,VK_LEFT); RegisterHotKey(HANDLE,hotkeyid,0,$44);end;procedure TForm1.HotKeyDown(var Msg: Tmessage);begin if (msg.LParamHi = $41) then begin keybd_event(VK_LEFT,0,0,0); sleep(10); keybd_event(VK_LEFT,0,0,0); end; if (msg.LParamHi = $44) then begin keybd_event(VK_RIGHT,0,0,0); sleep(10); keybd_event(VK_RIGHT,0,0,0); end;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginUnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。UnRegisterHotKey(handle, HotKeyId1); //注销HotKey, 释放资源。end;end. 游戏中可能已经有一些HOOK的防范措施了,比如HOOK你的键盘,全局钩子希望不大,直接winIO不知可行不可行 一个项目中碰到的问题,麻烦点进看 连不上 RMReport 动态建立时 如何设置纸张大小 ?? 请教一个问题,在线等! 这个问题适合用Delphi实现吗? 关于FORM创建的问题。(达人请进啊!!!!) 关于postmessage能否传送数据的问题. 请问如何利用ADOQuery来判断一张表是否存在呢????????? 怀疑ADO已坏,如何重装,去哪里下载ADO软件??????????????? 菜鸟的问题!! access如何查询多个字段的最大值 无锡征友
在 procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
if (msg.LParamHi = VK_LEFT) then
begin
beep();//
Sleep(1000) ;
beep();//这里两个beep都能运行,我的思路是把这两个beep换成两个左方向键,试了很多方法
//不起作用, keybd_event ,sendmessage都试过了,不行,有没有人帮我解决一下,谢谢。
end;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY; public
{ Public declarations }
end;var
Form1: TForm1;
HotKeyId: Integer;
HotKeyId1: Integer;
implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
HotKeyId := GlobalAddAtom('MyHotKey') - $C000;
//RegisterHotKey(Handle,hotkeyid,0,VK_LEFT);
RegisterHotKey(HANDLE,hotkeyid,0,$41);HotKeyId1 := GlobalAddAtom('MyHotKey1') - $C001;
//RegisterHotKey(Handle,hotkeyid,0,VK_LEFT);
RegisterHotKey(HANDLE,hotkeyid,0,$44);
end;procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
if (msg.LParamHi = $41) then
begin
keybd_event(VK_LEFT,0,0,0);
sleep(10);
keybd_event(VK_LEFT,0,0,0);
end; if (msg.LParamHi = $44) then
begin
keybd_event(VK_RIGHT,0,0,0);
sleep(10);
keybd_event(VK_RIGHT,0,0,0);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。
UnRegisterHotKey(handle, HotKeyId1); //注销HotKey, 释放资源。
end;
end.