Board logo

标题: [其他] CMD控制台最小的鼠标与键盘兼定时三方【持续回贴更新】 [打印本页]

作者: netbenton    时间: 2021-11-22 23:52     标题: CMD控制台最小的鼠标与键盘兼定时三方【持续回贴更新】

mk.exe,只有1,248字节
同时等待接受键盘和鼠标的输入,
win10和win XP 测试过可以使用。
支持全键盘按键,包括,控制键和状态键
支持鼠标左、右、中按键
支持定时、延时,程序节奏控制
增强版:3.5KB,最新请看11楼

使用方法,请从测试例子中找。


批处理使用测试例子
  1. @echo off&setlocal enabledelayedexpansion
  2. if not exist mk.exe (
  3. (
  4. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  5. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  6. if defined a echo;%%a
  7. )
  8. )>mk.exe
  9. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  10. )
  11. :loop
  12. for /f "tokens=1-5" %%1 in ('mk.exe') do (
  13. rem echo;%%1 %%2 %%3 %%4 %%5
  14. IF "%%1" equ "2" (
  15. set str=鼠标
  16. if "%%5" equ "1" (set str=移动!str!)
  17. if "%%5" equ "0" (
  18. if "%%4" equ "0" (set str=松开!str!)
  19. if "%%4" equ "1" (set str=按下!str!左键)
  20. if "%%4" equ "2" (set str=按下!str!右键)
  21. if "%%4" equ "4" (set str=按下!str!中键)
  22. )
  23. if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
  24. set str=!str!,坐标:%%3行,%%2列
  25. ) else (
  26. set str=键盘
  27. if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
  28. if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5)
  29. )
  30. )
  31. echo;!str!
  32. goto :loop
  33. pause
  34. goto :eof
  35. -----BEGIN CERTIFICATE-----
  36. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  37. AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  38. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
  39. lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  40. UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
  41. wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
  42. AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
  43. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  44. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
  45. AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
  46. LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
  47. 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
  48. ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
  49. UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
  50. UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
  51. TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
  52. hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
  53. //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
  54. RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
  55. /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
  56. TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
  57. AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
  58. AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
  59. aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
  60. YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
  61. ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
  62. -----END CERTIFICATE-----
复制代码
测试结果如下:
  1. 鼠标,坐标:16行,54列
  2. 鼠标,坐标:16行,54列
  3. 鼠标,坐标:16行,54列
  4. 移动鼠标,坐标:16行,54列
  5. 移动鼠标,坐标:16行,55列
  6. 移动鼠标,坐标:16行,55列
  7. 鼠标,坐标:16行,55列
  8. 移动鼠标,坐标:16行,55列
  9. 移动鼠标,坐标:16行,55列
  10. 鼠标,坐标:16行,55列
  11. 按下键盘扫描码是:17,状态码是:8
  12. 松开键盘扫描码是:17,状态码是:0
  13. 移动鼠标,坐标:16行,55列
  14. 按下键盘ASCII码是:97,状态码是:0
  15. 松开键盘扫描码是:16,状态码是:0
  16. 按下键盘ASCII码是:102,状态码是:0
  17. 松开键盘ASCII码是:102,状态码是:0
  18. 按下键盘ASCII码是:100,状态码是:0
  19. 松开键盘ASCII码是:100,状态码是:0
  20. 按下鼠标左键,坐标:16行,55列
  21. 松开鼠标,坐标:16行,55列
  22. 鼠标,坐标:16行,55列
  23. 松开鼠标,坐标:16行,55列
  24. 移动鼠标,坐标:16行,55列
复制代码
MASM32,源码
  1. comment * ?
  2. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  3. ; Sample code for < Win32ASM Programming 2nd Edition>
  4. ; by netBenton,37659560
  5. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  6. ; 编译链接:
  7. ;ml /c /coff mk.asm
  8. ;Link /SUBSYSTEM:CONSOLE /ALIGN:16 mk.obj
  9. ; 功能:
  10. ; mk.asm ---> CMD控制台最小的鼠标与键盘三方。
  11. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  12.                
  13.    ?*
  14.     .586                       ; create 32 bit code
  15.     .model flat, stdcall       ; 32 bit memory model
  16.     option casemap :none       ; case sensitive
  17. ;包含windows 关键字以及数据结构
  18.     include \masm32\include\windows.inc
  19. ;包含API库
  20.     include \masm32\include\kernel32.inc
  21.     include \masm32\include\user32.inc
  22.     include \masm32\include\masm32.inc
  23. ; 包含宏库
  24.     include \masm32\macros\macro$.asm ;注意并非使用源版,是函数增加版。所有子过程作为函数使用在过程名后加 “$”
  25. ;    include \masm32\macros\macros.asm
  26.     includelib \masm32\lib\kernel32.lib
  27.     includelib \masm32\lib\user32.lib
  28.     includelib \masm32\lib\masm32.lib
  29. szText MACRO Name, Text:VARARG
  30.     LOCAL lbl
  31. Name db Text,0dh,0ah,0
  32. ENDM
  33. STATE STRUCT
  34. dw ?
  35. dw ?
  36. STATE ENDS
  37. USBUFF STRUCT
  38. dw 64 dup (?)
  39. USBUFF ENDS
  40.     .code
  41. ;程序入口
  42. start:
  43. call main
  44. invoke ExitProcess,eax
  45.   
  46. ;这里定义数据,
  47. szText szTx,"%d %d %d %d %d"
  48. ;这里写代码
  49. main proc
  50. local @rvstring:USBUFF ;输入缓存
  51. local @inRec:INPUT_RECORD ;输入缓存结构定义
  52. local @state:STATE ;用来接收api调用返回值
  53. local @oldmode:DWORD ;原控制台模式,以备退出时恢复
  54. local @hStdIn:DWORD
  55. local @hStdOut:DWORD
  56. local @varar1:DWORD ;数据一
  57. local @varar2:DWORD ;...
  58. local @varar3:DWORD ;...
  59. local @varar4:DWORD ;...
  60. local @varar5:DWORD ;数据五
  61. pusha
  62. mov @hStdIn,fn$(GetStdHandle,STD_INPUT_HANDLE) ;获取输入句柄
  63. mov @hStdOut,fn$(GetStdHandle,STD_OUTPUT_HANDLE) ;获取输出句柄
  64. fn GetConsoleMode,@hStdIn,addr @oldmode ;获取输入模式
  65. mov eax,not (ENABLE_QUICK_EDIT_MODE or ENABLE_INSERT_MODE) ;清除快速编辑、插入模式
  66. and eax,@oldmode
  67. or eax,ENABLE_MOUSE_INPUT ;增加鼠标支持模式
  68. fn SetConsoleMode,@hStdIn,eax ;起用鼠标支持
  69. @@:
  70. fn ReadConsoleInputA,@hStdIn,addr @inRec,1,addr @state ;读取输入缓存
  71. xor eax,eax
  72. mov ax,@inRec.EventType ;处理字宽数据,清零高位。
  73. m2m @varar1,eax
  74. .if (eax == KEY_EVENT ) ;键盘事件
  75. mov ax,@inRec.KeyEvent.UnicodeChar ;转换后的 ASCII 字符
  76. m2m @varar2,eax
  77. mov ax,@inRec.KeyEvent.wVirtualKeyCode ;给定键的 虚拟键代码
  78. m2m @varar3,eax
  79. m2m @varar4,@inRec.KeyEvent.bKeyDown ;如果按下该键,则此成员为 TRUE。 否则,此成员为 FALSE
  80. m2m @varar5,@inRec.KeyEvent.dwControlKeyState ;控制键的状态。
  81. jmp @F
  82. .elseif (eax == MOUSE_EVENT ) ;鼠标事件
  83. mov ax,@inRec.MouseEvent.dwMousePosition.x ;列
  84. m2m @varar2,eax
  85. mov ax,@inRec.MouseEvent.dwMousePosition.y ;行
  86. m2m @varar3,eax
  87. m2m @varar4,@inRec.MouseEvent.dwButtonState ;按键
  88. m2m @varar5,@inRec.MouseEvent.dwEventFlags ;键状态,双击等
  89. jmp @F
  90. .endif
  91. fn Sleep,2 ;延迟等待事件处理完成
  92. jmp @B
  93. @@:
  94. fn SetConsoleMode,@hStdIn,@oldmode ;恢复原来输入模式
  95. invoke wsprintfA,addr @rvstring,offset szTx,@varar1,@varar2,@varar3,@varar4,@varar5 ;转换输出格式
  96. m2m ebx,eax ;用EAX传送参数回出错
  97. fn WriteFile,@hStdOut,addr @rvstring,ebx,addr @state,NULL ;输出结果,写标准句柄,输出到屏幕
  98. popa
  99. ret
  100. main endp
  101. end start
复制代码

作者: peterboy666    时间: 2021-11-23 19:35

本帖最后由 peterboy666 于 2021-11-23 20:00 编辑

1.
此批处理在 Windows XP X86 中有问题,
因为 Windows XP 没有 certutil.exe

2.
此批处理在 Windows 7 X64 中有问题,
当运行 mk.exe 时报错

---------------------------
mk.exe - 应用程序错误
---------------------------
应用程序无法正确启动 (0xc0000018)。请按一下 [确定] 关闭应用程序。
---------------------------
确定   
---------------------------

3.
将此批处理在 Windows 7 X64 中运行时建立的 mk.exe 复制到 Windows XP X86,
可正常运行.

4.
netbenton> include \masm32\macros\macro$.asm
netbenton> ;注意并非使用源版,是函数增加版。所有子过程作为函数使用在过程名后加 “$”

可有下载点 ?
我用原版 MASM32V10R 无法编译.

5.
F1 扫瞄码应该是 59(0x3B),
为何显示是 112 ?

