MFC HOOK dll 做改键程序解决思路
MFC HOOK dll 做改键程序
我现在想在按下A 键时响应S 键消息 我下面的代码实现不了 各位大侠给点意见 谢谢
HOOK 中的去部代码:
#include <afx.h>
#include<windows.h>
HHOOK g_key=NULL;
HWND g_hwnd=NULL;
CString g_str01="";
CString g_str02="";
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
char* pBuf01=NULL;
char* pBuf02=NULL;
char ch[2];
if (HC_ACTION == code)
{
if(VK_F12==wParam)
{
::SendMessage(g_hwnd,WM_CLOSE,0,0);
}
else if('A'==wParam)
{
//MessageBox(g_hwnd,"111",NULL,MB_OK);
keybd_event(VkKeyScan('S'),0,0,0); // 为什么不响应S 键消息
}
if(!g_str01.IsEmpty() && !g_str02.IsEmpty())
{
pBuf01=g_str01.GetBuffer(0);
pBuf02=g_str02.GetBuffer(0);
ch[0]=*pBuf01;
ch[1]=*pBuf02;
if(ch[0]==wParam)
{
g_str01.Format("%s",ch[0]);
g_str02.Format("%s",ch[1]);
MessageBox(g_hwnd,g_str01,NULL,MB_OK);
MessageBox(g_hwnd,g_str02,NULL,MB_OK);
MessageBox(g_hwnd,"0000",NULL,MB_OK);
::SendMessage(g_hwnd,WM_CHAR,ch[1],0);
keybd_event(VkKeyScan(ch[1]),0,0,0);
}
}
}
return 1;
}
void SetHook(HWND hwnd,CString str1,CString str2)
{
g_hwnd=hwnd;
g_str01=str1;
g_str02=str2;
g_key=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc, GetModuleHandle("HOOK"), 0);
}
------解决方案--------------------
我最近也是在做这个,留个QQ以后多多交流460602540
下面是我实现的方式:
LRESULT CALLBACK LowLevelKeyboardProc( int nCode,WPARAM wParam,LPARAM lParam )
{
if (nCode == HC_ACTION)
{
if (wParam == WM_KEYDOWN)
{
int code = ((KBDLLHOOKSTRUCT*)lParam)->vkCode;
if (code == int (A))
{
keybd_event(int (S),0,0,0);
return 1;
}
}
}
return CallNextHookEx(hllKeyBoard,nCode,wParam,lParam);
}
SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
这样应该就能实现你所讲的功能。。。。
------解决方案--------------------
else if('A'==wParam)
{
//MessageBox(g_hwnd,"111",NULL,MB_OK);
keybd_event(VkKeyScan('S'),0,0,0); // 为什么不响应S 键消息
wParam是virtual-key code
a的虚拟键码是:VK_A
------解决方案--------------------
------解决方案--------------------
我现在想在按下A 键时响应S 键消息 我下面的代码实现不了 各位大侠给点意见 谢谢
HOOK 中的去部代码:
#include <afx.h>
#include<windows.h>
HHOOK g_key=NULL;
HWND g_hwnd=NULL;
CString g_str01="";
CString g_str02="";
LRESULT CALLBACK KeyboardProc(
int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam // keystroke-message information
)
{
char* pBuf01=NULL;
char* pBuf02=NULL;
char ch[2];
if (HC_ACTION == code)
{
if(VK_F12==wParam)
{
::SendMessage(g_hwnd,WM_CLOSE,0,0);
}
else if('A'==wParam)
{
//MessageBox(g_hwnd,"111",NULL,MB_OK);
keybd_event(VkKeyScan('S'),0,0,0); // 为什么不响应S 键消息
}
if(!g_str01.IsEmpty() && !g_str02.IsEmpty())
{
pBuf01=g_str01.GetBuffer(0);
pBuf02=g_str02.GetBuffer(0);
ch[0]=*pBuf01;
ch[1]=*pBuf02;
if(ch[0]==wParam)
{
g_str01.Format("%s",ch[0]);
g_str02.Format("%s",ch[1]);
MessageBox(g_hwnd,g_str01,NULL,MB_OK);
MessageBox(g_hwnd,g_str02,NULL,MB_OK);
MessageBox(g_hwnd,"0000",NULL,MB_OK);
::SendMessage(g_hwnd,WM_CHAR,ch[1],0);
keybd_event(VkKeyScan(ch[1]),0,0,0);
}
}
}
return 1;
}
void SetHook(HWND hwnd,CString str1,CString str2)
{
g_hwnd=hwnd;
g_str01=str1;
g_str02=str2;
g_key=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc, GetModuleHandle("HOOK"), 0);
}
------解决方案--------------------
我最近也是在做这个,留个QQ以后多多交流460602540
下面是我实现的方式:
LRESULT CALLBACK LowLevelKeyboardProc( int nCode,WPARAM wParam,LPARAM lParam )
{
if (nCode == HC_ACTION)
{
if (wParam == WM_KEYDOWN)
{
int code = ((KBDLLHOOKSTRUCT*)lParam)->vkCode;
if (code == int (A))
{
keybd_event(int (S),0,0,0);
return 1;
}
}
}
return CallNextHookEx(hllKeyBoard,nCode,wParam,lParam);
}
SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);
这样应该就能实现你所讲的功能。。。。
------解决方案--------------------
else if('A'==wParam)
{
//MessageBox(g_hwnd,"111",NULL,MB_OK);
keybd_event(VkKeyScan('S'),0,0,0); // 为什么不响应S 键消息
wParam是virtual-key code
a的虚拟键码是:VK_A
------解决方案--------------------
------解决方案--------------------