分享

不上QQ 使用QQ截图工具~ 测试OK版!常来复制的高手免进!

 赫堇轩 2014-09-13

 -很喜欢QQ自带的截图功能、所以希望不上QQ也可以使用、想抽离出来……

-在网上海搜一圈、发现有个方法很普遍:

QQ的截图工具功能强大、使用方便,美中不足的是只有启动QQ以后才能使用,难道截图时还要先打开QQ吗?可在很多场合上网很不方便,如果能将QQ的截图功能提取出来就可以了。

  第一步:打开QQ的安装目录,如“D:\Program Files\Tencent\QQ”,找到QQ的安装目录下的CameraDll.dll文件,这个文件就是与QQ截图有关的文件。将其复制到“D:\QQ截图”文件夹下(或复制到任意位置,但以下注册表代码部分必须与CameraDll.dll文件路径对应)。

  第二步:打开记事本,输入以下内容:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Folder\shell\QQ]

@="QQ截图---Less零生活"

[HKEY_CLASSES_ROOT\Folder\shell\QQ\command]

@="Rundll32.exe D:\\QQ截图\\CameraDll.dll,CameraSubArea"

  然后将其另存为“QQ截图.reg”。

  第三步:双击运行“QQ截图.reg”,将其导入注册表。以后只需右键单击任务栏上的“开始”按钮,在出现的右键菜单中选择“QQ截图”命令,就可以调出QQ截图工具了。

不上QQ正常使用QQ截图工具~支持快捷键【测试成功版】【 - 大圣 - 狮魂岛╱◥█◣出凡入胜Blog

-我按照以上方法做了之后、先后弹出了两个错误对话框:

点开始右键--弹出右健菜单--出现QQ截图--点QQ截图出现:

对话框1 没有找到QQBaseclassInDll.dll,因为这个应用程序未能启动,重新安装应用程序可能会修复此问题。下面有个确定。点确定又出现对话框2

对话框2 加载D:\QQ截图\cameraDll.dll时出错,找不到指定的模块。点确定,对话框消失。

-接着我把QQBaseclassInDll.dll复制到QQ截图文件夹内、右键-开始-还是弹错误“少了个QQhelp.dll类似的文件”、彻底崩溃……

-我想可能是因为我使用的QQ版本的原因、

-后来在网上看到的一篇文章证明我的想法是正确的、

-我现在使用的QQ版本是QQ2009正式版、cameraDll.dll是8.0版本、

-于是去网上下载了一个旧版的QQ2006、提取cameraDll.dll 、【旧版cameraDll.dll下载

-替换掉原来的8.0文件、再次试验>成功!唯一的缺点是不支持ctrl+alt+A快捷键- -

-----------------------------------------------------------------------------------------------------------------

不过现在有个方法可以建立一个快捷键

1.在桌面的任意位置右击-选择“新建→快捷方式”,

2.打开“创建快捷方式”窗口,在其文本框内输入

【Rundll32.exe D:\QQ截图\CameraDll.dll,CameraSubArea】(输入括号内的内容,注意路径!)

单击“下一步”,将该快捷方式的名称命名为“QQ截图”,再单击“完成”按钮。

注意: CameraSubArea是区分大小写的

  

右击“QQ截图”快捷方式,选择“属性”,打开“QQ截图属性”窗口,切换到“快捷方式”选项卡,这时按下一组快捷键,如“Ctrl+Shift+S(或任意字母,建议不要使用A,否则会干扰你现有版本的QQ,导致QQ上的截图工具不能通过快捷键调出来)”,最后单击“确定”。

试试看,按下“Ctrl+Shift+S”快捷键,QQ截图工具是不是已经调出来了?

-现在问题是 新建的快捷方式必须在桌面上才有效,所以继续思考中……看能不能放到其他地方去。。

更新:

[现在这个问题已经解决了:原来快捷方式只有在"桌面"或者"开始"菜单上的时候才可以指定有效的快捷键,并用快捷键来调用程序,所以我将快捷方式放在了【C:\Documents and Settings\Administrator\「开始」菜单】下,注意:一定要注销或者重新启动一下电脑才会生效!之后便可以使用快捷键ctrl+shift+s调出截图程序啦,同时桌面上也不会有难看的快捷方式图标~]

-我有这样一个疑问:为什么新版的QQ就不可以使用cameraDll.dll 文件了呢?

-以我的智商还解释不了、不过网上有个高手解释了一下这个问题、

------------------------------------------------------------------------------------------------------------------------------

以下摘自http://blog.csdn.net/nightxie/archive/2008/08/18/2790103.aspx

既然要弄CameraDll.dll那就从头弄起。看看CameraSubArea这个函数。用Depends看了看这个函数的地址0x10B0。OK,去看看那,于是看到了这里的东西:

601311BB |. 8BC6          mov     eax, esi

601311BD |. 5E            pop     esi

601311BE |. 64:890D 00000>mov     dword ptr fs:[0], ecx

601311C5 |. C9            leave

601311C6 \. C2 0400       retn    4

好,看情况 DWORD CameraSubArea(DWORD) 这样就可以了。

于是我写了Demo:

#include <stdio.h>

#include <windows.h>

typedef int (__stdcall *CAMERASUBAREA)(int a);

void main()

{

       Sleep(1000);

       HMODULE hHandle = LoadLibrary("CameraDll.dll");

       if (NULL == hHandle)

       {

              MessageBox(NULL,"error","LoadLibrary Failed",MB_OK);

              return;

       }

       CAMERASUBAREA pCameraSubArea = (CAMERASUBAREA)GetProcAddress(hHandle,"CameraSubArea");

       if (NULL == pCameraSubArea)

       {

              MessageBox(NULL,"error","LoadLibrary Failed",MB_OK);

              FreeLibrary(hHandle);

              return;

       }

       pCameraSubArea(0);

       FreeLibrary(hHandle);

}

     运行以后,系统提示需要QQBaseClassInDll.dll。好吧,在QQ里拷贝一份QQBaseClassInDll.dll进去。再运行,有提示需要QQHelperDll.dll和BasicCtrlDll.dll,继续加入他们。

可是,运行后还是出现问题。Debug一下发现[eax + 4D]这句,而eax的值为0。也就是说要取0x04D的值,而我们知道4GB的内存中0到0x1000都是空指针区,自然会出错。

于是NOP掉这个Call。运行程序后发现截图已经没问题了,但是截图中的工具栏却还是一个都不能用。即然这样,那就继续Debug一下。发现了QQHelperDll.dll中的问题。和前面的问题一样,都是访问了空指针,NOP。而后面还有两处这样的问题,用NOP和JMP的方法都成功的解决了。

再次调用程序,OK已经恢复正常了。其实程序一开始无法使用都是因为他调用了BasicCtrlDll.dll中的GetCurrentUserData这个函数,在传参数出了问题。

最后的工作就是写一个完整的程序了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多