6.
建议加个 Hex 显示,
例如 59(0x3B)
作者: netbenton    时间: 2021-11-23 21:30

win7 我没有测试,win10 64位,以及winXP 32位测试没有问题。


macro$.asm,只是把全部有返回值的宏都加了“$”,以区分是作为函数使用,还是作为子程序使用。
百度贴吧下载:
链接:[url]https://pan.baidu.com/s/1FKD6eqOxyUWzKC9VXP4knQ
提取码:Bat8[/url]
作者: netbenton    时间: 2021-11-25 17:15

回复 2# peterboy666

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 Certutil 反编码时会提示病毒,没有生成正确的mk.exe。

win XP 32位, win7 32位,win10 64位,三个系统都可以通过。

Certutil 反编码时会提示病毒,这个和mk.exe无关系,mk.exe是很纯正的
作者: cmd1152    时间: 2021-11-25 21:58

本帖最后由 cmd1152 于 2021-12-1 18:19 编辑

改进一下示范代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. if not exist mk.exe (
  3. (
  4. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  5. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  6. if defined a echo;%%a
  7. )
  8. )>mk.exe
  9. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  10. )
  11. :loop
  12. set tmp=!time:~6,-3!
  13. for /f "tokens=1-5" %%1 in ('mk.exe') do (
  14.         set ex=%%1 %%2 %%3 %%4 %%5
  15.         set /a sleep=!time:~6,-3!-!tmp! 2>nul
  16.         if not "!sleep:~0,1!" == "-" (set Sleeps=程序等待了!sleep!秒) else (set Sleeps=程序等待未知)
  17. IF "%%1" equ "2" (
  18. set str=鼠标
  19. if "%%5" equ "1" (set str=移动!str!)
  20. if "%%5" equ "0" (
  21. if "%%4" equ "0" (set str=松开!str!)
  22. if "%%4" equ "1" (set str=按下!str!左键)
  23. if "%%4" equ "2" (set str=按下!str!右键)
  24. if "%%4" equ "4" (set str=按下!str!中键)
  25. )
  26. if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
  27. set str=!str!,坐标:%%3行,%%2列
  28. ) else (
  29. set str=键盘
  30. if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
  31. if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5)
  32. )
  33. )
  34. set str=!str!,!sleeps!,mk返回!ex!,批处理返回!sleep!
  35. echo;!str!
  36. goto :loop
  37. pause
  38. goto :eof
  39. -----BEGIN CERTIFICATE-----
  40. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  41. AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  42. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
  43. lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  44. UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
  45. wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
  46. AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
  47. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  48. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
  49. AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
  50. LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
  51. 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
  52. ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
  53. UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
  54. UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
  55. TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
  56. hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
  57. //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
  58. RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
  59. /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
  60. TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
  61. AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
  62. AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
  63. aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
  64. YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
  65. ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
  66. -----END CERTIFICATE-----
复制代码

作者: peterboy666    时间: 2021-11-25 23:31

回复  peterboy666  

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 ...
netbenton 发表于 2021-11-25 17:15


把手边的 OS 测了一遍

Windows XP X86: OK

Windiws 7 X86 : OK
Windiws 7 X64 : NG

Windiws 8.1 X86 : OK
Windiws 8.1 X64 : NG

Windiws 10 X86 : OK
Windiws 10 X64 : OK

Windiws 11 X64 : OK
作者: peterboy666    时间: 2021-11-25 23:47

回复  peterboy666  

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 ...
netbenton 发表于 2021-11-25 17:15


< ml /c /coff mk.asm
< Link /SUBSYSTEM:CONSOLE /ALIGN:16 mk.obj

我编译了你的 ASM 也是无法运行,
取消 /ALIGN:16 就可以运行.
作者: netbenton    时间: 2021-11-26 16:49

回复 7# peterboy666
使用参数 /ALIGN:16,主要是为了去掉为0无效字节,达到最少字节。
使用参数 /MERGE(合并节),编译文件为1536字节。能运行,但是杀软会报毒。
不使用参数为2048字节。应该包括win10以下的32位64位系统都可以正常。
作者: peterboy666    时间: 2021-11-26 19:03

本帖最后由 peterboy666 于 2021-11-26 19:17 编辑

回复 8# netbenton


这个我知道.

为了兼容性,
我自编译了.

Windows 7/8.1 X64 无法运行,
我猜 Windows 8 X64 也是无法运行(手边没有,无法测试).
作者: cmd1152    时间: 2021-11-27 12:33

本帖最后由 cmd1152 于 2021-11-27 12:36 编辑

mk改进版(红色参数是我增加的,其他的参数是mk返回的)
注:使用时间如果返回-1,代表系统时间经过了1分钟,批处理时间溢出
返回参数: [mk参数1] [mk参数2] [mk参数3] [mk参数4] [mk参数5] [使用时间]
  1. @echo off&setlocal enabledelayedexpansion
  2. if not exist mk.exe (
  3. (
  4. set /p=创建mk.exe...>nul
  5. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  6. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  7. if defined a echo;%%a
  8. set /p=^[完成^]>nul
  9. echo;
  10. )
  11. )>mk.exe
  12. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  13. )
  14. set tmp=!time:~6,-3!
  15. for /f "tokens=1-5" %%1 in ('mk.exe') do (
  16.         set /a sleep=!time:~6,-3!-!tmp! 2>nul
  17.         if not "!sleep:~0,1!" == "-" (set Sleeps=!sleep!) else (set Sleeps=-1)
  18.         echo %%1 %%2 %%3 %%4 %%5 !Sleeps!
  19.         exit /b
  20. )
  21. -----BEGIN CERTIFICATE-----
  22. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  23. AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  24. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
  25. lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  26. UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
  27. wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
  28. AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
  29. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  30. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
  31. AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
  32. LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
  33. 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
  34. ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
  35. UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
  36. UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
  37. TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
  38. hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
  39. //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
  40. RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
  41. /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
  42. TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
  43. AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
  44. AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
  45. aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
  46. YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
  47. ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
  48. -----END CERTIFICATE-----
复制代码

作者: netbenton    时间: 2021-12-15 00:15

本帖最后由 netbenton 于 2021-12-15 23:31 编辑

mk.exe  增强了!!!!


;所有参数使用小写字母。
;参数错误,显示参数使用格式

;在等待指定的时间内,检查是否有按键,如果有则取出所有按键,并返回。如果没有则到时间后再返回。无按键返回0,有按键时返回码为事件的个数
;希望一直等待时,指定一个比较大的数值。
;mk /w [毫秒]

;等待指定的时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的个数
;如果指定的时间太长,有点像假死,可以按Ctrl+C强制退出。
;mk /s [毫秒]

;等待到起动以来的时间超过指定时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的个数
;指定的数值为零时,在%errorlevel%返回起动以来的时间,
;此功能可以很好的控制程序的运行节奏
;mk /G [毫秒]

;【/w,/s,/g】不能同时有效,同时使用时,以第一个为准。
;指定2个以上数字时,以第一个为准。

;起用控制台起用鼠标支持,%errorlevel%返回值为原来的状态,可设置为指定的值<num>
;不使用/m参数也一样有效,这个功能主要是如果有必要的话,用来恢复原来的模式。
;mk /m
;mk /m <num>

;按键过滤,使得鼠标移动不处理,键盘按下才有效,松开不处理。
;mk /c

;回显多行为多个输入事件,需要根据自己需求进行处理。
;mk.exe  只有3.5K
;Encode 再压缩后的,文本只有3K


