| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 943 人关注过本帖
标题:[求助]QQ截图问题
只看楼主 加入收藏
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
 问题点数:0 回复次数:6 
[求助]QQ截图问题

我想问下,象QQ一样的屏幕截图程序需要利用钩子吗?

因为如果不用的话,那么鼠标点击其他窗口就不会有那种截图的效果啊,所以用WH_MOUSE可以吗?

我本来是这样想的,在一个BUTTON控件上添加消息响应,在那个函数里安装一个钩子(对系统鼠标消息都先调用它),然后鼠标消息监控,当鼠标点击以后得到他的坐标,在它UP的时候得到第2个坐标,当双击那快矩形的里面时,把这块矩形的图形COPY到自己的类中去,并解除钩子;或则按EXE时(VK_ESCAPE)时,也解除钩子。

这样是对的吗?

HHOOK hhk_mouse,hhk_keyboard;
hhk_mouse=SetWindowsHookEx(WH_MOUSE,CutBitmapFromDeskTop,AfxGetApp().m_hInstance,0);
hhk_keyboard=SetWindowsHookEx(WH_KEYBOARD,CheckEscape,AfxGetApp().m_hInstance,0);
LRESULT CALLBACK CutBitmapFromDeskTop(int nCode,WPARAM wParam,LPARAM lParam)
{
static CPoint pt_start=0;
static CPoint pt_end=0;
if(wParam==WM_LBUTTONDOWN)pt_start=((MOUSEHOOKSTRUCT*)lParam)->pt;
if(wParam==WM_LBUTTONDOWN)pt_end=((MOUSEHOOKSTRUCT*)lParam)->pt;
::gobal_rc=CRect(pt_start,pt_end); //gobal_rc是一个全局的矩形,存储位置。
if(wParam==WM_LDBUTTONDOWN&&gobal_rc.PtInRect(((MOUSEHOOKSTRUCT*)lParam)->pt))
{
StrectBlt(...); //把区域内的图形拷贝到指定区域
UnhookWindowsHookEx(hhk_mouse);
UnhookWindowsHookEx(hhk_keyboard);
}
return CallNextHookEx(nCode,wParam,lParam);


}
LRESULT CALLBACK CheckEscape(int nCode,WPARAM wParam,LPARAM lParam)
{
if(wParam==VK_ESCAPE)
{
UnhookWindowsHookEx(hhk_mouse);
UnhookWindowsHookEx(hhk_keyboard);
}
return CallNextHookEx(nCode,wParam,lParam);
}


真的需要大家的帮助啊。

如果哪里犯了错误,请告诉我,我也是刚接触这东西的。

[此贴子已经被作者于2006-9-19 23:41:52编辑过]

搜索更多相关主题的帖子: 鼠标 钩子 hhk 坐标 图形 
2006-09-19 20:51
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

朋友们,千万别老是拒绝回答我的问题啊,我碰到问题需要帮助


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-19 23:48
Bekky
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:354
专家分:0
注 册:2006-5-29
收藏
得分:0 
晕,有没有错误,你运行一下就知道了。
看着应该没错

我的编译环境为WinXp + VC 6.0 http://blog..cn/yobo
2006-09-20 09:15
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

你帮着运行一下吧,我一运行老是黑屏,呵呵


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-20 10:02
Bekky
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:354
专家分:0
注 册:2006-5-29
收藏
得分:0 
这么夸张???

我的编译环境为WinXp + VC 6.0 http://blog..cn/yobo
2006-09-20 10:50
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

我记得我写过一个模拟QQ 截图的程序, 是 VB 写的,全部用的 api, 把代码 copy 到 C++ 基本可以运行的了.


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-09-20 13:28
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

真的不骗你:

现在运行之后,没黑屏,但是也没有任何作用,而且VC也会被关闭,我昏。

//.cpp
HHOOK hk_mouse,hk_keyboard;
CRect gobal_rc_source;
CRect gobal_rc;
CDC*pDC;

LRESULT CALLBACK GetMouseMove(int nCode,WPARAM wParam,LPARAM lParam)
{
//Add Code
static CPoint pt_start=0;
static CPoint pt_end=0;

CString str;
str.Format(_T("%d:%d"),((MOUSEHOOKSTRUCT*)lParam)->pt.x,((MOUSEHOOKSTRUCT*)lParam)->pt.y);
TRACE(str);
if(wParam==WM_LBUTTONDOWN)pt_start=((MOUSEHOOKSTRUCT*)lParam)->pt;
if(wParam==WM_LBUTTONUP)pt_end=((MOUSEHOOKSTRUCT*)lParam)->pt;
::gobal_rc_source=CRect(pt_start,pt_end); //gobal_rc是一个全局的矩形,存储位置。
if(wParam==WM_LBUTTONDBLCLK&&gobal_rc.PtInRect(((MOUSEHOOKSTRUCT*)lParam)->pt))
{
HWND hTopWnd=GetDesktopWindow();
CWnd*pTopWnd=CWnd::FromHandle(hTopWnd);
CDC*pTopDc=pTopWnd->GetDC();
pDC->StretchBlt(0,0,gobal_rc.Width(),gobal_rc.Height(),pTopDc,
gobal_rc_source.left,gobal_rc_source.top,
gobal_rc_source.right,gobal_rc_source.bottom,SRCCOPY);//把区域内的图形拷贝到指定区域
UnhookWindowsHookEx(hk_mouse);
UnhookWindowsHookEx(hk_keyboard);
pTopWnd->ReleaseDC(pTopDc);
}
return CallNextHookEx(hk_mouse,nCode,wParam,lParam);
}

LRESULT CALLBACK CheckEscape(int nCode,WPARAM wParam,LPARAM lParam)
{
if(wParam==VK_ESCAPE)
{
UnhookWindowsHookEx(hk_mouse);
UnhookWindowsHookEx(hk_keyboard);
}
return CallNextHookEx(hk_keyboard,nCode,wParam,lParam);
}

。。。

void CSnapDlg::OnBnClickedSnap()
{
// TODO: Add your control notification handler code here
pDC=&m_DC;
GetDlgItem(IDC_MAP)->GetWindowRect(&m_rect);
gobal_rc=m_rect;
hk_mouse=SetWindowsHookEx(WH_MOUSE,GetMouseMove,theApp.m_hInstance,0);
hk_keyboard=SetWindowsHookEx(WH_KEYBOARD,CheckEscape,theApp.m_hInstance,0);
}

//.h
private:
CRect m_rect;
CDC m_DC;


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-09-20 19:10
快速回复:[求助]QQ截图问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.096922 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved