使用DLL注入到 别的程序中时,发现DLL的窗口过程无法响应WM_CHAR事件,摸索了很久,才找到原因,给碰到同样问题的人参考。
WNDPROC OldComboEditProc = NULL;
LRESULT CALLBACK ComboEditProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
if (uMsg==WM_CHAR)
{
if (g_Msg_Form) g_Msg_Form->PostMessage(WM_CHAR,wParam,lParam);
}
return CallWindowProc(OldComboEditProc,hwnd,uMsg,wParam,lParam);
}
BOOL CMsgForm::OnInitDialog()
{
ClxDialog::OnInitDialog();
HWND gh=FindWindowEx(m_conCommond.m_hWnd,0,"Edit",NULL);;//获取窗口句柄
if (gh)
{
OldComboEditProc =(WNDPROC)GetWindowLong(gh,GWL_WNDPROC);//以前窗口过程
SetWindowLong(gh,GWL_WNDPROC,(long)ComboEditProc);//设置新的窗口过程
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}