Board logo

标题: [其他] cmd获取当前窗口鼠标位置 [打印本页]

作者: xinje    时间: 2010-5-20 21:28     标题: cmd获取当前窗口鼠标位置

虽然我不知道干啥用,不过ZJHJ要的,我就写了一个。不知道功能上是否符合你的要求。
12.5KB。要求200B,我觉得太不可能了。这我达不到。呵呵。
---------------------------
CMDMOUSE 1.02
2010-6-21
庆祝葡萄牙7:0大胜朝鲜。
更改如下:
修改了取窗口的判断方法,更精确。
链接: https://pan.baidu.com/s/1Su7m0llZbFgOGvYR2eVp4Q 提取码: gmtc
----------------------------
CMDMOUSE 1.01
2010-5-21
修改如下:
CMD窗口之外不能取值
CMD窗口边框不能取值
返回值改为 000,000(x,y)
调整尺寸:8KB

----------------------------
返回值:
x:177 y:178

CMDMOUSE 1.0 CMD鼠标获取坐标
作者:xinje
E-mail:[email=xinje@126.com]xinje@126.com[/email]
2010.5.20
----------------------

[ 本帖最后由 xinje 于 2010-6-21 21:43 编辑 ]
作者: ZJHJ    时间: 2010-5-21 00:06

非常谢谢xinje [楼主] 的辛苦!非常成功的一点是不占用cpu。
用处:运行CMD.EXE 时,在cmd 窗口获得鼠标位置。(即cmd 窗口支持鼠标).
当cmd 窗口为80X25 时, 在窗口内获取鼠标坐标 X 应该是1~80(从左到右), Y 应该是1~25(从上到下). 返回值应该交给 errorlevel ,在使用中设置变量取出.(如:
  set /a sbs=%errorlevel%
  set  X=%sbs:~0,-3%
  set  Y=%sbs:~-2,2%)
即errorlevel=X0Y 的格式.
所以你的返回值无法使用.(也不要在窗口显示),另外,在黑色窗口外的任何位置都不要获取鼠标坐标.
谢谢再修改一下!
如果能做到 2KB 左右(16或32位汇编)就太好了.便于用debug-DW 装入BAT中了.

[ 本帖最后由 ZJHJ 于 2010-5-21 00:16 编辑 ]
作者: xinje    时间: 2010-5-21 00:42

errorlevel=X0Y
0 是数字“零”还是英文?
如果是数字,很难进行分割。
我认为用特殊的文本更合适。

[ 本帖最后由 xinje 于 2010-5-21 00:56 编辑 ]
作者: ZJHJ    时间: 2010-5-21 07:00

errorlevel=X0Y
0 是数字“零”,目的是保证5位数字,或者不要“零”,保证4位数字。只要保证位数,是很容易分割的,这个代码就是取出读取的坐标并进行X Y分割的。
set /a sbs=%errorlevel%
  set  X=%sbs:~0,-3%
  set  Y=%sbs:~-2,2%)
用什么语言文本都可以,只要目的。
第10楼上传的mouse.com http://www.bathome.net/thread-7933-1-1.html也很好,就是启用的ntvdm.exe 占用CPU没解决。
程序体积越小越好。
作者: xinje    时间: 2010-5-21 19:19

%errorlevel% 写起来很麻烦,我需要加很多的代码。不知道别人如何实现的。
所以要调用这个的返回值,你用
for /F "delims=" %%a in ('CMDMOUSE.exe') do set 变量名=%%a
来取得。
作者: ZJHJ    时间: 2010-5-21 21:14

经过验证,8Kb的 CMDMOUSE.exe有很大的进步。用
for /F "delims=" %%a in ('CMDMOUSE.exe') do set 变量名=%%a
来取得变量是可以的。
还需要修改的是: 1  窗口框边不能取值,只取CMD有效窗口内。
2  返回值不对:
如果是第一行,从左到右应该X是01~80(X 列),Y应该始终是 01(Y)。
...........
...........
如果是第25行,从左到右应该X是01~80(X 列),Y应该始终是 25(Y)。
如果是第5 列,从上到下X始终是05,Y应该是01~ 25(Y)。
1=01   2=02    9=09   这样取得的变量位数才是固定位数,才有可能进行X Y分割
下面是 netbenton写的108B 的mouse.com的演示批处理,我把108b 的mouse.com用DEBUG-dw格式装入bat中了。缺点:就是ntvdm.exe占用cpu太高没有得到解决。
@echo off
title 鼠标三方演示批处理
(chcp 437 &graftabl 936)>nul
SET SYB=A100;0AEB 3030 3020 2030 3030 2420 00B8 CD00;B833 0001 33CD 05B8 CD00 A933 0007 F674;E086 300D A330 0102 C889 08B3 18E8 A300;0105 D089 08B3 0EE8 A300 0108 09B4 02BA;CD01 B421 CD4C F621 08F3 74E4 FE02 FEC0;88C0 B1C4 D204 25E8 0F0F 300D 3C30 7639;0402 8007 39FC 0376 C480 C307  ;
SET V=;RCX;006C;N mouse.com;W;Q
(ECHO.%SYB:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
:lp
cls
echo.
echo   鼠标点击窗口
echo.                                                  点击这里关闭窗口
echo.                            查看代码
echo.
echo           X %X%       Y %Y%
for /f "tokens=1-3" %%1 in ('mouse.com') do (set /a X=0x%%2,Y=0x%%3)
if %X% GTR 51 if %X% LSS 65  if %Y% EQU 03 goto we
if %X% GTR 29 if %X% LSS 36  if %Y% EQU 04 goto ck
goto :lp
:ck
start mrt.exe  %0
goto :lp
:we
Exit
作者: ZJHJ    时间: 2010-5-23 21:56

经过2010-5-21修改的CMDMOUSE.exe非常成功。返回值X,Y用逗号隔开完全可以。只不过要进行2次截取,X Y值还需要如下设置: 即
for /F "delims=" %%a in ('CMDMOUSE.exe') do echo %%a>temp.txt
for /f "tokens=2 delims=," %%i in (temp.txt) do set /a Y=%%i/16+1
for /f "tokens=1 delims=," %%i in (temp.txt) do set /a X=%%i/8+1
经过这样处理,完全符合要求。最大优点:不占CPU。使用时反映速度快。运行其他程序时就不会出现卡
谢谢xinje [楼主] 辛苦了!
作者: xinje    时间: 2010-5-23 23:19

为大家服务。  ^_^
作者: raymai97    时间: 2010-5-30 01:54

功能强但复杂到我晕了!谢谢!
作者: ZJHJ    时间: 2010-6-10 20:57

xinje [楼主]写的 CMDMOUSE.exe 用起来很方便,不过发现一个问题,在启用中经常失灵,
要关闭CMD窗口重新启用。谢谢 楼主再检查修改一下。




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