批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

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

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

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
复制代码
4

评分人数

本帖最后由 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)

TOP

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


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

TOP

回复 2# peterboy666

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

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

Certutil 反编码时会提示病毒,这个和mk.exe无关系,mk.exe是很纯正的

TOP

本帖最后由 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-----
复制代码
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复  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

TOP

回复  peterboy666  

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


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

我编译了你的 ASM 也是无法运行,
取消 /ALIGN:16 就可以运行.

TOP

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

TOP

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

回复 8# netbenton


这个我知道.

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

Windows 7/8.1 X64 无法运行,
我猜 Windows 8 X64 也是无法运行(手边没有,无法测试).

TOP

本帖最后由 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-----
复制代码
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

本帖最后由 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-----
复制代码

TOP

我的ESC按下时返回的是 27-32 而不是 27-0 ???
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

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

延时不准确:关闭360安全卫士只延时1秒不到,打开360安全卫士延时了8秒?
建议使用 Sleep ,而不是其他FOR延时
(注:C语言有FOR和Sleep)
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

本帖最后由 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>
复制代码
梦依旧在,只是,心有余而力渐有不足
年年岁岁花相似,岁岁年年人不同

TOP

回复 12# cmd1152
谢谢关注。
最后一位是状态码,ESC,只要ASCII码是27就可以确定了。确实有误。

TOP

返回列表