vc 窗体隐藏的情况下不能hook键盘
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vc 窗体隐藏的情况下不能hook键盘相关的知识,希望对你有一定的参考价值。
我用的是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就不能显示窗口了,请问这是怎么回事?
其实如果你只是注册热键的话,可以考虑使用 RegisterHotKey 这个api。你这种办法不但可能和其他热键冲突,也会影响系统性能。 参考技术A 使用全局钩子
以上是关于vc 窗体隐藏的情况下不能hook键盘的主要内容,如果未能解决你的问题,请参考以下文章
linux进程隐藏 hook readdir函数 挂载覆盖/proc/pid 目