提取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 "D:\MyDoc\QQ Files\116454607\CustomFaceRecv.db"
解压出来的位置:D:\MyDoc\QQ Files\116454607\Extracted\

原文地址:http://www.shamuma.net/read.php?18
编程相关 | 评论(46) | 引用(0) | 阅读(1174)
yoyo Email
2010/02/10 09:22
机票 Email Homepage
2009/04/02 02:42
友情链接:国际机票
asdf Email
2009/03/31 09:11
机票 Email Homepage
2009/03/28 03:52
哈哈!挺好机票
机票 Email Homepage
2009/03/20 00:29
友情链接:国际机票
机票 Email Homepage
2009/03/16 00:17
友情链接:国际机票
机票 Email Homepage
2009/03/07 11:06
友情链接:国际机票
机票 Email Homepage
2009/03/04 11:45
友情链接:国际机票
机票 Email Homepage
2009/03/01 10:39
顶了,呵呵.打折机票
机票 Email Homepage
2009/02/27 01:33
友情链接:国际机票
分页: 1/5 第一页 [1] [2] [3] [4] [5] 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]