找回密码
 加入
搜索
查看: 1664|回复: 5

能否實現按鍵時輸出時間?

[复制链接]
发表于 2009-6-15 14:41:18 | 显示全部楼层 |阅读模式
本帖最后由 wongfung 于 2009-6-17 11:13 编辑

我想利用$begin=TimerInit()開始計時

然後當我按A-Z及0-9(包括空格)中的任何一鍵, 就會把按的鍵及時間輸出至TXT/INI檔中, 每行一個, 時間用秒來做單位

例如:
A 5                <-即在計時後第5秒按了A鍵
T 12
Y 90
...
(不用A,B,C的話用鍵的編號也行)
不知道用IF按了A鍵, THEN, ELSE IF按了T鍵來寫行不行...

$dif = TimerDiff($begin)
$dif = Int($dif/1000)
曾想過這樣寫來記錄時間, 不知道行不行

請問各位大大有沒有一些想法呢?
關於按鍵觸發的代碼跟寫入檔案的代碼我還是很亂...
发表于 2009-6-15 23:13:52 | 显示全部楼层
只提供思路,自己写完它

检测鼠标点击或键盘事件
_IsPressed    【Check if key has been pressed】
--------------------------------------------------------------------------------
#Include <Misc.au3>
_IsPressed($sHexKey[, $vDLL = 'user32.dll'])
--------------------------------------------------------------------------------
例子:当end键按下就提示
#include <Misc.au3>
$dll = DllOpen("user32.dll")
While 1
        Sleep ( 250 )
        If _IsPressed("23", $dll) Then
                MsgBox(0,"_IsPressed", "End Key Pressed")
                ExitLoop
        EndIf
WEnd
DllClose($dll)
-------------------------------------------------------------------------------
其他鼠标键盘参数:
01 Left mouse button
02 Right mouse button
04 Middle mouse button (three-button mouse)
05 Windows 2000/XP: X1 mouse button
06 Windows 2000/XP: X2 mouse button
08 BACKSPACE key
09 TAB key
0C CLEAR key
0D ENTER key
10 SHIFT key
11 CTRL key
12 ALT key
13 PAUSE key
14 CAPS LOCK key
1B ESC key
20 SPACEBAR
21 PAGE UP key
22 PAGE DOWN key
23 END key
24 HOME key
25 LEFT ARROW key
26 UP ARROW key
27 RIGHT ARROW key
28 DOWN ARROW key
29 SELECT key
2A PRINT key
2B EXECUTE key
2C PRINT SCREEN key
2D INS key
2E DEL key
30 0 key
31 1 key
32 2 key
33 3 key
34 4 key
35 5 key
36 6 key
37 7 key
38 8 key
39 9 key
41 A key
42 B key
43 C key
44 D key
45 E key
46 F key
47 G key
48 H key
49 I key
4A J key
4B K key
4C L key
4D M key
4E N key
4F O key
50 P key
51 Q key
52 R key
53 S key
54 T key
55 U key
56 V key
57 W key
58 X key
59 Y key
5A Z key
5B Left Windows key
5C Right Windows key
60 Numeric keypad 0 key
61 Numeric keypad 1 key
62 Numeric keypad 2 key
63 Numeric keypad 3 key
64 Numeric keypad 4 key
65 Numeric keypad 5 key
66 Numeric keypad 6 key
67 Numeric keypad 7 key
68 Numeric keypad 8 key
69 Numeric keypad 9 key
6A Multiply key
6B Add key
6C Separator key
6D Subtract key
6E Decimal key
6F Divide key
70 F1 key
71 F2 key
72 F3 key
73 F4 key
74 F5 key
75 F6 key
76 F7 key
77 F8 key
78 F9 key
79 F10 key
7A F11 key
7B F12 key
7C-7F F13 key - F16 key
80H-87H F17 key - F24 key
90 NUM LOCK key
91 SCROLL LOCK key
A0 Left SHIFT key
A1 Right SHIFT key
A2 Left CONTROL key
A3 Right CONTROL key
A4 Left MENU key
A5 Right MENU key
BA ;
BB =
BC ,
BD -
BE .
BF /
C0 `
DB [
DC \
DD ]
至于按键的时间,读取宏@hour等即可
将例子的msgbox换成filewrite记录下来就行了
 楼主| 发表于 2009-6-16 01:05:29 | 显示全部楼层
2# lynfr8
剛找了FileWriteLine, 發現非常敏感, 只按了一下就寫了N行

之後問過朋友後, 他給了這建議:
...
$last_a = 0
While 1
        $a = _IsPressed("41", $dll)
        If $a And Not $last_a Then
                FileWriteLine($file, "a")
        EndIf
        $last_a = $a
...
結果真的能按一次寫一行
不過我不是很明白原理是怎樣, 是不是利用了代碼是由上至下讀取的優先概念呢???
发表于 2009-6-16 02:46:01 | 显示全部楼层
$last_a = 0;定义变量$last_a为0
While 1;进入循环
        $a = _IsPressed("41", $dll);当按下a键,返回成功值1并赋值$a
        If $a And Not $last_a Then;当$a不等于$last_a 条件成立时
                FileWriteLine($file, "a");开始记录
        EndIf
        $last_a = $a;重新赋值$last_a为1
这样到下一次循环当按下a键,返回成功值1并赋值$a=1,但却等于$last_a=1,条件不成立就不记录
其实这段只能记录一个a,你测试过了吗?
‘結果真的能按一次寫一行’----------是的,但也就是记录一次就完了

_IsPressed这个循环太难处理记录过于敏感这个问题
借鉴一下这个吧,hook原理,记录非常准确
http://www.autoitx.com/viewthr ... tra=page%3D1&page=1
发表于 2009-6-16 08:57:46 | 显示全部楼层
很好,学学
 楼主| 发表于 2009-6-17 11:13:32 | 显示全部楼层
我試過是行的.
另外那方法我都會試一下, 感謝了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-14 02:53 , Processed in 0.075797 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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