vc 窗体隐藏的情况下不能hook键盘

我用的是VS2010里面的VC,我写了一个DLL,代码如下://cpp文件:#include<Windows.h>HWNDDll_hWindow=NULL;LRESULT... 我用的是VS2010里面的VC,我写了一个DLL,代码如下:
//cpp文件:
#include<Windows.h>
HWND Dll_hWindow=NULL;
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case VK_F1:
if(!(lParam&0x40000000))
{
ShowWindow(Dll_hWindow,SW_HIDE);
}
break;
case VK_F2:
if(!(lParam&0x40000000))
{
ShowWindow(Dll_hWindow,SW_SHOW);
}
break;
}
return 0;
}
HHOOK SetHook(HWND _hWindow)
{
Dll_hWindow=_hWindow;
return SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook.dll"),0);
}
//def文件:
LIBRARY Hook
EXPORTS
SetHook
使用DLL来监测键盘按键,如果按F1,则隐藏窗口,如果按F2,则显示窗口。
程序的cpp文件:
#include<Windows.h>
HHOOK hHook=NULL;
LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
DestroyWindow(hwnd);
PostQuitMessage(0);
UnhookWindowsHookEx(hHook);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS appclass;
appclass.cbClsExtra =0;
appclass.cbWndExtra =0;
appclass.hbrBackground =HBRUSH(COLOR_WINDOW);
appclass.hCursor =LoadCursor(NULL,MAKEINTRESOURCE(IDC_APPSTARTING));
appclass.hIcon =LoadIcon(NULL,MAKEINTRESOURCE(IDI_APPLICATION));
appclass.hInstance =hInstance;
appclass.lpfnWndProc =WindowProc;
appclass.lpszClassName ="app";
appclass.lpszMenuName =NULL;
appclass.style =CS_HREDRAW | CS_VREDRAW;
RegisterClass(&appclass);
RECT rDesktop;
GetWindowRect(GetDesktopWindow(),&rDesktop);
int x=rDesktop.right /2-250,y=rDesktop.bottom /2-150;
HWND hWindow=CreateWindow("app","旭迅一键隐藏",WS_MINIMIZEBOX | WS_SYSMENU | WS_VISIBLE,x,y,500,300,NULL,NULL,hInstance,NULL);
UpdateWindow(hWindow);
typedef HHOOK(*_SetHook)(HWND);
_SetHook SetHook=_SetHook(GetProcAddress(LoadLibrary("Hook.dll"),"SetHook"));
hHook=SetHook(hWindow);
MSG mWindow;
while(GetMessage(&mWindow,NULL,0,0))
{
TranslateMessage(&mWindow);
DispatchMessage(&mWindow);
}
}
问题是我按了F1能隐藏窗口,但按F2就不能显示窗口了,请问这是怎么回事?
展开
 我来答
百度网友32cdd9945
2012-09-15 · TA获得超过1374个赞
知道大有可为答主
回答量:2429
采纳率:100%
帮助的人:1933万
展开全部
看样子 这个dll是会被系统在另外的进程空间加载的。重新加载的时候 HWND Dll_hWindow 会被重新制为NULL了。 所以你在 KeyboardProc 里面重新 Findwindow 或者其他办法得到窗体hwnd才行。 或者你用其他进程共享的办法共享 hwnd出来。

其实如果你只是注册热键的话,可以考虑使用 RegisterHotKey 这个api。你这种办法不但可能和其他热键冲突,也会影响系统性能。
想象元素
2012-10-07 · 超过39用户采纳过TA的回答
知道小有建树答主
回答量:215
采纳率:0%
帮助的人:67.2万
展开全部
使用全局钩子
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式