要求中间不能间断。我搜索了一下,有人说其实物理键盘驱动也是通过短时间内多次发送消息来实现的,不知是否如此。
请这方面的高手给给出代码,实现按住空格的效果2秒钟。谢谢
请这方面的高手给给出代码,实现按住空格的效果2秒钟。谢谢
解决方案 »
- 考六级了,散分
- 求助:'Query2:Parameter 'bh' not found'
- Geranium(天使消失的街道) 进行来领分
- 在等待串口返回数据的过程中,同时响应其他交互操作?
- 各位高手好 提一个非常非长奇怪的问题?帮忙回答一下
- Install shield 7.0 的帮助
- 关于COM的问题,有较深理解的朋友来看看
- 请问如何获得给定值(@a , @b , ...)的最大值(存储过程中)
- 我想找一些用于按钮的bmp图片,请问大家那里有这样的图片可下栽??
- 重金200,加人民币也行,求购 XLSReadWrite V1.34 组件的注册版!因为用OLE方式处理Excel表格太慢了,老外的注册费要30美金,并非不想花钱,实在是无法支付!怎奈老外不收人民币!哪位大哥帮忙找找!如果有的话!我愿出价购买!
- 关于fastreport
- 对于一个已经比较成熟的软件怎么维护
begin
timer1.Interval:=2000;
Timer1.Enabled:=false;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
ShowMessage('按住空格键2秒');
Timer1.Enabled:=False;
end;procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_space then
begin
timer1.Enabled:=True;
end;
end;procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_space then
begin
timer1.Enabled:=False;
end;
end;
var
kbs : TKeyboardState;
begin
GetKeyboardState(kbs);
kbs[VK_SHIFT] := $80;
SetKeyboardState(kbs);
end;
procedure FreeShift();
var
kbs : TKeyboardState;
begin
GetKeyboardState(kbs);
kbs[VK_SHIFT] := $10;
SetKeyboardState(kbs);
end;
改成空格不知行不行.lz试下
这样子应该可以,你也试试procedure TForm1.Button1Click(Sender: TObject);
begin
keybd_event( 32, 0, 0, 0);
timer1.Enabled:=true;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
keybd_event( 32,0, KEYEVENTF_KEYUP, 0);
timer1.Enabled:=false;
showmessage('2秒');
end;
procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('down');
end;procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('up')
end;
Memo1里持续按住键后,看下这段代码的结果
其实物理键盘驱动也是每隔一定时间扫描键盘状态的
sleep(2000)
wm_keyup
按住键不放,memo里不断地显示down,就说明实际上是收到了多次keydown的event。
16楼的button1click代码先加上Memo1.SetFoucs;再执行,你也能看到down和up,但仅一次。
所以,你把16楼的代码改一下了,timer1的interval设成50(即50ms一次),加个全局变量用于计数,发一次down的event,计数加1,加到40次(2秒后)再发个up,然后停了timer1即可啊。
如果是注入dll event 事件触发当前焦点在你的dll 窗体,游戏是没反应的,可以用宿主exe,发送postmessage, 不是很理想;
不注入dll,那么就只是直接发送postmessage,或者sendmessage. 最好的方法就是注入dll, 然后调用游戏的按键call, 没反应要看看实际手操作的时候还有什么附加条件没有,比如鼠标点选后按空格, 有些游戏为了防止软件模拟,是有技能状态的检测的,即没有鼠标移动, 按键都是无效的。
按下空格键后就启动线程,不停的发送空格键消息,2秒结束线程,游戏都是用多线程的,也不会假死