TC官方合作论坛

标题: 现在的版本不支持8字节16进制的数字 [打印本页]

作者: feskar    时间: 2016-3-29 21:55
标题: 现在的版本不支持8字节16进制的数字
本帖最后由 feskar 于 2016-3-29 21:56 编辑

       目前的版本,十六进制最多只能表示到#7FFFFFFF即十进制的2147483647,但是有时需要输入大于这个数的例如#C01E0001时,却被强制转换为#7FFFFFFF了,请问有没有什么变通的方法?
输入小数是行不通的,例如#C01E0001=3223191553,如果转化成浮点型就是3223191553.0000了,这样拿去调用API会导致程序崩溃的:
  1. dllcall("user32.dll", "long", "PostMessageA", "long", hwnd, "long", WM_KEYUP, "long", key, "double", #C01E0001)
复制代码


作者: sam7894604    时间: 2016-3-29 22:09
  1. dllcall("user32.dll", "long", "PostMessageA", "long", hwnd, "long", WM_KEYUP, "long", key, "long", -1071775743)
复制代码

作者: feskar    时间: 2016-3-29 23:00
sam7894604 发表于 2016-3-29 22:09

谢谢大神,这个问题困扰我三天了,原来可以这样解决,把C01E0001补位为FFFFFFFFC01E0001,非常感谢
作者: feskar    时间: 2016-3-30 07:07
sam7894604 发表于 2016-3-29 22:09

额,大神,昨天晚上我只是大概看了下,没试验,今天发现输入-1071775743也是无效的,只是程序没有崩溃而已,#C01E0001代表的32位二进制是A键弹起:C0表示弹起,1E是A的扫描码,0001表示动作次数,所以如果换成#FFFFFFFFC01E0001,程序还是无效的,请问这里是不是需要传址还是其他才能实现?
作者: sam7894604    时间: 2016-3-30 23:30
根据查询扫描码有分按下与弹起... 1E 是按下的扫描码,9E 是弹起的扫描码

  1. dllcall("user32.dll", "long", "PostMessageA", "long", hwnd, "long", WM_KEYUP, "long", key, "long", -1063387135) //#C09E0001
复制代码

作者: feskar    时间: 2016-3-31 10:49
本帖最后由 feskar 于 2016-3-31 11:11 编辑
sam7894604 发表于 2016-3-30 23:30
根据查询扫描码有分按下与弹起... 1E 是按下的扫描码,9E 是弹起的扫描码

...

嗯,尽管还是没有实现我的目标,但是还是谢谢大神的帮助,算了,想办法用其他方法实现吧,TC脚本里没办法了
作者: feskar    时间: 2016-3-31 22:55
sam7894604 发表于 2016-3-30 23:30
根据查询扫描码有分按下与弹起... 1E 是按下的扫描码,9E 是弹起的扫描码

...

谢谢大神,问题解决了,问题不光出在这句.....是我脚本的前一句的数据类型有问题,这句最后一个参数#C01E0001可以直接填0
  1. dllcall("user32.dll", "long", "keybd_event", "byte", fn, "byte", fnscan, "int", 0, "int", 0)
复制代码

这里功能键和其扫描码的数据类型应该是"byte",而我之前是用的"long"




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1