我是用在dll中设置HOOK来解决这个问题的,但编译通过,结果却出不来
dll部分代码:
#include "stdafx.h"#pragma comment(linker,"section:Shared,rws")
#pragma data_seg("Shared")
HHOOK hook;
#pragma data_seg()LRESULT CALLBACK KeyboardProc(int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(code==HC_ACTION && wParam==VK_F12) {
AfxMessageBox("OOOOOOKKKKKK");}
return 1;
}extern "C" _declspec(dllexport) BOOL install()
{
hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,0);
if(hook!=NULL) return TRUE;
else return FALSE;
}extern "C" _declspec(dllexport) BOOL unstall()
{
UnhookWindowsHookEx(hook);
return TRUE;
}
接下来是新建1个Dialog程序,在OnInitDialog里添加如下代码:
HINSTANCE hin=::LoadLibrary("HotKeyHook.dll");
if(hin==NULL) AfxMessageBox("load HotKeyHook.dll failed");
else
{
FARPROC prog=::GetProcAddress(hin,"install");
if(prog!=NULL)(*prog)();
}
为什么结果出不来,高手帮下啊
如果有类似代码的,也可以发给我,邮箱:[email protected]
谢谢!!!
dll部分代码:
#include "stdafx.h"#pragma comment(linker,"section:Shared,rws")
#pragma data_seg("Shared")
HHOOK hook;
#pragma data_seg()LRESULT CALLBACK KeyboardProc(int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
if(code==HC_ACTION && wParam==VK_F12) {
AfxMessageBox("OOOOOOKKKKKK");}
return 1;
}extern "C" _declspec(dllexport) BOOL install()
{
hook=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,0);
if(hook!=NULL) return TRUE;
else return FALSE;
}extern "C" _declspec(dllexport) BOOL unstall()
{
UnhookWindowsHookEx(hook);
return TRUE;
}
接下来是新建1个Dialog程序,在OnInitDialog里添加如下代码:
HINSTANCE hin=::LoadLibrary("HotKeyHook.dll");
if(hin==NULL) AfxMessageBox("load HotKeyHook.dll failed");
else
{
FARPROC prog=::GetProcAddress(hin,"install");
if(prog!=NULL)(*prog)();
}
为什么结果出不来,高手帮下啊
如果有类似代码的,也可以发给我,邮箱:[email protected]
谢谢!!!
#pragma data_seg("shareddata")
HINSTANCE g_hInst = NULL;
HHOOK g_hKeyHook = NULL;
#pragma data_seg()BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_hInst = (HINSTANCE)hModule;
case DLL_PROCESS_DETACH:
break;
} return TRUE;
}LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam);extern "C" __declspec(dllexport) BOOL InstallKeyHook()
{
g_hKeyHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,g_hInst,0);
if(g_hKeyHook == NULL)
return FALSE; return TRUE;
}extern "C" __declspec(dllexport) BOOL RemoveKeyHook()
{
if(g_hKeyHook)
return UnhookWindowsHookEx(g_hKeyHook); return FALSE;
}LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
if(wParam == VK_F12)
MessageBox(NULL, "test", "Tips", MB_OK); return CallNextHookEx(g_hKeyHook, code, wParam, lParam);
}
想问下,问题到底出在哪里?
是没定义 HINSTANCE g_hInst = NULL;的原因?
还是没这个 return CallNextHookEx(......); 的原因?
二是你多加了一判断code==HC_ACTION具体我也没有测试,只是拿我原的代码改了一下,我想应该没有问题.