距离上一篇如何实现本地唤醒指定QQ群的文章发表已经过去将近一天了,今天要做的就是在上一篇的基础上实现文章标题中的功能。
我先是大费周章的用了一种笨且不稳定的方法实现将图片载入剪贴板:通过命令行调用Windows下的画图程序打开指定的图片文件,然后用tasklist与find指令配合来检测是否打开了画图程序,通过VBS进行全选、复制的按键操作,最后指定的图片文件的图像数据就载入剪贴板了。
再通过上一篇的方法打开指定QQ群,调用VBS进行粘贴、发送的按键操作,指定的图片就发送到指定的QQ群里了。
先把这个笨方法的batch代码放这了:
@echo off
title 图像数据提取+QQ群唤醒+消息发送
::填写要唤醒QQ群的param
set param=7b2267726f757055696e223a3935343435313339352c2274696d655374616d70223a313632393534353030372c22617574684b6579223a225a65335154747165323658506c486c546b3542424c476b494676485272646a746d7849713932516c63786d744f565a6431767951454d67317468636c3262506c222c2261757468223a22227d
::【图像数据提取功能相关变量】
::所取图像数据的图像文件位置
::set /p image_path=图像文件位置:
set image_path=%1
::【图像数据提取VBS脚本相关变量】
::图像数据提取VBS脚本名称与后缀
::指定要激活的画图窗口标题名
::图像数据提取VBS脚本启动后的延时
set mspaint_vbs_file=mspaint.vbs
set title_name=%~nx1
set mspaint_delay=100
::【QQ发送消息操作VBS脚本相关变量】
::QQ发送消息VBS脚本名称与后缀
::QQ发送消息VBS脚本启动后的延时
set send_QQ_vbs_file=send_QQ.vbs
set send_QQ_delay=500
::【创建图像数据提取VBS按键操作脚本】
::画图操作:全选图像,复制,关闭聚焦窗口
echo On Error Resume Next>%~dp0%mspaint_vbs_file%
echo Dim wsh,ye >>%~dp0%mspaint_vbs_file%
echo set wsh=createobject("wscript.shell") >>%~dp0%mspaint_vbs_file%
echo wsh.appactivate "%title_name% - 画图" '激活指定画图窗口标题名>>%~dp0%mspaint_vbs_file%
echo wsh.sendkeys "{enter}">>%~dp0%mspaint_vbs_file%
echo WScript.Sleep %mspaint_delay% '延时%mspaint_delay%毫秒(单位毫秒)>>%~dp0%mspaint_vbs_file%
echo wsh.SendKeys "^a" '全选>>%~dp0%mspaint_vbs_file%
echo wsh.SendKeys "^c" '复制>>%~dp0%mspaint_vbs_file%
echo wsh.SendKeys "%%{F4}" '关闭>>%~dp0%mspaint_vbs_file%
echo wscript.quit>>%~dp0%mspaint_vbs_file%
::【创建QQ发送消息操作VBS按键操作脚本】
::QQ发送操作:粘贴,Ctrl+回车发送
echo On Error Resume Next>%~dp0%send_QQ_vbs_file%
echo Dim wsh,ye >>%~dp0%send_QQ_vbs_file%
echo set wsh=createobject("wscript.shell") >>%~dp0%send_QQ_vbs_file%
echo WScript.Sleep %send_QQ_delay% '延时%send_QQ_delay%毫秒(单位毫秒)>>%~dp0%send_QQ_vbs_file%
echo wsh.SendKeys "^v" '粘贴>>%~dp0%send_QQ_vbs_file%
echo wsh.SendKeys "%%s" 'Ctrl+回车发送>>%~dp0%send_QQ_vbs_file%
echo wscript.quit>>%~dp0%send_QQ_vbs_file%
::使用画图打开图像文件
start %windir%\system32\mspaint "%image_path%"
:detection
tasklist /FI "WINDOWTITLE eq %title_name% - 画图"|find /i "PID" &&echo %title_name% - 画图窗口存在&&goto dap||echo %title_name% - 画图窗口不存在,正在循环检测&goto detection
:dap
::调用按键操作脚本取图像数据
call %~dp0%mspaint_vbs_file%
del %~dp0%mspaint_vbs_file%
::唤醒指定QQ群
start tencent://groupwpa/?subcmd=all^¶m=%param%
::调用按键操作脚本粘贴发送消息
call %~dp0%send_QQ_vbs_file%
del %~dp0%send_QQ_vbs_file%
exit今天心血来潮去了批处理之家逛了一下,想看看有没有更稳定的办法,最后在批处理之家的在线第三方库中找到了我最需要的东西:

我挑了一个copyimg用了一下相当的好使,而且用这个第三方运行时不会弹出命令提示符黑窗口,还支持gif,这真是太赞了!(多年以来一直没有注册批处理之家的账号,但今天果断注册,因为这的确是一个学习bat、vbs的好地方,里面的大佬又多说话又好听)
体验完后,随即更新了代码(少了不少):
@echo off
title 图像数据提取+QQ群唤醒+消息发送
::填写要唤醒QQ群的param
set param=7b2267726f757055696e223a3935343435313339352c2274696d655374616d70223a313632393534353030372c22617574684b6579223a225a65335154747165323658506c486c546b3542424c476b494676485272646a746d7849713932516c63786d744f565a6431767951454d67317468636c3262506c222c2261757468223a22227d
::【QQ发送消息操作VBS脚本相关变量】
::QQ发送消息VBS脚本名称与后缀
::QQ发送消息VBS脚本启动后的延时
set send_QQ_vbs_file=send_QQ.vbs
set send_QQ_delay=500
::【创建QQ发送消息操作VBS按键操作脚本】
::QQ发送操作:粘贴,Ctrl+回车发送
echo On Error Resume Next>%~dp0%send_QQ_vbs_file%
echo Dim wsh,ye >>%~dp0%send_QQ_vbs_file%
echo set wsh=createobject("wscript.shell") >>%~dp0%send_QQ_vbs_file%
echo WScript.Sleep %send_QQ_delay% '延时%send_QQ_delay%毫秒(单位毫秒)>>%~dp0%send_QQ_vbs_file%
echo wsh.SendKeys "^v" '粘贴>>%~dp0%send_QQ_vbs_file%
echo wsh.SendKeys "%%s" 'Ctrl+回车发送>>%~dp0%send_QQ_vbs_file%
echo wscript.quit>>%~dp0%send_QQ_vbs_file%
::调用第三方copyimg将图像文件载入粘贴板
%~dp0copyimg %1
::唤醒指定QQ群
start tencent://groupwpa/?subcmd=all^¶m=%param%
::调用按键操作脚本粘贴发送消息
call %~dp0%send_QQ_vbs_file%
del %~dp0%send_QQ_vbs_file%
exit使用时将要发送的图片拖到创建好的批处理文件(比如我创建了一个批处理叫send_data.bat,就把图片拖到send_data.bat上面)上便可运行(或者命令行下输入:send_data.bat D:\a.png,就把D盘根目录下的a.png发送出去了)。第三方的调用路径我设置的是批处理文件所在的目录,所以使用时需要把第三方与批处理文件放在同一个目录下。
当然这个还是有些不稳定的地方存在,比如唤醒QQ群后的粘贴、发送操作,也懒得找新办法了,就像这样吧。
批处理之家:http://bbs.bathome.net/index.php
批处理之家在线第三方库:http://bcn.bathome.net/s/tool/index.html