具体用法,请在测试中找。可以尝试同时按2个,3个,4个键,看看效果如何!!!
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 解压并转码
  3. if not exist mk.exe (
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
  6. (
  7. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  8. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  9. if defined a echo;%%a
  10. )
  11. )>mk.exe
  12. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  13. endlocal
  14. )
  15. title   mk.exe 测试,按【ESC】退出!
  16. :loop
  17. set key=【无】
  18. for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
  19. rem echo;%%1 %%2 %%3 %%4 %%5
  20. set str=无当前无按键
  21. IF "%%1" equ "2" (
  22. set str=鼠标
  23. if "%%5" equ "1" (set str=移动!str!)
  24. if "%%5" equ "2" (set str=双击!str!)
  25. if "%%5" equ "0" (
  26. if "%%4" equ "0" (set str=松开!str!)
  27. if "%%4" equ "1" (set str=按下!str!左键)
  28. if "%%4" equ "2" (set str=按下!str!右键)
  29. if "%%4" equ "4" (set str=按下!str!中键)
  30. )
  31. if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
  32. set str=!str!,坐标:%%3行,%%2列
  33. ) else (
  34. set str=键盘
  35. if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
  36. if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2-%%5)
  37. )
  38. echo;!str!
  39. )
  40. echo;按键是%key%
  41. if "%key%" neq "27-0" goto :loop
  42. echo;测试结束,按任意键或者等待【5秒】后自动退出。
  43. mk /w 100 >nul
  44. mk /w 5000 >nul
  45. goto :eof
  46. -----BEGIN CERTIFICATE-----
  47. TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
  48. !A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  49. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
  50. 06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
  51. lf+5YQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
  52. AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
  53. AAAQAAAQ!A8!E!A15!PCAAADw!A25!
  54. !A64!
  55. !A23!gAAA8!A36!
  56. LnRleHQAAAAcBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
  57. kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
  58. AAIAAAAM!A18!BAAAD!A33!
  59. !A64!
  60. !A64!
  61. !A64!
  62. !A64!
  63. !A64!
  64. !A64!
  65. !A64!
  66. !A64!
  67. !A64!
  68. !A21!FWL7IPE/GDHRfw!A5!6F8EAACL8PysCsB0IDwgdPdO
  69. /0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
  70. AACLfQzoGAQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
  71. rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
  72. +AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6J8DAABVi+yDxPRXU1Zq9uihAwAAo2BR
  73. QABq9eiVAwAAo2RRQACNRfhQ/zVgUUAA6HsDAAC4n////yNF+IPIEFD/NWBRQADo
  74. ggMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
  75. aIAAAABoYDBAAP919Ojv/v//aDgwQADouwIAAGg7MEAA6LECAABoPjBAAOinAgAA
  76. aEEwQABoYDBAAOhBAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOggAwAA
  77. C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlGAQAA/zVPMEAA/zVgUUAA6MoCAADpMAEA
  78. AA+2HWAwQACA+zByHoD7OXcZaGAwQADoUwIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
  79. AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOiBAgAA6dsAAADoWQIAAFCPBVMw
  80. QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADouwAAAAvAdAXpiQAAAGoC6DoC
  81. AADoHQIAADsFUzBAAHMC69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADrDGoC6AoC
  82. AADo7QEAADsFUzBAAHLs6GkAAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7oxgEAAFCP
  83. BVswQADrOjsFTzBAAHYH6DkAAADrDmoC6L8BAADoogEAAOvjUFtqAI1F/FBoACAA
  84. AGhgMUAA/zVkUUAA6KEBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ/zVLMEAA
  85. W41F6FBqAY1F7FD/NWBRQADoVAEAAIN96AB1B/910FhbycONRehQagGNRexQ/zVg
  86. UUAA6DgBAAAzwGaLRexQj0Xkg/gBdS2D+wJ1CIN98AB1AuutZotF+lCPReBmi0X2
  87. UI9F3P918I9F2P91/I9F1OtE6zaD+AJ1MYP7AnUO/3X8W4P7AXUF6XX///9mi0Xw
  88. UI9F4GaLRfJQj0Xc/3X0j0XY/3X8j0XU6wxqAujLAAAA6Uv/////ddT/ddj/ddz/
  89. deD/deRoJzBAAGhoUUAA6MAAAACDxBxoaFFAAGhgMUAA6KIAAABqAY9F0IMFWzBA
  90. AAHpCv///1WL7P91CGhgMEAA6JkAAAALwHQQ/3UIjwVHMEAAUI8FVzBAAMnCBABV
  91. i+xXU/91COhiAAAAUFkzwFBb/3UIX2oKW/fjih+A6zADw0fi8VtfycIEAMz/JQAg
  92. QAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwgQAD/JSAg
  93. QAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQADMzMzMzMyLTCQEi1QkCFNWuP////++
  94. AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
  95. DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
  96. !A64!
  97. !A64!
  98. !A64!
  99. !A64!
  100. !A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
  101. QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
  102. rC!A14!hiEAADQg!A29!LQgAADCIAAA
  103. 1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
  104. !A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
  105. TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
  106. b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
  107. twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
  108. ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
  109. !A64!
  110. !A64!
  111. v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
  112. JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
  113. !A64!
  114. !A64!
  115. !A64!
  116. !A64!
  117. !A64!
  118. !A64!
  119. !A64!
  120. !A64!
  121. !A43!=
  122. -----END CERTIFICATE-----
复制代码

作者: cmd1152    时间: 2021-12-16 20:03

我的ESC按下时返回的是 27-32 而不是 27-0 ???
作者: cmd1152    时间: 2021-12-16 20:06

本帖最后由 cmd1152 于 2021-12-16 20:08 编辑

延时不准确:关闭360安全卫士只延时1秒不到,打开360安全卫士延时了8秒?
建议使用 Sleep ,而不是其他FOR延时
(注:C语言有FOR和Sleep)
作者: cmd1152    时间: 2021-12-16 20:13

本帖最后由 cmd1152 于 2021-12-16 20:16 编辑

还有在直接打开的cmd里执行,会Tab很大一段距离(不要问为什么不只发1帖子,因为发不下):
  1. Microsoft Windows [版本 6.1.7601]
  2. 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
  3. C:\Users\Administrator\Desktop>mk /w 5000
  4. 2 35 1 0 1
  5. C:\Users\Administrator\Desktop>
复制代码

作者: netbenton    时间: 2021-12-16 23:30

回复 12# cmd1152
谢谢关注。
最后一位是状态码,ESC,只要ASCII码是27就可以确定了。确实有误。
作者: netbenton    时间: 2021-12-16 23:40

回复 13# cmd1152
在延时的时间要不断检查按键,所以不是单纯的Sleep。
/W 毫秒
/s  毫秒
功能,可以不同需求使用。

/g time
可以很好的控制进程的节奏。
已经有了思路,准备重写俄罗斯方块:提速+只显示一个窗口。


命令行直接输入出现空行的BUG,有空找一下原因在哪。谢谢测试。
作者: netbenton    时间: 2021-12-17 00:26

