我做了个动态链接库,截获EM_REPLACESEL消息,现在想用配置文件初始化一些变量,但是不知道为什么初始化不了,大家帮忙看看,代码如下~~CDDCLOGDLLApp theApp;
HHOOK g_hHookDDCLog;
HWND g_hwnd=NULL;
RECVPARAM a; //自定义结构体
void CDDCLOGDLLApp::Setting()
{
CString des="";
::GetCurrentDirectory(MAX_PATH,des.GetBuffer(MAX_PATH));
des.ReleaseBuffer();
des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",a.server_ip.GetBufferSetLength(15),15,des);
a.server_ip.ReleaseBuffer();
} void CDDCLOGDLLApp::SendMessage(HWND hwnd){
::PostMessage(hwnd,WM_MSG,0,1);
} LRESULT CALLBACK CallWndProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // address of structure with message data
){
theApp.Setting();
CWPSTRUCT* pStruct =(CWPSTRUCT*)lParam; if(pStruct->message==EM_REPLACESEL)
{ CString s=(char*)pStruct->lParam;
g_hwnd=::FindWindow(NULL,"DDCLOGTEST"); HWND hWnd =pStruct->hwnd;
MessageBox(hWnd,a.server_ip,NULL,MB_OK); return CallNextHookEx(g_hHookDDCLog,nCode,wParam,lParam);
UnhookWindowsHookEx(g_hHookDDCLog); }
else
return CallNextHookEx(g_hHookDDCLog,nCode,wParam,lParam);}
extern "C" _declspec(dllexport) void StartSendMessage(){
g_hHookDDCLog=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,GetModuleHandle("DDCLOGDLL"),0);
}
红字部分的a.server_ip得不到值,请问怎样解决呢???
HHOOK g_hHookDDCLog;
HWND g_hwnd=NULL;
RECVPARAM a; //自定义结构体
void CDDCLOGDLLApp::Setting()
{
CString des="";
::GetCurrentDirectory(MAX_PATH,des.GetBuffer(MAX_PATH));
des.ReleaseBuffer();
des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",a.server_ip.GetBufferSetLength(15),15,des);
a.server_ip.ReleaseBuffer();
} void CDDCLOGDLLApp::SendMessage(HWND hwnd){
::PostMessage(hwnd,WM_MSG,0,1);
} LRESULT CALLBACK CallWndProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // address of structure with message data
){
theApp.Setting();
CWPSTRUCT* pStruct =(CWPSTRUCT*)lParam; if(pStruct->message==EM_REPLACESEL)
{ CString s=(char*)pStruct->lParam;
g_hwnd=::FindWindow(NULL,"DDCLOGTEST"); HWND hWnd =pStruct->hwnd;
MessageBox(hWnd,a.server_ip,NULL,MB_OK); return CallNextHookEx(g_hHookDDCLog,nCode,wParam,lParam);
UnhookWindowsHookEx(g_hHookDDCLog); }
else
return CallNextHookEx(g_hHookDDCLog,nCode,wParam,lParam);}
extern "C" _declspec(dllexport) void StartSendMessage(){
g_hHookDDCLog=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,GetModuleHandle("DDCLOGDLL"),0);
}
红字部分的a.server_ip得不到值,请问怎样解决呢???
void CDDCLOGDLLApp::Setting()
{
CString des="";
::GetCurrentDirectory(MAX_PATH,des.GetBuffer(MAX_PATH));
des.ReleaseBuffer();
des+="\\config.ini";
AfxMessageBox(des);// 看下文件是否正确
GetPrivateProfileString("PhoneDemo","Server_IP","",a.server_ip.GetBufferSetLength(15),15,des);
a.server_ip.ReleaseBuffer();
}
CString des="";
::GetCurrentDirectory(MAX_PATH,des.GetBuffer(MAX_PATH));
des.ReleaseBuffer();
des+="\\config.ini";
GetPrivateProfileString("PhoneDemo","Server_IP","",a.server_ip.GetBufferSetLength(15),15,des);
a.server_ip.ReleaseBuffer(); 把这段代码放到
extern "C" _declspec(dllexport) void StartSendMessage() {
g_hHookDDCLog=SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,GetModuleHandle("DDCLOGDLL"),0); }
里面,并且直接MessageBox,可以成功得到从配置文件中初始化的值,但是就是不知道怎么也不能让MessageBox(hWnd,a.server_ip,NULL,MB_OK); 中的a.server_ip得到初始化
2、其次,GetCurrentDirectory的当前目录可能会发生变化,特别是当你的应用程序有浏览文件的操作后。如果你的exe文件和ini配置文件放置在一起的话,建议你用GetModuleFileName更恰当一些;
3、再次,
void CDDCLOGDLLApp::SendMessage(HWND hwnd)
{
::PostMessage(hwnd,WM_MSG,0,1);
},这个函数写得真烂,俺头疼加剧。搞多老你以后会更头疼的
4、回调函数的处理必须高效,特别是过滤消息的钩子。
4.1要记住:沉默是金,你那个MessageBox的调用最好别在钩子里用,可能会让你烦不胜烦,甚至当掉你的进程;如果你实在想看到它,用TRACE宏代替,在IDE的输出窗口查看结果
4.2俺觉得你那个theApp.Setting()似乎不应该放在钩子函数里面,它应该是只需要调用一次即可。
4.3g_hwnd=::FindWindow(NULL,"DDCLOGTEST"); 这代码干鸟用?g_hwnd变量后面的代码似乎从来不在乎它
5、俺修改后的Setting(),似乎比你的代码要好些:
void CDDCLOGDLLApp::Setting()
{
TCHAR Buff[MAX_PATH];
GetModuleFileName(NULL, Buff, MAX_PATH);
CString szIni(Buff);
szIni = szIni.Left(szIni.ReverseFind('\\') + 1); //这里该不该+1?俺似乎忘记老
szIni += _T("Config.ini");
GetPrivateProfileString("PhoneDemo","Server_IP","", Buff,15, szIni);
a.server_ip = Buff;
} 欢迎QQ联系
不过我问的问题还是没有解决,主要就是除了直接在初始化时候就给a.server_ip直接赋值,用现在的读配置文件或者别的方法给它赋值,
LRESULT CALLBACK CallWndProc(
int nCode, // hook code
WPARAM wParam, // current-process flag
LPARAM lParam // address of structure with message data
)
{}
这里面的红字部分得不到,请问原因~~~怎么改代码呢??
现在我实际做的代码用别的方法解决了问题,但是还是想知道下这段代码原因,大家帮帮忙吧,如果实在没有,今天晚上结贴,分数俺就尽量给大家平分,像Lin等人也给我不少帮助,自然多给些~~呵呵,再次谢谢给我帮助的每个人~~~