Board logo

标题: [工具合集] 我也发一个控制台鼠标支持程序, 让控制台变得更强大~ :-) [打印本页]

作者: 女孩不哭    时间: 2012-6-8 13:52     标题: 我也发一个控制台鼠标支持程序, 让控制台变得更强大~ :-)

今天发布的控制台程序是一个控制台鼠标支持的小程序~~~
记得Defaniv曾经发布过一个.....
我今天也查找相关资料模拟了一个~~~
程序简单, 采用 VC++6.0 + WinXPSP3 + C语言写成, 提供源代码下载, 欢迎下载共同学习~~~共同进步 :-)

使用方法:
      /?                                 查看帮助
      不带参数或其它参数         进入工作模式.

返回值处理:
        %ERRORLEVEL% 高 16 位包含鼠标 X 坐标
        %ERRORLEVEL% 低 16 位包含鼠标 Y 坐标
比如:返回 65537, 可以用如下方式取得 X,Y
        set /a ret=%errorlevel%
        set /a "x=%ret%>>16"
        set /a "y=%ret%&65535"

附件说明:
mouse.7z,程序
mouse_src.7z,源代码
mouse_test.bat 测试程序
http://bcn.bathome.net/s/tool/index.html?key=mouse
作者: garyng    时间: 2012-6-8 14:32

以高16位和底16位来储存坐标这个方法不错 学习了!
作者: 女孩不哭    时间: 2012-6-8 14:37

回复 2# garyng


    呃, x,y 是两个 2个字节长度的数据, 控制台程序返回值是 一个 4 个字节的数据, 所以刚刚合适........ :-)
作者: defanive    时间: 2012-6-8 14:40

写批处理第三方的人越来越多了,开心
作者: 喃喃努努    时间: 2012-6-8 14:45

请楼主解释一下,我还是看不懂。
作者: 女孩不哭    时间: 2012-6-8 14:47

请楼主解释一下,我还是看不懂。
喃喃努努 发表于 2012-6-8 14:45



    解释什么, 使用?
作者: 喃喃努努    时间: 2012-6-8 14:48

回复 6# 女孩不哭


    这个程序的作用是什么,我太菜了。
作者: 女孩不哭    时间: 2012-6-8 14:50

回复  女孩不哭


    这个程序的作用是什么,我太菜了。
喃喃努努 发表于 2012-6-8 14:48



    在CMD中, 使用cd命令切换到程序所在的目录, 然后输入程序名即可运行.. 此时就可以移动鼠标, 然后单击鼠标 程序结束, 使用我上面的示例程序可以取得鼠标单击时的坐标信息
作者: 喃喃努努    时间: 2012-6-8 14:55

回复 8# 女孩不哭


    直接点击那个程序没有反应啊,然后任意键就退出了,用你的方法打开后还是不动,点击鼠标也是没有反应,没有显示鼠标的坐标啊。
作者: 女孩不哭    时间: 2012-6-8 15:02

回复 7# 喃喃努努


我上传了一个示例程序, 你把 mouse.exe 和  mouse.bat 放在一起, 然后运行 mouse.bat, 单击鼠标左键试试
作者: 喃喃努努    时间: 2012-6-8 15:08

这个有反应了,但是单点一个没反应,把exe拖到bat上就有反应了,坐标无论怎么点都是输出的0,9009
作者: 女孩不哭    时间: 2012-6-8 15:13

回复 11# 喃喃努努


    呃, 可能是程序BUG, 不过我测试一切正常, 我的邮箱:191035066#qq.com,你把截图发我看看.
作者: 喃喃努努    时间: 2012-6-8 15:24

回复 12# 女孩不哭


单独点开bat没反应,

拖进去后就这一个坐标。
作者: 女孩不哭    时间: 2012-6-8 15:26

回复 13# 喃喃努努


    我更新了下程序, 出了点小错, 你重新下载试试., 谢谢测试....
