读书人

50分,请问一个解决方案

发布时间: 2012-03-29 12:53:13 作者: rapoo

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

读书人网 >VC/MFC

热点推荐