标题: [其他] CMD控制台最小的鼠标与键盘兼定时三方【持续回贴更新】 [打印本页]
作者: netbenton 时间: 2021-11-22 23:52 标题: CMD控制台最小的鼠标与键盘兼定时三方【持续回贴更新】
mk.exe,只有1,248字节
同时等待接受键盘和鼠标的输入,
win10和win XP 测试过可以使用。
支持全键盘按键,包括,控制键和状态键
支持鼠标左、右、中按键
支持定时、延时,程序节奏控制
增强版:3.5KB,最新请看11楼
使用方法,请从测试例子中找。
批处理使用测试例子- @echo off&setlocal enabledelayedexpansion
-
- if not exist mk.exe (
- (
- for /f "tokens=*" %%a in ('type "%~dpf0"') do (
- if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
- if defined a echo;%%a
- )
- )>mk.exe
- Certutil -Decode -f "mk.exe" "mk.exe" > nul
- )
-
- :loop
- for /f "tokens=1-5" %%1 in ('mk.exe') do (
- rem echo;%%1 %%2 %%3 %%4 %%5
-
- IF "%%1" equ "2" (
- set str=鼠标
- if "%%5" equ "1" (set str=移动!str!)
- if "%%5" equ "0" (
- if "%%4" equ "0" (set str=松开!str!)
- if "%%4" equ "1" (set str=按下!str!左键)
- if "%%4" equ "2" (set str=按下!str!右键)
- if "%%4" equ "4" (set str=按下!str!中键)
- )
- if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
- set str=!str!,坐标:%%3行,%%2列
-
- ) else (
- set str=键盘
- if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
- if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5)
- )
- )
-
- echo;!str!
- goto :loop
-
-
- pause
- goto :eof
- -----BEGIN CERTIFICATE-----
- TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
- dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
- lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
- wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
- AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
- LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
- 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
- ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
- UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
- UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
- TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
- hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
- //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
- RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
- /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
- TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
- AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
- aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
- YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
- ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
- -----END CERTIFICATE-----
复制代码
测试结果如下:- 鼠标,坐标:16行,54列
- 鼠标,坐标:16行,54列
- 鼠标,坐标:16行,54列
- 移动鼠标,坐标:16行,54列
- 移动鼠标,坐标:16行,55列
- 移动鼠标,坐标:16行,55列
- 鼠标,坐标:16行,55列
- 移动鼠标,坐标:16行,55列
- 移动鼠标,坐标:16行,55列
- 鼠标,坐标:16行,55列
- 按下键盘扫描码是:17,状态码是:8
- 松开键盘扫描码是:17,状态码是:0
- 移动鼠标,坐标:16行,55列
- 按下键盘ASCII码是:97,状态码是:0
- 松开键盘扫描码是:16,状态码是:0
- 按下键盘ASCII码是:102,状态码是:0
- 松开键盘ASCII码是:102,状态码是:0
- 按下键盘ASCII码是:100,状态码是:0
- 松开键盘ASCII码是:100,状态码是:0
- 按下鼠标左键,坐标:16行,55列
- 松开鼠标,坐标:16行,55列
- 鼠标,坐标:16行,55列
- 松开鼠标,坐标:16行,55列
- 移动鼠标,坐标:16行,55列
复制代码
MASM32,源码- comment * ?
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; Sample code for < Win32ASM Programming 2nd Edition>
- ; by netBenton,37659560
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- ; 编译链接:
- ;ml /c /coff mk.asm
- ;Link /SUBSYSTEM:CONSOLE /ALIGN:16 mk.obj
- ; 功能:
- ; mk.asm ---> CMD控制台最小的鼠标与键盘三方。
-
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
- ?*
-
- .586 ; create 32 bit code
- .model flat, stdcall ; 32 bit memory model
- option casemap :none ; case sensitive
-
- ;包含windows 关键字以及数据结构
- include \masm32\include\windows.inc
-
- ;包含API库
- include \masm32\include\kernel32.inc
- include \masm32\include\user32.inc
- include \masm32\include\masm32.inc
- ; 包含宏库
- include \masm32\macros\macro$.asm ;注意并非使用源版,是函数增加版。所有子过程作为函数使用在过程名后加 “$”
- ; include \masm32\macros\macros.asm
-
-
- includelib \masm32\lib\kernel32.lib
- includelib \masm32\lib\user32.lib
- includelib \masm32\lib\masm32.lib
-
- szText MACRO Name, Text:VARARG
- LOCAL lbl
- Name db Text,0dh,0ah,0
- ENDM
-
-
- STATE STRUCT
- dw ?
- dw ?
- STATE ENDS
-
- USBUFF STRUCT
- dw 64 dup (?)
- USBUFF ENDS
-
-
-
- .code
-
-
- ;程序入口
- start:
- call main
- invoke ExitProcess,eax
-
- ;这里定义数据,
- szText szTx,"%d %d %d %d %d"
- ;这里写代码
- main proc
- local @rvstring:USBUFF ;输入缓存
- local @inRec:INPUT_RECORD ;输入缓存结构定义
- local @state:STATE ;用来接收api调用返回值
- local @oldmode:DWORD ;原控制台模式,以备退出时恢复
- local @hStdIn:DWORD
- local @hStdOut:DWORD
- local @varar1:DWORD ;数据一
- local @varar2:DWORD ;...
- local @varar3:DWORD ;...
- local @varar4:DWORD ;...
- local @varar5:DWORD ;数据五
- pusha
-
- mov @hStdIn,fn$(GetStdHandle,STD_INPUT_HANDLE) ;获取输入句柄
- mov @hStdOut,fn$(GetStdHandle,STD_OUTPUT_HANDLE) ;获取输出句柄
- fn GetConsoleMode,@hStdIn,addr @oldmode ;获取输入模式
- mov eax,not (ENABLE_QUICK_EDIT_MODE or ENABLE_INSERT_MODE) ;清除快速编辑、插入模式
- and eax,@oldmode
- or eax,ENABLE_MOUSE_INPUT ;增加鼠标支持模式
- fn SetConsoleMode,@hStdIn,eax ;起用鼠标支持
-
- @@:
-
- fn ReadConsoleInputA,@hStdIn,addr @inRec,1,addr @state ;读取输入缓存
- xor eax,eax
- mov ax,@inRec.EventType ;处理字宽数据,清零高位。
- m2m @varar1,eax
-
- .if (eax == KEY_EVENT ) ;键盘事件
- mov ax,@inRec.KeyEvent.UnicodeChar ;转换后的 ASCII 字符
- m2m @varar2,eax
-
- mov ax,@inRec.KeyEvent.wVirtualKeyCode ;给定键的 虚拟键代码
- m2m @varar3,eax
- m2m @varar4,@inRec.KeyEvent.bKeyDown ;如果按下该键,则此成员为 TRUE。 否则,此成员为 FALSE
- m2m @varar5,@inRec.KeyEvent.dwControlKeyState ;控制键的状态。
-
- jmp @F
-
- .elseif (eax == MOUSE_EVENT ) ;鼠标事件
- mov ax,@inRec.MouseEvent.dwMousePosition.x ;列
- m2m @varar2,eax
- mov ax,@inRec.MouseEvent.dwMousePosition.y ;行
- m2m @varar3,eax
- m2m @varar4,@inRec.MouseEvent.dwButtonState ;按键
- m2m @varar5,@inRec.MouseEvent.dwEventFlags ;键状态,双击等
-
- jmp @F
-
- .endif
- fn Sleep,2 ;延迟等待事件处理完成
- jmp @B
- @@:
-
- fn SetConsoleMode,@hStdIn,@oldmode ;恢复原来输入模式
- invoke wsprintfA,addr @rvstring,offset szTx,@varar1,@varar2,@varar3,@varar4,@varar5 ;转换输出格式
-
- m2m ebx,eax ;用EAX传送参数回出错
- fn WriteFile,@hStdOut,addr @rvstring,ebx,addr @state,NULL ;输出结果,写标准句柄,输出到屏幕
- popa
-
- ret
-
- main endp
-
-
- 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 编辑
改进一下示范代码:- @echo off&setlocal enabledelayedexpansion
- if not exist mk.exe (
- (
- for /f "tokens=*" %%a in ('type "%~dpf0"') do (
- if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
- if defined a echo;%%a
- )
- )>mk.exe
- Certutil -Decode -f "mk.exe" "mk.exe" > nul
- )
- :loop
- set tmp=!time:~6,-3!
- for /f "tokens=1-5" %%1 in ('mk.exe') do (
- set ex=%%1 %%2 %%3 %%4 %%5
- set /a sleep=!time:~6,-3!-!tmp! 2>nul
- if not "!sleep:~0,1!" == "-" (set Sleeps=程序等待了!sleep!秒) else (set Sleeps=程序等待未知)
- IF "%%1" equ "2" (
- set str=鼠标
- if "%%5" equ "1" (set str=移动!str!)
- if "%%5" equ "0" (
- if "%%4" equ "0" (set str=松开!str!)
- if "%%4" equ "1" (set str=按下!str!左键)
- if "%%4" equ "2" (set str=按下!str!右键)
- if "%%4" equ "4" (set str=按下!str!中键)
- )
- if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
- set str=!str!,坐标:%%3行,%%2列
- ) else (
- set str=键盘
- if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
- if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5)
- )
- )
- set str=!str!,!sleeps!,mk返回!ex!,批处理返回!sleep!
- echo;!str!
- goto :loop
-
- pause
- goto :eof
- -----BEGIN CERTIFICATE-----
- TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
- dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
- lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
- wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
- AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
- LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
- 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
- ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
- UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
- UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
- TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
- hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
- //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
- RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
- /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
- TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
- AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
- aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
- YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
- ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
- -----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] [使用时间]- @echo off&setlocal enabledelayedexpansion
- if not exist mk.exe (
- (
- set /p=创建mk.exe...>nul
- for /f "tokens=*" %%a in ('type "%~dpf0"') do (
- if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
- if defined a echo;%%a
- set /p=^[完成^]>nul
- echo;
- )
- )>mk.exe
- Certutil -Decode -f "mk.exe" "mk.exe" > nul
- )
- set tmp=!time:~6,-3!
- for /f "tokens=1-5" %%1 in ('mk.exe') do (
- set /a sleep=!time:~6,-3!-!tmp! 2>nul
- if not "!sleep:~0,1!" == "-" (set Sleeps=!sleep!) else (set Sleeps=-1)
- echo %%1 %%2 %%3 %%4 %%5 !Sleeps!
- exit /b
- )
-
- -----BEGIN CERTIFICATE-----
- TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
- dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
- lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
- wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
- AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
- LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
- 6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
- ////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
- UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
- UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
- TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
- hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
- //+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
- RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
- /yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
- TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
- AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
- aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
- YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
- ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
- -----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个键,看看效果如何!!!复制代码
作者: 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帖子,因为发不下):复制代码
作者: 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已经处理好。复制代码
作者: netbenton 时间: 2021-12-17 00:45
mk /g %time%
发一个节奏控制,演示!- @echo off&setlocal enabledelayedexpansion
-
- title 俄罗斯方块按键测试,按【Esc】键可退出。
- for %%a in (1037 1039 1040 13232 11313 12727) do set /a n+=1,k%%a=n
- rem 按键 【左 右 下 空格 回车 Esc】
-
- set t=%time%
- set /a a=%t:~0,2%,b=1%t:~3,2%-100,c=1%t:~6,2%-100,odt=a*3600+b*60+c
- rem 计算时间
-
- mk.exe /g
- set tt=%errorlevel%
-
- :loop
- set /a tt+=25
- rem 1000 / 25 = 40 ,控制节奏为:40次/秒
-
- mk.exe /g /c %tt% >tt.txt
- for /f "tokens=1-5" %%1 in (tt.txt) do (
- echo;%%1 %%2 %%3 %%4 %%5
- set /a key=k%%1%%2%%3
- )
-
- set t=%time%
- 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
- set /a n+=1,zhen=n/dt
- rem 计算时间,算出每秒循环次数。
-
- echo;!key! 起动以来流逝时间:%tt% %zhen%次循环/秒
- rem for /l %%a in (1,1,100) do ver >nul
- if !key! neq 6 goto :loop
-
- echo;测试结束,5 秒后自动关闭。。。
- mk.exe /s /c 5000
- 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复制代码
作者: ivanbj 时间: 2022-11-11 14:18
怎么找不到下载的地方呢?
作者: hnfeng 时间: 2023-11-17 08:39
强大,只是我不知道怎么用在菜单选择上
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |