Dll 中向非活动窗口发送消息时,目标窗口的句柄应该被共享:
#pragma data_seg(".sdata")
HWND m_hMainWnd = NULL; //Save the MainWindows HANDLE
#pragma data_seg()
同时在.def文件中添加如下信息:
SECTIONS
.sdata READ WRITE SHARED
WINENGINE_API bool __stdcall SetAutoGetText(bool bAuto, HINSTANCE h)
{
if(bAuto && !m_hKeyHook)
{
m_hInstance = AfxGetInstanceHandle(); //
m_hKeyHook = NULL;
m_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyHook, m_hInstance, 0);
}
else
{
if(m_hKeyHook)
UnhookWindowsHookEx(m_hKeyHook);
}
return false;
}
LRESULT WINAPI KeyHook(int nCode, WPARAM wParam, LPARAM lParam)
{
LRESULT hr;
if(nCode < 0)
{
hr = CallNextHookEx(m_hKeyHook, nCode, wParam, lParam);
return hr;
}
if(GetKeyState(VK_CONTROL)<0 )
{
Sleep(200);
if(GetKeyState(VK_CONTROL) < 0)
{
SendMessage(m_hMainWnd, WM_MY_GETTEXT, 0, 0);
}
}
return (UINT)CallNextHookEx(m_hKeyHook, nCode, wParam, lParam);
}
#pragma data_seg(".sdata")
HWND m_hMainWnd = NULL; //Save the MainWindows HANDLE
#pragma data_seg()
同时在.def文件中添加如下信息:
SECTIONS
.sdata READ WRITE SHARED
WINENGINE_API bool __stdcall SetAutoGetText(bool bAuto, HINSTANCE h)
{
if(bAuto && !m_hKeyHook)
{
m_hInstance = AfxGetInstanceHandle(); //
m_hKeyHook = NULL;
m_hKeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyHook, m_hInstance, 0);
}
else
{
if(m_hKeyHook)
UnhookWindowsHookEx(m_hKeyHook);
}
return false;
}
LRESULT WINAPI KeyHook(int nCode, WPARAM wParam, LPARAM lParam)
{
LRESULT hr;
if(nCode < 0)
{
hr = CallNextHookEx(m_hKeyHook, nCode, wParam, lParam);
return hr;
}
if(GetKeyState(VK_CONTROL)<0 )
{
Sleep(200);
if(GetKeyState(VK_CONTROL) < 0)
{
SendMessage(m_hMainWnd, WM_MY_GETTEXT, 0, 0);
}
}
return (UINT)CallNextHookEx(m_hKeyHook, nCode, wParam, lParam);
}