我想做一个系统级的钩子,作用就是按一下F12,就执行一下右键,在任何程序中都可以!但不知道什么地方有错误,请大侠们指点一下,代码如下::
// wing12345.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "wing12345.h"
HINSTANCE hinstance;
HHOOK wingKey;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
hinstance=(HINSTANCE)hModule;
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wparam,LPARAM lparam)
{
if(nCode==HC_ACTION)
if(wparam==VK_F12)
{
PostMessage(NULL,VK_RIGHT,0,0);
}
return CallNextHookEx(NULL,nCode,wparam,lparam);
}
WING12345_API BOOL EnableKey()
{
if(!(wingKey=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hinstance,0)))
return FALSE;
return TRUE;
}
WING12345_API BOOL DisableKey()
{
return UnhookWindowsHookEx(wingKey);
}
///////////以上是动态库
/ wingdll.cpp : Defines the entry point for the application.
//#include "stdafx.h"
#include "wing12345.h"
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
if(KEYDOWN(VK_F12))
EnableKey();
if(KEYDOWN(VK_F11))
DisableKey();
return 0;
}////以上为win32程序
我用的是postmessage,还有如何用keybd_event或SendInput请大侠们指点指点!!
// wing12345.cpp : Defines the entry point for the DLL application.
//#include "stdafx.h"
#include "wing12345.h"
HINSTANCE hinstance;
HHOOK wingKey;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
hinstance=(HINSTANCE)hModule;
return TRUE;
}
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wparam,LPARAM lparam)
{
if(nCode==HC_ACTION)
if(wparam==VK_F12)
{
PostMessage(NULL,VK_RIGHT,0,0);
}
return CallNextHookEx(NULL,nCode,wparam,lparam);
}
WING12345_API BOOL EnableKey()
{
if(!(wingKey=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,hinstance,0)))
return FALSE;
return TRUE;
}
WING12345_API BOOL DisableKey()
{
return UnhookWindowsHookEx(wingKey);
}
///////////以上是动态库
/ wingdll.cpp : Defines the entry point for the application.
//#include "stdafx.h"
#include "wing12345.h"
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
if(KEYDOWN(VK_F12))
EnableKey();
if(KEYDOWN(VK_F11))
DisableKey();
return 0;
}////以上为win32程序
我用的是postmessage,还有如何用keybd_event或SendInput请大侠们指点指点!!
解决方案 »
- win32程序 消息疑问(对话框程序不需要处理WM_PAINT或WM_DESTROY讯息。对话框程序不接收WM_CREAT讯息,而是在特殊的WM_INITDI)
- 请帮忙提供个支持VC6的,MSDN
- 深夜问一下新手问题!WSASend()发送时报SOCKET_ERROR这个错误
- button控件不响应ON_BN_CLICKED
- 终端设备http请求有问题,用wireshark抓包,但小弟不会分析,请哪位兄弟帮忙分析下,谢谢(在线等待)
- 请教!从触发器中怎样调用com组件
- 新手小问,VC调程序源码时,怎么切到程序界面看看响应变化呀?
- 如何编译
- 关于CCmdUI的问题(急)
- 请教界面设计高手
- 怎么改变进程的优先级?
- 用静态切分窗口出现问题,盼大大解决,高分相送,急急
memet(&input, 0, sizeof(input));input.type = INPUT_MOUSE;
input.mi.dx = point.x;
input.mi.dy = point.y;
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE|MOUSEEVENTF_RIGHTDOWN;SendInput(1, &input, sizeof(input));