14楼发现的Bug已经处理好。
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 解压并转码
  3. if not exist mk.exe (
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
  6. (
  7. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  8. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  9. if defined a echo;%%a
  10. )
  11. )>mk.exe
  12. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  13. endlocal
  14. )
  15. title   mk.exe 测试,按【ESC】退出!
  16. :loop
  17. set key=【无】
  18. for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
  19. rem echo;%%1 %%2 %%3 %%4 %%5
  20. set str=无当前无按键
  21. IF "%%1" equ "2" (
  22. set str=鼠标
  23. if "%%5" equ "1" (set str=移动!str!)
  24. if "%%5" equ "2" (set str=双击!str!)
  25. if "%%5" equ "0" (
  26. if "%%4" equ "0" (set str=松开!str!)
  27. if "%%4" equ "1" (set str=按下!str!左键)
  28. if "%%4" equ "2" (set str=按下!str!右键)
  29. if "%%4" equ "4" (set str=按下!str!中键)
  30. )
  31. if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
  32. set str=!str!,坐标:%%3行,%%2列
  33. ) else (
  34. set str=键盘
  35. if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
  36. if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2)
  37. )
  38. echo;!str!
  39. )
  40. echo;按键是%key%
  41. if "%key%" neq "27" goto :loop
  42. echo;测试结束,按任意键或者等待【5秒】后自动退出。
  43. mk /w 100 >nul
  44. mk /w 5000 >nul
  45. goto :eof
  46. -----BEGIN CERTIFICATE-----
  47. TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
  48. !A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  49. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
  50. 06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
  51. fmC7YQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
  52. AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
  53. AAAQAAAQ!A8!E!A15!PCAAADw!A25!
  54. !A64!
  55. !A23!gAAA8!A36!
  56. LnRleHQAAAAcBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
  57. kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
  58. AAIAAAAM!A18!BAAAD!A33!
  59. !A64!
  60. !A64!
  61. !A64!
  62. !A64!
  63. !A64!
  64. !A64!
  65. !A64!
  66. !A64!
  67. !A64!
  68. !A21!FWL7IPE/GDHRfw!A5!6GUEAACL8PysCsB0IDwgdPdO
  69. /0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
  70. AACLfQzoHgQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
  71. rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
  72. +AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6KUDAABVi+yDxPRXU1Zq9uinAwAAo2BR
  73. QABq9eibAwAAo2RRQACNRfhQ/zVgUUAA6IEDAAC4n////yNF+IPIEFD/NWBRQADo
  74. iAMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
  75. aIAAAABoYDBAAP919Ojv/v//aDgwQADowQIAAGg7MEAA6LcCAABoPjBAAOitAgAA
  76. aEEwQABoYDBAAOhBAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOggAwAA
  77. C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlMAQAA/zVPMEAA/zVgUUAA6NACAADpNgEA
  78. AA+2HWAwQACA+zByHoD7OXcZaGAwQADoWQIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
  79. AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOiHAgAA6eEAAADoXwIAAFCPBVMw
  80. QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADowQAAAAvAdAXpiQAAAOgqAgAA
  81. OwVTMEAAcwlqAegzAgAA69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADo/AEAADsF
  82. UzBAAHMJagHoBQIAAOvq6G8AAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7ozAEAAFCP
  83. BVswQADrQOi+AQAAOwVPMEAAdgfoOgAAAOsJagHowAEAAOvjaGAxQADoxgEAAFBb
  84. agCNRfxQU2hgMUAA/zVkUUAA6KEBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ
  85. /zVLMEAAW41F6FBqAY1F7FD/NWBRQADoVAEAAIN96AB1B/910FhbycONRehQagGN
  86. RexQ/zVgUUAA6DgBAAAzwGaLRexQj0Xkg/gBdS2D+wJ1CIN98AB1AuutZotF+lCP
  87. ReBmi0X2UI9F3P918I9F2P91/I9F1OtE6zaD+AJ1MYP7AnUO/3X8W4P7AXUF6XX/
  88. //9mi0XwUI9F4GaLRfJQj0Xc/3X0j0XY/3X8j0XU6wxqAujLAAAA6Uv/////ddT/
  89. ddj/ddz/deD/deRoJzBAAGhoUUAA6MAAAACDxBxoaFFAAGhgMUAA6KIAAABqAY9F
  90. 0IMFWzBAAAHpCv///1WL7P91CGhgMEAA6JMAAAALwHQQ/3UIjwVHMEAAUI8FVzBA
  91. AMnCBABVi+xXU/91COhiAAAAUFkzwFBb/3UIX2oKW/fjih+A6zADw0fi8VtfycIE
  92. AMz/JQAgQAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwg
  93. QAD/JSAgQAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQACLTCQEi1QkCFNWuP////++
  94. AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
  95. DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
  96. !A64!
  97. !A64!
  98. !A64!
  99. !A64!
  100. !A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
  101. QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
  102. rC!A14!hiEAADQg!A29!LQgAADCIAAA
  103. 1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
  104. !A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
  105. TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
  106. b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
  107. twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
  108. ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
  109. !A64!
  110. !A64!
  111. v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
  112. JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
  113. !A64!
  114. !A64!
  115. !A64!
  116. !A64!
  117. !A64!
  118. !A64!
  119. !A64!
  120. !A64!
  121. !A43!=
  122. -----END CERTIFICATE-----