作者: plp626    时间: 2012-6-8 15:30

回复 13# 喃喃努努


    你把楼主的mouse.bat代码中mouse改为mouse.exe,把mouse.exe 放在mouse.bat文件所在路径下试试;
最好把bat文件和exe文件的文件名区分开来, 否则跟上后缀名比较保险;
  1. @echo off|| mouse.exe (编写者:女孩不哭) 演示程序
  2. :lp
  3. call mouse.exe
  4. set/a "ret=%errorlevel%,x=ret>>16,y=ret&65535"
  5. title 演示程序,坐标=(%x%,%y%)
  6. goto:lp
复制代码

作者: plp626    时间: 2012-6-8 15:41

windows API陌生,

以前使用过defin。。。的mouse.exe 但体积太大200多K(太夸张了), 想自己给他瘦身但不开源,无奈作罢。

楼主这个2KB+的很实用, 比如可以用鼠标点击选项, bat交互功能会人性化很多。。。
作者: 女孩不哭    时间: 2012-6-8 15:42

回复  喃喃努努


    你把楼主的mouse.bat代码中mouse改为mouse.exe,把mouse.exe 放在mouse.bat文件所 ...
plp626 发表于 2012-6-8 15:30



    , 很好, 谢谢 plp626 的测试代码, thx!
作者: cjiabing    时间: 2012-6-8 15:51

本帖最后由 cjiabing 于 2012-6-8 16:05 编辑

十分不错,通俗易懂!~
来个演示!~
  1. @echo off
  2. :Start
  3. cls
  4. echo;
  5. echo;十一月的肖邦 - 周杰伦     【播放】[点击开始播放]
  6. echo;
  7. call :Mouse
  8. for /l %%a in (28,1,31) do if "%x%,%y%"=="%%a,1" goto Player
  9. pause&exit
  10. :Player
  11. echo 正在联网播放……
  12. start /min "" wmplayer.exe "http://news.bjsjs.gov.cn/jxbbs/images/upload/2005/11/25/100905.mp3"
  13. echo;
  14. echo 【停止】[点击停止播放]
  15. call :Mouse
  16. for /l %%a in (3,1,5) do if "%x%,%y%"=="%%a,6" taskkill /f /t /im wmplayer.exe&goto Start
  17. taskkill /f /t /im wmplayer.exe
  18. exit
  19. :Mouse
  20. mouse
  21. set /a ret=%errorlevel%
  22. set /a x="%ret%>>16"
  23. set /a y="%ret%&65535"
  24. echo;
  25. echo 单击时鼠标位于坐标:%x%,%y%
  26. echo;
  27. goto :eof
复制代码

作者: garyng    时间: 2012-6-8 15:58

回复 16# plp626


    如果用汇编的话
似乎会更小
可惜 我不太会处理汇编的命令行参数。。
作者: 喃喃努努    时间: 2012-6-8 16:02

回复 15# plp626


    还是没搞好,总觉得差点东西。
作者: 女孩不哭    时间: 2012-6-8 16:15

十分不错,通俗易懂!~
来个演示!~
cjiabing 发表于 2012-6-8 15:51



    感谢~~~
作者: plp626    时间: 2012-6-8 16:17

回复 19# garyng


我很感兴趣用32位汇编怎么写,
会用 x86的16位汇编 写; 32位的不会;

devcpp提供as.exe ld.exe编译汇编代码,  我不会用, 希望继续交流。。。
作者: 女孩不哭    时间: 2012-6-8 16:24

其实不用那个, 直接用 MASM32 来编译比较好, 这是宏汇编, 宏汇编要简单很多.
比如 masm32, RadAsm
可惜, 汇编我也不太会...
正在学....

作者: 女孩不哭    时间: 2012-6-8 16:26

回复 22# plp626


    如果你安装了 VC++6.0的话, 可以直接用 CL.exe 生成汇编, 可以看下,
