TC官方合作论坛

 找回密码
 立即注册
查看: 2247|回复: 3

[已解决] 求助,TC7.0怎么判断某个按键是一直按下的

[复制链接]
发表于 2019-4-18 18:02:25 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我有个线程需要判断某个按键是否是按下状态的,
换种说法就是
比如F1按下不放就循环执行一个线程,松开了就不执行线程了
求路过的好心人帮出出主意,感谢
回复

使用道具 举报

发表于 2019-4-18 18:06:45 | 显示全部楼层
本帖最后由 剑仙十号 于 2019-4-26 09:03 编辑

var hThread0, run0
var hThread1, run1
功能 执行0()
var 按键码 = 112
while(run0) //主循环.
var ret=GetAsyncKeyState(按键码)
if(ret != 0) //主if开始.
  traceprint("F1已经按下。")
  //在这里加入,F1按下的代码.
var bool = 线程获取状态(hThread1)
if(bool == 0)
run1 = 1
hThread1 = 线程开启("执行1", "")
end

  while(ret != 0)
  traceprint("要循环的代码。")
  sleep(50)
  ret=GetAsyncKeyState(按键码)
  end
  traceprint("F1已放开。")
  //在这里加入,F1放开的代码.
  run1 = 0
  线程关闭(hThread1)

end //主if结束.
sleep(100)
end //主循环结束.
结束

功能 执行1()
while(run1)
traceprint("线程1的代码。")
sleep(100)
end
结束

功能 启动_热键()
var bool = 线程获取状态(hThread0)
if(bool == 0)
run0 = 1
hThread0 = 线程开启("执行0", "")
end
结束
功能 终止_热键()
  run0 = 0
  线程关闭(hThread0)
结束
//struct,api封装部分。
功能 GetAsyncKeyState(按键码0)
return dllcall("user32.dll","long", "GetAsyncKeyState","long",按键码0)
结束
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-20 01:15:51 | 显示全部楼层
剑仙十号 发表于 2019-4-18 18:06
鼠键类。监*听 鼠标右键?
  
鼠标右键按住,执行一段代码。

十分感谢您的解答,谢谢了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-21 13:17:34 | 显示全部楼层
zxczxc1968531 发表于 2019-4-18 19:07
两种方法,一种是控制线程的开启和关闭来实现,一种是直接控制线程内循环体的开关来实现,这两种方法都是可 ...

感谢您的解答。
只要通过循环   动态库调用("user32.dll", "int", "GetKeyState", "int", 112)  获得返回值来判断就行了
有点不明白的是这个返回值在不按下的时候会有0和1两个值,好像还是随机的,
按下以后会返回一个65409左右的值
再次感谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-20 16:11 , Processed in 0.036113 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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