小弟初学C++,看孙鑫的教程到hook部分时候,仿照例子做了一个,实现的功能就是全局按F12恢复窗口,其他键最小化窗口。现在问题是 ShowWindow 好像是在窗口最小化的时候没效果一样,但MessageBox一直有效果,我怀疑是g_hWnd为空NULL了,所以没效果,代码如下,大家帮帮忙,多谢。调用这个DLL的项目是个对话框项目。#include <windows.h>
#include <stdio.h>HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F12==wParam)
{
ShowWindow(g_hWnd,SW_RESTORE);
}
else
{
ShowWindow(g_hWnd,SW_MINIMIZE);
}
UpdateWindow(g_hWnd);
return 1;
}void SetHook(HWND hWnd)
{
g_hWnd=hWnd;
g_hKeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0);
}
#include <stdio.h>HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(VK_F12==wParam)
{
ShowWindow(g_hWnd,SW_RESTORE);
}
else
{
ShowWindow(g_hWnd,SW_MINIMIZE);
}
UpdateWindow(g_hWnd);
return 1;
}void SetHook(HWND hWnd)
{
g_hWnd=hWnd;
g_hKeyBoard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hookdll"),0);
}
解决方案 »
- 如何判断D:\123文件夹是否存在?
- install shiled 编码做的卸载程序与控制面板里的添加删除程序功能一样吗?
- 怎样透明图片覆盖的实现 c++ win32 ?
- 在Windows下怎样查看程序所占资源?
- 怎么样使自写的VC控件显示在控件工具栏里?在做界面时可以像使用其它资源如editbox,button资源一样
- #####windows xp下CStatic的透明问题(windows2000下正常)#####急急!!!!
- 求助:Iphlpapi在Win98下的问题
- 两个线程共用一个CList,一个加一个取,需要用互斥信号吗?
- C++.net 高手看过来,这里有一个工程一个环节招标!
- 能介绍一个可监视API调用的东东,what and where?
- VC中有没有像VCL一样的拉框界面
- 紧急求救!两个库出现冲突的问题!
#pragma data_seg("HOOKDLLSHARE")
HHOOK g_hKeyBoard;
HWND g_hWnd=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:HOOKDLLSHARE,RWS")在def文件中添加
SECTIONS
HOOKDLLSHARE Read Write SharedDLL的共享变量要放在共享数据段中。因为DLL被加载到不同进程的地址空间里,在执行SetHook的进程里g_hWnd有值,在其他进程里为NULL。