命令为 : cl -Fa mouse.c
代码不长.
作者: plp626    时间: 2012-6-8 16:58

这个mouse.exe 退出后改变了cmd光标样式, 不知何故。。。
作者: plp626    时间: 2012-6-8 16:58

这个mouse.exe 退出后改变了cmd光标样式, 不知何故。。。
作者: 女孩不哭    时间: 2012-6-8 17:21

回复 25# plp626


    什么样式? 我在程序退出后设置为了原来的样式, 难道.... plp626 截张图看看,
作者: plp626    时间: 2012-6-8 17:39

是光标大小中选择“大”的模式, 我点击属性又改回“小”了

再次运行那个现象又消失了;

另外还有一个奇怪的现象, 我偶尔一次运行mouse.exe 没有相应, 我多是运行又推出, 忽然又相应了;

有时间好还研究下源代码;学学api;
----------------

这个mouse可以增强bat很多用途;

顶下。。。
作者: 女孩不哭    时间: 2012-6-8 18:09

回复 28# plp626


    程序在运行时, 会保存先前的光标设置, 程序结束后会还原运行该程序之前的相关设置, 但是, 如果你是在 mouse.exe 运行的过程中修改了设置, 那么, 在mouse.exe退出后就会把光标还原为最先的样式, 所以导致修改设置失败.
   对于无响应那个,,我不是很清楚, 可能是我没有错误检测, 我修改了下源代码, 简单地检测了错误....
msdn 上说对于菜单消息, 应该交给系统处理, 所以 我没有处理菜单消息....但如果频繁地调用光标状态检测, 又可能开销太大.
修改后的程序和源代码都马上上传

作者: garyng    时间: 2012-6-8 21:54

回复 22# plp626


    用Masm32来编呗 include和includelib 来假如几个文件头 win32api就能用了阿

Ps:再加上看罗云彬的«windows 环境下的32汇编语言程序设计»
作者: garyng    时间: 2012-6-8 21:58

回复 28# plp626


    也许楼主的程序在用SetConsoleMode 之前没用GetConsoleMode 保存原来的设置
在退出前没把旧设置设置回去
作者: 女孩不哭    时间: 2012-6-8 23:25

回复 31# garyng


    既先调用了 GetConsoleMode, 退出之前也调用了 SetConsoleMode...
鼠标信息也是事先保存好了的.
作者: garyng    时间: 2012-6-9 10:17

回复 32# 女孩不哭


    哦 那就很难说 了 plp626大大贴个截图呗
作者: defanive    时间: 2012-6-9 11:27

回复 16# plp626
我的博客里面有写鼠标API的相关文章,自己写一个都可以了。。
最近都没时间搞编程,其实源码在电脑上,重新编译一次就可以到5KB了
不过嘛,人懒了。。混论坛进入只看帖不回帖状态。。
作者: neorobin    时间: 2012-6-9 11:41

这里有一段获取鼠标点击坐标的 debug 代码

Index » Windows CMD Shell » Using Mouse in a Batch Script
http://ss64.org/viewtopic.php?id=741
  1. @echo off
  2. REM BX 按键,  0001: 左键; 0002: 右键.
  3. REM 坐标: 字符界面区域左上角为 (0列, 0行) (横向分列, 纵向分行)
  4. REM CX 点击的列坐标
  5. REM DX 点击的行坐标
  6. >~Zmouse (
  7.   echo e100 B8 1 0'3'DB CD'3'B0 3'C'CD'3'B DB't'FA 91 D3 EA D3 E8 91 C3
  8.   echo g116
  9.   echo q
  10. )
  11. <~Zmouse Debug
  12. pause
  13. exit
复制代码

作者: sl543001    时间: 2014-3-31 10:26

顶一个,收下了
作者: zhangzsky    时间: 2018-4-23 20:08

终于找到出处了,话说amos又是哪里来的?




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