• 提取TM2008接收到的表情

    • TM2008把接收到的自定义表情不是存放在一个文件夹中,而是放在一个文件里面。这个文件的位置在:我的文档\QQ Files\你的QQ号码\CustomFaceRecv.db,当然你自己的自定义表情就存在CustomFace.db里面。
      我们的目的,就是把别人的变成我的,这个.db文件其实是一个复合文档。因此我写了个程序把里面的文件全部提取出来了。

      代码如下:

      #include <stdio.h>
      #include <stdlib.h>
      #include <Windows.h>
      #include <Unknwn.h>

      int wmain(int argc, wchar_t** argv)
      {
      HRESULT hr;
      IStorage* piStorage = NULL;
      IEnumSTATSTG* piEnumSTATSTG = NULL;
      STATSTG statstg;
      IStream* piStream = NULL;
      BYTE bBuffer[512];
      ULONG dwReaded;
      WCHAR wszExtractDir[MAX_PATH];
      WCHAR wszExtractPath[MAX_PATH];
      FILE* pFile = NULL;

      if (argc != 2)
      return 1;

      wcscpy(wszExtractDir, argv[1]);
      *(wcsrchr(wszExtractDir, L'\\')) = 0L;
      wcscat(wszExtractDir, L"\\Extracted");
      CreateDirectoryW(wszExtractDir, NULL);

      wcscat(wszExtractDir, L"\\");

      CoInitialize(NULL);

      hr = StgOpenStorageEx( argv[1],
      STGM_READ | STGM_SHARE_DENY_WRITE,
      STGFMT_ANY,
      0,
      NULL,
      NULL,
      IID_IStorage,
      reinterpret_cast<void**>(&piStorage) );
      if (FAILED(hr))
      goto clean0;

      hr = piStorage->EnumElements(0, NULL, 0, &piEnumSTATSTG);
      if (FAILED(hr))
      goto clean0;

      hr = piEnumSTATSTG->Next(1, &statstg, NULL);
      while (S_OK == hr)
      {
      wprintf(L"%s\n", statstg.pwcsName);
      hr = piStorage->OpenStream( statstg.pwcsName,
      NULL,
      STGM_SHARE_EXCLUSIVE,
      0,
      &piStream );
      if (FAILED(hr))
      continue;

      wcscpy(wszExtractPath, wszExtractDir);
      wcscat(wszExtractPath, statstg.pwcsName);
      pFile = _wfopen(wszExtractPath, L"wb");
      if (pFile)
      {
      hr = piStream->Read(bBuffer, 512, &dwReaded);
      while (S_OK == hr && dwReaded)
      {
      fwrite(bBuffer, 1, dwReaded, pFile);

      hr = piStream->Read(bBuffer, 512, &dwReaded);
      }

      fclose(pFile);
      pFile = NULL;
      }

      piStream->Release();
      piStream = NULL;

      hr = piEnumSTATSTG->Next(1, &statstg, NULL);
      }

      clean0:
      if (piEnumSTATSTG)
      {
      piEnumSTATSTG->Release();
      piEnumSTATSTG = NULL;
      }

      if (piStorage)
      {
      piStorage->Release();
      piStorage = NULL;
      }

      CoUninitialize();
      }



      编译后的文件下载
      qq_db2dir.exe

      使用方法qq_db2dir.exe "D:\MyDoc\QQ Files\116454607\CustomFaceRecv.db"
      解压出来的位置:D:\MyDoc\QQ Files\116454607\Extracted\

      原文地址:http://www.shamuma.net/read.php?18

      标签: 表情, tm2008

    • 已有 5 条评论 »

      开心宝贝

      开心宝贝 December 18th, 2008 at 11:01 am

      #1

      我的QQ表情也存在CustomFaceRecv.db这里了,可还有一些在customface里,在customface这里的表情,聊天时要想发送给对方能看到,而在CustomFaceRecv.db这里的表情聊天时想发送就看不到,请问要怎么才能在聊天想发送时在QQ表情里能看到CustomFaceRecv.db这里的QQ表情,谢谢了。我的QQ是534936707,可以在空间里给我留言,上面是空间地址

      qqqqq

      qqqqq October 30th, 2008 at 01:51 pm

      #2

      SERVER2008下用不了

      samool

      samool February 14th, 2008 at 06:50 am

      #3

      [quote=tankb52]那么请问将CustomFace.db里的文件导出应该怎么做呢?今天不知道清理系统时做了些什么,一下子把TM2008 Preview2的表情全部搞没了,我用你的这个qq_db2dir.exe恢复CustomFaceRecv.db可以但把CustomFaceRecv.db改成CustomFace.db后就不能了。
      请指教![/quote]也只有这个功能啊,我是转载的,你看文章末尾有原文地址,可以联系一下原文作者嘛.

      tankb52

      tankb52 February 11th, 2008 at 10:53 pm

      #4

      我的QQ号是84429538。

      tankb52

      tankb52 February 11th, 2008 at 10:53 pm

      #5

      那么请问将CustomFace.db里的文件导出应该怎么做呢?今天不知道清理系统时做了些什么,一下子把TM2008 Preview2的表情全部搞没了,我用你的这个qq_db2dir.exe恢复CustomFaceRecv.db可以但把CustomFaceRecv.db改成CustomFace.db后就不能了。
      请指教!

      • 发表评论: ( 注意:为了防止广告评论,本站链接已经启用nofollow)
      •   您的名字
      •   E-mail
      •   您的网址(选填)

Powered by Typecho)))   ICP:蜀ICP备05009250号