搜索
查看: 590|回复: 4

求助: 模拟按住某键和取消按住

[复制链接]

7

主题

28

帖子

191

积分

一级会员

Rank: 2

积分
191
发表于 2018-7-13 10:49:50 | 显示全部楼层 |阅读模式
玩游戏的时候 经常要按住w键 手累
遂打算做一个一直按住w键的程序
思路:热键激活 - 按住w键 - 热键取消 - 取消按住w键
翻了一下范例 找到了系统级热键 但翻key库的时候 没有发现有 “按住” 这种函数
是不是写个循环配合win.delay就能模拟按住效果
测试程序如下
  1. import win.ui;
  2. import key;
  3. /*DSG{{*/
  4. mainForm = win.form(text="aardio form";right=239;bottom=151)
  5. mainForm.add()
  6. /*}}*/

  7. var hkid;
  8. mainForm.unreghotkey(hkid);
  9. hkid = mainForm.reghotkey( function(id,mod,vk){
  10.     //winex.attach()等
  11.         //key.down('w')
  12.         //按住w键 直到被取消
  13. },0x2/*_MOD_CONTROL*/,'W'#);

  14. var hkidc;
  15. hkidc = mainForm.reghotkey( function(id,mod,vk){
  16.         //取消按住w键
  17. },0x2/*_MOD_CONTROL*/,'S'#)

  18. mainForm.enableDpiScaling();
  19. mainForm.show();

  20. return win.loopMessage();
复制代码


请指教按住某键和取消按住的方法 谢谢各位
回复

使用道具 举报

3

主题

50

帖子

405

积分

培训班

积分
405
发表于 2018-7-13 12:13:55 | 显示全部楼层
本帖最后由 nlysh007 于 2018-7-13 12:15 编辑

一次完整的按键不就是按下,松手
按住不就是key.down 么,松手,key.up...
回复

使用道具 举报

9

主题

17

帖子

103

积分

一级会员

Rank: 2

积分
103
发表于 2018-7-13 13:05:09 | 显示全部楼层
import win; //必须首先导入win窗口支持库
import win.ui;
import key;
import mouse;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
button={cls="button";text="开始";left=49;top=370;right=173;bottom=418;z=5};
button2={cls="button";text="继续";left=229;top=369;right=364;bottom=415;z=6};
button3={cls="button";text="暂停";left=424;top=368;right=580;bottom=416;z=10};
edit={cls="edit";text="w";left=47;top=67;right=132;bottom=103;edge=1;z=1};
edit2={cls="edit";text="10";left=181;top=69;right=267;bottom=106;edge=1;multiline=1;z=2};
edit3={cls="edit";text="100";left=331;top=68;right=434;bottom=103;edge=1;z=8};
edit4={cls="edit";text="edit4";left=46;top=118;right=655;bottom=331;autohscroll=false;edge=1;multiline=1;vscroll=1;z=7};
static={cls="static";text="按键";left=56;top=33;right=110;bottom=52;transparent=1;z=3};
static2={cls="static";text="次数";left=197;top=34;right=247;bottom=57;transparent=1;z=4};
static3={cls="static";text="延时";left=340;top=33;right=410;bottom=55;transparent=1;z=9};
static4={cls="static";text="退出程序F3";left=62;top=345;right=166;bottom=366;transparent=1;z=11};
static5={cls="static";text="快捷键F10";left=247;top=344;right=367;bottom=363;transparent=1;z=12};
static6={cls="static";text="快捷键F11";left=440;top=342;right=566;bottom=362;transparent=1;z=13}
)
/*}}*/

var 按键=winform.edit.text  //选择按键
var 次数= winform.edit2.text //次数
var 延时=winform.edit3.text //延时


var 程序 = "暂停"
hkid = winform.reghotkey(function(id,mod,vk){
    程序 = "暂停"
}
,0,0x7A/*_VK_F11*/);

hkid = winform.reghotkey(function(id,mod,vk){
    程序 = "继续"
}
,0,0x79/*_VK_F10*/);

hkid = winform.reghotkey(function(id,mod,vk){
    程序 = "次数"
}
,0,0x72/*_VK_F3*/);


winform.button2.oncommand = function(id,event){
程序 = "继续"        
}

winform.button3.oncommand = function(id,event){
程序 = "暂停"        
}




function 模拟按键(){
   
    key.press(按键);
    win.delay(延时);
    winform.edit4.text=key.press(按键);
   

    return;
}




winform.button.oncommand = function(id,event){
io.open()
io.print("F11暂停,F10继续,F3退出")
io.print("请按相应的功能键继续...")
while( 程序 != "次数" ) {
  
   //程序继续
  while( 程序 == "继续" ) {  
     
  模拟按键();
  win.delay(200);

  }

  //程序暂停
  while( 程序 == "暂停" ) {  
    win.delay(1) //我暂停
  }
  
  
}
io.print("退出程序")


}

winform.show()
win.loopMessage();
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2018-7-13 13:43:43 | 显示全部楼层
有时间写这么长,看一下范例没时间?!
import win.ui;
/*DSG{{*/
var winform = win.form(text="定时按键";right=412;bottom=198)
winform.add(
edit={cls=
"edit";text="按 CTRL + W 开始,按CTRL + M 结束";left=24;top=11;right=383;bottom=180;edge=1;multiline=1;z=1}
)
/*}}*/

import key;
import win.timer
var timer = win.timer( winform );
timer.setInterval(10);

//定时按键
timer.onTimer = function() key.down("W");

//开始按W
winform.reghotkey( function() timer.enable()
    ,0x2
/*_MOD_CONTROL*/,'W'#);

//取消按W
winform.reghotkey( function() timer.disable()
    ,0x2
/*_MOD_CONTROL*/,'M'#);

winform.show()
win.loopMessage();

都是范例里就有的代码。

回复

使用道具 举报

7

主题

28

帖子

191

积分

一级会员

Rank: 2

积分
191
 楼主| 发表于 2018-7-13 16:16:49 | 显示全部楼层
结贴
2楼说得对  感谢3楼循环的实现和坛主用定时器的实现
没想到用定时器去实现。
有看范例的。只是因为思维僵硬没想到。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-19 14:28 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表