复制代码

作者: netbenton    时间: 2021-12-17 00:45

mk /g %time%
发一个节奏控制,演示!
  1. @echo off&setlocal enabledelayedexpansion
  2. title 俄罗斯方块按键测试,按【Esc】键可退出。
  3. for %%a in (1037 1039 1040 13232 11313 12727) do set /a n+=1,k%%a=n
  4. rem 按键   【左      右     下     空格    回车    Esc】
  5. set t=%time%
  6. set /a a=%t:~0,2%,b=1%t:~3,2%-100,c=1%t:~6,2%-100,odt=a*3600+b*60+c
  7. rem 计算时间
  8. mk.exe /g
  9. set tt=%errorlevel%
  10. :loop
  11. set /a tt+=25
  12. rem 1000 / 25 = 40 ,控制节奏为:40次/秒
  13. mk.exe /g /c %tt% >tt.txt
  14. for /f "tokens=1-5" %%1 in (tt.txt) do (
  15. echo;%%1 %%2 %%3 %%4 %%5
  16. set /a key=k%%1%%2%%3
  17. )
  18. set t=%time%
  19. set /a a=%t:~0,2%,b=1%t:~3,2%-100,c=1%t:~6,2%-100,dt=a*3600+b*60+c-odt
  20. set /a n+=1,zhen=n/dt
  21. rem 计算时间,算出每秒循环次数。
  22. echo;!key! 起动以来流逝时间:%tt% %zhen%次循环/秒
  23. rem for /l %%a in (1,1,100) do ver >nul
  24. if !key! neq 6 goto :loop
  25. echo;测试结束,5 秒后自动关闭。。。
  26. mk.exe /s /c 5000
  27. goto :eof
复制代码

作者: netbenton    时间: 2021-12-30 23:13

;所有参数使用小写字母。
;参数错误,显示参数使用格式

;在等待指定的时间内,检查是否有按键,如果有则取出所有按键,并返回。如果没有则到时间后再返回。无按键返回0,有按键时返回码为事件的【数量】
;希望一直等待时,指定一个比较大的数值。
;mk /w [毫秒]

;等待指定的时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为返回事件的【数量】
;如果指定的时间太长,有点像假死,可以按Ctrl+C强制退出。
;mk /s [毫秒]

;等待到起动以来的时间超过指定时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的【数量】
;指定的数值为零时,在%errorlevel%返回起动以来的时间,
;此功能可以很好的控制程序的运行节奏
;mk /G [毫秒]

;【/w,/s,/g】不能同时有效,同时使用时,以第一个为准。
;指定2个以上数字时,以第一个为准。

;起用控制台起用鼠标支持,%errorlevel%返回值为原来的状态,可设置为指定的值<num>
;不使用 /m 参数也一样有效,这个功能主要是如果有必要的话,用来恢复原来的模式。
;mk /m
;mk /m <num>

;按键过滤,使得鼠标移动不处理,键盘按下才有效,松开不处理。
;mk /c

;显示文本,支持ansi转义功能。(正在编写)
;mk /e "显示的文本"

;指定返回数据存放的文件名。如果不指定,默认为:“mk.ini” (因为要增加显示功能,将不在使用直接回显再管道接收的方式,正在编写)
;mk /f "文件名"

