sanmoking 发表于 2009-7-8 23:58:36

本人写的最牛逼的QQdll抓图工具,不服不行

本帖最后由 sanmoking 于 2010-1-19 15:47 编辑

哈哈,应该是咱论坛所有利用QQdll的抓图工具中最牛叉的啦,标题党一下,具体信息看程序简介吧。


本人此次打包的QQ截图工具有以下几点创新:
1、默认情况下所抓到的图片以“当前时间(年月日时分秒12位数字)”为文件名保存为jpg格式到桌面上;貌似不是本人的创新。。
2、不论你是“双击”还是点那个“对号”还是点那个“软盘图标”保存,当然右键菜单上的选项也算,也就是说你使用任何的保存手法都不会影响到剪贴板里的数据,而QQ默认的是会覆盖剪贴板的;
4、你所有的截图动作都会有工具提示,但是已解决某些人的“不管你是否取消都会提示截图成功”的bug,而我这个不会,如果你取消的话,会有正确提示的。
5、拒绝什么所谓的托盘菜单,麻烦,直接双击运行,放到快速启动栏更爽。
6、增加参数启动选项,后面会有详细的说明,这个最强大。
--------------------------------------------------------
--------------------------------------------------------
参数列表(前面是开关,后面是内容):
/s "路径"
/n "#date#num4#abc4#ABC4#pcname#ip#[自定义]"
/d "jpg""bmp""gif""tif""png"
/h
/c
--------------------------------------------------------
--------------------------------------------------------
参数的排列不分先后,但是开关和选项一定要对好,所有开关或者选项之间用空格分割。
——存储路径的开关,后面加空格之后再加路径,路径中间如果有空格的需要用引号抱起来,如果没有这个开关或者给出的路径错误不存在,则默认设置为桌面,另外不用考虑路径最后要不要加“\”,本程序很智能,不会出错(你随便加///\\\/\/\/\都不会出错你试试,但是你路径中间要是有什么?*"<>之类的就会造成路径不存在,而转为默认路径——桌面)。
——文件命名规则的开关,后面加空格之后再加规则,如果开关不开或者规则进行计算后没有数据,则默认为以当前时间(年月日时分秒12位数字)为文件名。
···命名规则如下:
          【#date】——加上这个规则的话,会在文件名中生成当前的12位数字时间。
          【#num6】——加上这个规则的话,会在文件名中生成随机数字串,num后面的部分代表随机数字的位数,
          只能是数字1-16之间,如果是其他的字符的话,则默认生成6位随机数字,有可能出现“000123”的情况但是不会缩减为“123”,
          如果你定义的长度超过16(那的确太长)或者小于1,则默认生成16位。
          【#abc4】——加上这个规则的话,会在文件名中生成随机小写字母串,abc后面的部分代表随机字母的位数,
          只能是数字1-16之间,如果是其他的字符的话,则默认生成6位随机字母,如果你定义的长度超过16(那的确太长)或者小于1,则默认生成16位。
          【#ABC4】——加上这个规则的话,会在文件名中生成随机大写字母串,ABC后面的部分代表随机字母的位数,
          只能是数字1-16之间,如果是其他的字符的话,则默认生成6位随机字母,如果你定义的长度超过16(那的确太长)或者小于1,则默认生成16位。
          【#pcname】——加上这个规则的话,会在文件名中生成你的计算机名称。
          【#usname】——加上这个规则的话,会在文件名中生成你当前登录用户的名称。
          【#ip】——加上这个规则的话,会在文件名中生成你的计算机ip(去掉“.”以免眼花)(例如1921681100)。
          【#ip1】——加上这个规则的话,会在文件名中生成你的计算机@IPAddress1(去掉“.”)(例如1921681100)。
          【#ip2】——加上这个规则的话,会在文件名中生成你的计算机@IPAddress2(去掉“.”)(例如1921681100,如果没有的的话则是0000)。
          【#ip3】——加上这个规则的话,会在文件名中生成你的计算机@IPAddress3(去掉“.”)(例如1921681100)。
          【#ip4】——加上这个规则的话,会在文件名中生成你的计算机@IPAddress4(去掉“.”)(例如1921681100)。
          【#[自定义]】——加上这个规则的话,会在文件名中生成“[”和“]”(必须两个方括号同时存在)之间的内容,当然会将这些字符中的“\/?*|"<>”自动替换成下划线“_”。
···如果你定义的规则不符合上述任意一条的话,这个规则将会被忽略,即便你也用了个#开头。。。
···虽然上述规则能够完全杜绝文件名重复,但是你想要以如下方式排列的话怎么办“你好1”,“你好2”,“你好3”……这个你尽管放心,直接以#[你好]这一个规则就行,因为文件名重复的时候程序会自动排序。
——文件格式的开关,后面加空格之后再加格式,每次只能使用一个(废话),你用双击保存(双击截图区域)和用对号保存(“对号图标”,右键菜单的“复制并退出截图”)的情形适合"jpg""bmp""gif""tif""png"这5种格式任意一个,其实还是从剪贴板复制而来的,但是手动点击保存按钮(那个“软盘”图标,右键菜单的“另存为”)是只能使用前三种,后面两种会被设定为“jpg”格式(因为QQ原版的下拉只有前三种格式),我试过直接在文件名上写好png后缀名,倒是能生成png,也能正常打开,但是我还是有点担心那只是表面现象,实际文件或许还是jpg也说不定,所以索性三种就三种吧,一般人也没那么多事跑去点个按钮再保存,直接双击多好。
——程序帮助说明的开关,后面不需要再加任何参数,只要有这个开关存在,就会在桌面上生成本说明文件,txt格式。
——强制使用剪贴板的开关,后面不需要再加任何参数,只要有这个开关存在,就会屏蔽【几点创新】里的第一条,不再生成图片文件,而是将所抓取的图片放到剪贴板里,并尝试发送到最前端的窗口,类似QQ原版的截图,如果你最前端的窗口支持的话,所抓的图就会粘贴到里面,比如画图,比如word等等。这个模式下,并不会影响其他开关的使用,虽然不会自动创建文件,但是、和这几个开关开关,你如果点击那个保存图标“手动另存为”的话还是能用到的。)另外使用这个模式的时候,截图之前会有相关提示,那会极大地方便你的操作。
--------------------------------------------------------
--------------------------------------------------------
上述所有开关不分前后顺序,如果有重复的开关,则以第一个为准,当然你开关后面的内容要和开关对应好,本程序的参数设置容错性超强,如果你的参数设置出错不能识别的话,也不会影响到程序的运行,它们只是被忽略了而已。
--------------------------------------------------------
--------------------------------------------------------
下面举几个例子吧:


"C:\Documents and Settings\Administrator\桌面\抓图.exe" /s "d:\" /n #[中国]#pcname#num4##abc6#ABC5#date /d jpg
······上面的列子会在d盘根目录生成类似“中国PC_12340649sanmokingmgpgosNCHBV090708220645.jpg”的抓图文件
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /n #ooxx#num4#usname#abc0 /d jpg/s "d:\"
······上面的列子会在d盘根目录生成类似“5970Administratorjiocpclacxevdmdj.jpg”的抓图文件,其中#ooxx被屏蔽#abc0因为abc后边的数量小于1所以自动恢复成默认16,另外/s开关放到后面也不受影响。
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /d png/s "d:\"
······上面的列子会在d盘根目录生成类似“090708220645.png”的抓图文件,因为没有设/n文件名规则开关,默认是当前时间12位数字。
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /d png
······上面的列子会在桌面生成类似“090708220645.png”的抓图文件,因为没有设/n文件名规则开关,默认是当前时间12位数字,没有设/s路径开关,默认是桌面。
"C:\Documents and Settings\Administrator\桌面\抓图.exe"
······上面的列子会在桌面生成类似“090708220645.jpg”的抓图文件,因为没有设/n文件名规则开关,默认是当前时间12位数字,没有设/s路径开关,默认是桌面,没有设/d文件格式开关,默认是jpg。
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /d png/s "d:\" #pcname#num4
······上面的列子会在d盘根目录生成类似“090708220645.png”的抓图文件,因为没有设/n文件名规则开关,默认是当前时间12位数字为名,即便你有乱七八糟的其他参数,程序统统不买账。
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /d png /h /d tif
······上面的列子会在桌面生成类似“090708220645.png”的抓图文件,同时也会在桌面生成“程序说明.txt”文化间,也就是本文件,因为开启了/h开关,另外尽管有两个/d的开关,但是只以第一个为准。
"C:\Documents and Settings\Administrator\桌面\抓图.exe" /s /n #ooxx#num4#usname#num3 /d jpg/s "d:\"
······上面的列子不会生成抓图文件,因为开启了/s开关,但是会将抓到的图保存在剪贴板那种并且尝试将图片发送到最前端的窗口里,但是你在截图的时候使用手动保存(那个软盘图标)的话,会在d盘根目录生成类似“5970Administrator342.jpg”的抓图文件。


最后说明一下,不是说为了一个最牛逼而去写一个抓图软件,抓图软件网上很多,之所以在一个抓图程序上面下这些功夫纯粹只是为了提高本人au3的某些知识才去写一个号称最牛逼的XX软件,如果一开始不是借用抓图这个东西练习这些知识,也有可能本贴主题会变成最牛逼的登录器也说不定啊,不知道各位高手看明白否。

代码见【传送门】

sanmoking 发表于 2009-7-9 01:26:15

本帖最后由 sanmoking 于 2009-7-14 12:23 编辑

可能有人说,没有这么麻烦,不就一个截图工具么,其实像我现在写一个程序只是为了提高自己还不曾涉及到的知识层面,比如这个截图工具里面就涉及到:复杂的启动命令参数分析,多进程模拟多线程操作等等。
其中启动参数的分析和筛选以及容错,是我觉得最精彩的地方,我尽量用最合理最精简的语句去完成分析,另外这次尝试用了一下正则表达,呵呵,那很高难度。。高手不要笑话我,本人纯属自学成才,哈哈。
截图工具网上多的数不清,只是借这个东西学习自己不会的知识而已,高手请飘过吧。
最后说明一下,不是说为了一个最牛逼而去写一个抓图软件,抓图软件网上很多,之所以在一个抓图程序上面下这些功夫纯粹只是为了提高本人au3的某些知识才去写一个号称最牛逼的XX软件,如果一开始不是借用抓图这个东西练习这些知识,也有可能本贴主题会变成最牛逼的登录器也说不定啊,不知道各位高手看明白否。

sanmoking 发表于 2009-7-9 01:36:36

本帖最后由 sanmoking 于 2009-7-9 01:46 编辑

这次程序中多进程的功能仅仅是为解决在手动点击保存按钮的时候修改图片的保存信息用的,有点因噎废食(不知道这成语恰当不),或者说大材小用了。
另外修改了下鸟人的代码,解决没有抓图或者剪贴板里面还存着上次抓的图而这次没有抓图的情况下,照样提示保存成功的bug,如果剪贴板里有图那他保存的就是上次的图片,捎带着解决影响剪贴板原本内容的问题。#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\1.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_LegalCopyright=鸟人
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#Include <Clipboard.au3>
#include <ScreenCapture.au3>
FileInstall("CameraDll.dll", @SystemDir&"\CameraDll.dll",1)
$linshicup = ClipGet()       
_ClipBoard_Open(0)
_ClipBoard_Empty()
_ClipBoard_Close()
DllCall(@SystemDir&'\CameraDll.dll', 'int', 'CameraSubArea', 'hwnd', 0)
_ClipBoard_Open(0)
$hBitmap = _ClipBoard_GetData(2)
$sIn = @DesktopDir & '\' & @MON & @MDAY & @HOUR & @MIN & @SEC & '.jpg'
_ScreenCapture_SaveImage($sIn, $hBitmap)
_ClipBoard_Close()
if $hBitmap <> 0 Then
ToolTip("图片已自动保存至:"&@CRLF&$sIn)
Else
ToolTip("你选择了退出"&@CRLF&"或手动另存了图片")
EndIf
ClipPut($linshicup)
sleep(1000)

sxd 发表于 2009-7-9 05:14:16

程序我就不看了 我是来拜标题的

破帽遮颜 发表于 2009-7-9 05:37:04

程序我就不看了 我是来拜标题的
sxd 发表于 2009-7-9 05:14 http://www.autoitx.com/images/common/back.gif

:face (12): :face (12): :face (12):

番茄 发表于 2009-7-9 12:36:03

不是很有兴趣的说,我是被标题引进来的,标题好像夸张了些。这论坛好多高手做了很多非常好的软件都没这么夸张。

songqi_z 发表于 2009-7-11 22:20:21

这么夸张。

119110 发表于 2009-7-13 12:53:34

:face (22):

luke 发表于 2009-7-14 09:28:59

比较牛!:face (37):

星雨朝霞 发表于 2009-7-16 18:38:14

程序我就不看了 我是来拜标题的

≈※爖※≈ 发表于 2009-7-17 15:02:06

飘过~~~~~~~~

释迦牟尼 发表于 2009-8-4 21:43:37

程序我就不看了 我是来拜标题的

stevenol 发表于 2009-8-5 11:31:20

很好,值得学习

songtao 发表于 2009-8-5 23:26:21

我自学成不了才, 拜师拜师了,

xinhepc 发表于 2009-8-31 03:11:31

我是来看热闹的
页: [1] 2 3 4 5 6 7
查看完整版本: 本人写的最牛逼的QQdll抓图工具,不服不行