首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

50分,请问一个解决方案

2012-03-29 
50分,请教一个解决方案.现在有这么个需求(公司领导交待下来滴):我们买了另外一家公司的一个软件,是绿软.这

50分,请教一个解决方案.
现在有这么个需求(公司领导交待下来滴):

我们买了另外一家公司的一个软件,是绿软.这个软件的标题上显示着另外那家公司的名字,另外在点击其窗体上的一部分按钮时也会刷新标题栏,显示那家公司的名字.
我们公司想将该软件用到我们的产品上,但标题栏上只能显示我们公司的名字.我现在是Hook上CallWndProcRet来做的.Hook了WM_ACTIVATEAPP和WM_COMMAND消息.
先CreateProcess创建目标进程,然后Hook目标进程的线程(利用CreateProcess返回的线程句柄).但是Hook很多时候会失败,GetLastError返回87:参数不正确.

int   APIENTRY   WinMain(HINSTANCE   hInstance,
                                          HINSTANCE   hPrevInstance,
                                          LPSTR           lpCmdLine,
                                          int               nCmdShow)
{
STARTUPINFO   si   =   {sizeof(STARTUPINFO)};
PROCESS_INFORMATION   pi   =   {0};
if(   CreateProcess(   TEXT(   "Editor.exe "   ),NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi   ))
{
SetThreadPriority(   pi.hThread,THREAD_PRIORITY_BELOW_NORMAL   );
HWND   hwndTarget;
while((   hwndTarget   =   FindWindow(   NULL,TEXT(   "XXX公司的名字 "   )))   ==   NULL   )Sleep(0);

InjectLibFunc   setHook   =   NULL;
HMODULE   module   =   LoadLibrary(   TEXT(   "InjectLib.dll "   ));
if(   module   )setHook   =   (InjectLibFunc)GetProcAddress(   module, "SetHook "   );
if(   setHook   &&   (*setHook)(pi.dwThreadId))
{
OutputDebugString(   TEXT(   "Hook   OK\n "   ));

SetThreadPriority(   pi.hThread,THREAD_PRIORITY_NORMAL   );
WaitForSingleObject(   pi.hThread,INFINITE   );
(*setHook)(0);
}
else
{
TerminateProcess(   pi.hProcess,0   );
MessageBox(   NULL,TEXT(   "加载资源失败,请稍候重试!!! "   ),NULL,MB_ICONINFORMATION   );
}

if(   module   )FreeLibrary(   module   );
CloseHandle(   pi.hProcess   );
CloseHandle(   pi.hThread   );
}

return   0;
}

[解决办法]
用ultraEdit打开执行文件,然后search-> replace

热点排行