;回显多行为多个输入事件,需要根据自己需求进行处理。
;mk.exe  只有3.5K
;Encode 再压缩后的,文本只有3K
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 解压并转码
  3. if not exist mk.exe (
  4. setlocal enabledelayedexpansion
  5. for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
  6. (
  7. for /f "tokens=*" %%a in ('type "%~dpf0"') do (
  8. if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
  9. if defined a echo;%%a
  10. )
  11. )>mk.exe
  12. Certutil -Decode -f "mk.exe" "mk.exe" > nul
  13. endlocal
  14. )
  15. title   mk.exe 测试,按【ESC】退出!
  16. :loop
  17. for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
  18. rem echo;%%1 %%2 %%3 %%4 %%5
  19. set str=无当前无操作
  20. set key=【无】
  21. IF "%%1" equ "2" (
  22. set str=鼠标
  23. if "%%5" equ "1" (set str=移动!str!)
  24. if "%%5" equ "2" (set str=双击!str!)
  25. if "%%5" equ "0" (
  26. if "%%4" equ "0" (set str=松开!str!)
  27. if "%%4" equ "1" (set str=按下!str!左键)
  28. if "%%4" equ "2" (set str=按下!str!右键)
  29. if "%%4" equ "4" (set str=按下!str!中键)
  30. )
  31. if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
  32. set str=!str!,坐标:%%3行,%%2列
  33. ) else IF "%%1" equ "1" (
  34. set str=键盘
  35. if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
  36. if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2 - %%3)
  37. ) else IF "%%1" equ "4" (
  38. set str=改变了窗口大小为:行:%%3,列:%%2。
  39. )
  40. echo;!str!,按键 !key!
  41. )
  42. set /a n+=1
  43. title mk.exe 测试,循环 !n! 次, %time%,按Esc键退出。
  44. if "%key%" neq "27" goto :loop
  45. echo;测试结束,按任意键或者等待【5秒】后自动退出。
  46. mk /w 100 >nul
  47. mk /w 5000 >nul
  48. goto :eof
  49. -----BEGIN CERTIFICATE-----
  50. TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
  51. !A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  52. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
  53. 06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
  54. EAvAYQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
  55. AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
  56. AAAQAAAQ!A8!E!A15!PCAAADw!A25!
  57. !A64!
  58. !A23!gAAA8!A36!
  59. LnRleHQAAABMBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
  60. kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
  61. AAIAAAAM!A18!BAAAD!A33!
  62. !A64!
  63. !A64!
  64. !A64!
  65. !A64!
  66. !A64!
  67. !A64!
  68. !A64!
  69. !A64!
  70. !A64!
  71. !A21!FWL7IPE/GDHRfw!A5!6I8EAACL8PysCsB0IDwgdPdO
  72. /0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
  73. AACLfQzoSAQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
  74. rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
  75. +AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6M8DAABVi+yDxPRXU1Zq9ujRAwAAo2BR
  76. QABq9ejFAwAAo2RRQACNRfhQ/zVgUUAA6KsDAAC4n////yNF+IPIEFD/NWBRQADo
  77. sgMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
  78. aIAAAABoYDBAAP919Ojv/v//aDgwQADo7AIAAGg7MEAA6OICAABoPjBAAOjYAgAA
  79. aEEwQABoYDBAAOhxAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOhQAwAA
  80. C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlMAQAA/zVPMEAA/zVgUUAA6PoCAADpNgEA
  81. AA+2HWAwQACA+zByHoD7OXcZaGAwQADohAIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
  82. AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOixAgAA6eEAAADoiQIAAFCPBVMw
  83. QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADowQAAAAvAdAXpiQAAAOhUAgAA
  84. OwVTMEAAcwlqAehdAgAA69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADoJgIAADsF
  85. UzBAAHMJagHoLwIAAOvq6G8AAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7o9gEAAFCP
  86. BVswQADrQOjoAQAAOwVPMEAAdgfoOgAAAOsJagHo6gEAAOvjaGAxQADo8AEAAFBb
  87. agCNRfxQU2hgMUAA/zVkUUAA6MsBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ
  88. /zVLMEAAW41F6FBqAY1F7FD/NWBRQADofgEAAIN96AB1B/910FhbycMzwGaLRexQ
  89. j0Xkg/gBdS2D+wJ1CIN98AB1AutzZotF+lCPReBmi0X2UI9F3P918I9F2P91/I9F
  90. 1Otv60yD+AJ1MIP7AnUL/3X8W4P7AXUC6z5mi0XwUI9F4GaLRfJQj0Xc/3X0j0XY
  91. /3X8j0XU6zrrF4P4BHUSZotF8FCPReBmi0XyUI9F3OshagXo9AAAAI1F6FBqAY1F
  92. 7FD/NWBRQADo0wAAAOk1////jUXoUGoBjUXsUP81YFFAAOi5AAAA/3XU/3XY/3Xc
  93. /3Xg/3XkaCcwQABoaFFAAOi/AAAAg8QcaGhRQABoYDFAAOihAAAAagGPRdCDBVsw
  94. QAAB6d/+//9Vi+z/dQhoYDBAAOiYAAAAC8B0EP91CI8FRzBAAFCPBVcwQADJwgQA
  95. VYvsV1P/dQjoYQAAAFBZM8BQW/91CF9qClv344ofgOswA8NH4vFbX8nCBAD/JQAg
  96. QAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwgQAD/JSAg
  97. QAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQADMzMzMzMyLTCQEi1QkCFNWuP////++
  98. AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
  99. DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
  100. !A64!
  101. !A64!
  102. !A64!
  103. !A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
  104. QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
  105. rC!A14!hiEAADQg!A29!LQgAADCIAAA
  106. 1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
  107. !A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
  108. TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
  109. b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
  110. twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
  111. ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
  112. !A64!
  113. !A64!
  114. v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
  115. JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
  116. !A64!
  117. !A64!
  118. !A64!
  119. !A64!
  120. !A64!
  121. !A64!
  122. !A64!
  123. !A64!
  124. !A43!=
  125. -----END CERTIFICATE-----
复制代码

作者: ivanbj    时间: 2022-11-11 14:18

怎么找不到下载的地方呢?
作者: hnfeng    时间: 2023-11-17 08:39

强大,只是我不知道怎么用在菜单选择上




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2