我在自己的程序中调用外部程序windows图片传真查看器打开文件。但是我想把查看器下面的工具栏屏蔽掉我的程序里启动钩子的代码是
CWnd* pWnd=FindWindow(TEXT("ShImgVw:CPreviewWnd"),NULL);
if(pWnd==NULL) return;
DWORD dwThreadId;
DWORD dwProcessId;
dwThreadId=GetWindowThreadProcessId(pWnd->GetSafeHwnd(),&dwProcessId);
if(m_hook.StartHook(dwThreadId))
{
MessageBox("钩子启动成功!");
}
m_hook.StopHook(); dll里的代码是:
BOOL CPicHook::StartHook(DWORD dwThreadId)
{
BOOL bResult=FALSE;
if(dwThreadId!=0)
{
g_dwThreadId=GetCurrentThreadId();
glhHook=SetWindowsHookEx(WH_MOUSE,PicProc,glhInstance,dwThreadId);
}
if(glhHook!=NULL)
bResult=TRUE;
return bResult;
}这个回调函数PicProc我应该怎么写阿?还是这个地方是用WH_MOUSE还是用其他的钩子,我是这样认为的:因为这个文件是已经用查看器打开了,钩子才能启动成功。那么这里屏蔽工具栏不可能在其创建的时候取消WM_CREATE,所以我是想用户在点击工具栏的时候拦截鼠标消息。但是我写的picproc拦截了所有的鼠标消息,我试图想把判断一下鼠标消息的类名,但是都不成功,我不知道怎么弄了?垦请高手指点一下!!非常感谢!
CWnd* pWnd=FindWindow(TEXT("ShImgVw:CPreviewWnd"),NULL);
if(pWnd==NULL) return;
DWORD dwThreadId;
DWORD dwProcessId;
dwThreadId=GetWindowThreadProcessId(pWnd->GetSafeHwnd(),&dwProcessId);
if(m_hook.StartHook(dwThreadId))
{
MessageBox("钩子启动成功!");
}
m_hook.StopHook(); dll里的代码是:
BOOL CPicHook::StartHook(DWORD dwThreadId)
{
BOOL bResult=FALSE;
if(dwThreadId!=0)
{
g_dwThreadId=GetCurrentThreadId();
glhHook=SetWindowsHookEx(WH_MOUSE,PicProc,glhInstance,dwThreadId);
}
if(glhHook!=NULL)
bResult=TRUE;
return bResult;
}这个回调函数PicProc我应该怎么写阿?还是这个地方是用WH_MOUSE还是用其他的钩子,我是这样认为的:因为这个文件是已经用查看器打开了,钩子才能启动成功。那么这里屏蔽工具栏不可能在其创建的时候取消WM_CREATE,所以我是想用户在点击工具栏的时候拦截鼠标消息。但是我写的picproc拦截了所有的鼠标消息,我试图想把判断一下鼠标消息的类名,但是都不成功,我不知道怎么弄了?垦请高手指点一下!!非常感谢!
解决方案 »
- 线程函数执行完毕后,线程(空间)会不会自动释放.
- 高手有没有碰到过这个编译错误,代码D2029
- 利用OpenGL实现三维绘图的问题,帮忙看一下,弄了一天了
- 用VC编写的WEB浏览器怎样设置代理服务器?
- ★★★★使用了WM_KEYBOARD HOOK后,不知道其中KeyboardProc()中的参数意义??★★★★
- 行行好!为什么在基于对话框的MFC程序中用SOCKET,bind 用不起!在线等!
- 谁能帮助我介绍一本学习VC++的好书
- 一个SERVER和一个CLIENT的需求。那位高手可以实现?急急!!!!分不够可以再加。
- 我想用一台电视机来显示我电脑整个屏幕上一个窗口的内容。
- 在FP下预览一切OK,但是在IE下去出现问题,高手啊,你在那里!!
- 关于线程的命令发送问题
- win7下如何编程使程序以administrator用户权限运行? 急!
LRESULT WINAPI PicProc(int nCode,WPARAM wparam,LPARAM lparam)
{
PCWPSTRUCT pcs=NULL;
pcs=(PCWPSTRUCT)lparam;
if (pcs&&pcs->hwnd!=NULL)
{
TCHAR szClass[256];
GetClassName(pcs->hwnd,szClass,255);
if(wparam==WM_COMMAND)
{
AfxMessageBox("获取消息成功!");
}
}
return CallNextHookEx(glhHook,nCode,wparam,lparam);//继续传递消息。
}
那个pcs->hwnd里的句柄总是无法获得查看器的句柄,所以得不到ShImgVw:CPreviewWnd这个类名。
这个钩子设为WM_MOUSE类型的对吗?那个消息类型是WM_COMMAND吗?
我将钩子类型改为了WH_CALLWNDPROC,我知道了只有这个类型的钩子回调函数里的数据结构才能PCWPSTRUCT
glhHook=SetWindowsHookEx(WH_CALLWNDPROC,PicProc,glhInstance,dwThreadId);
回调函数我改成了
LRESULT WINAPI PicProc(int nCode,WPARAM wparam,LPARAM lparam)
{
PCWPSTRUCT pt=NULL;
pt=(PCWPSTRUCT)lparam;
if(pt&&pt->hwnd!=NULL)
{
if(pt->message==WM_COMMAND&&pt->wParam==ID_FILE_SAVE_AS)
{
AfxMessageBox("success!");
}
}
return CallNextHookEx(glhHook,nCode,wparam,lparam);//继续传递消息。
}我不知道PicProc(int nCode,WPARAM wparam,LPARAM lparam)里的wparam和lparam是消息的哪些参数?我不需要句柄,我只需要获得ToolbarWindow32里的一些菜单项,拦截这些菜单项的消息。我这样设对不对啊?有没有人可以告诉我啊???