本文章中的示例程序下载地址:
CallTest.zip http://download.csdn.net/download/friendan/4367002
CallTest.zip http://download.csdn.net/download/friendan/4367002
RemoteCall.zip http://download.csdn.net/download/friendan/4367006
本程序完整源码下载地址:
http://download.csdn.net/download/friendan/4367038
呵呵,我一直对远程调用其它程序的功能模块很是感兴趣,
远程调用Call,用的最多的,莫过于外挂程序了。
写完这个例子,我对远程Call调用有了基本的理解,
为下一步,进行有参数Call的调用做好了准备...
效果截图如下:
主要代码如下:
//远程调用无参数Call函数
//调用时,直接传入Call的内存地址即可
//如这样调用本函数:RemoteCall(0x401620);
void RemoteCall(int callAddr)
{
//获取窗口句柄
HWND hWnd=::FindWindow(NULL,_T("CallTest"));
if (hWnd==NULL)
{
AfxMessageBox(_T("找不到指定窗口!"));
return;
}
//获取窗口进程Id
DWORD Pid=0;
::GetWindowThreadProcessId(hWnd,&Pid);
//打开窗口进程
HANDLE hndWnd=::OpenProcess(PROCESS_ALL_ACCESS,TRUE,Pid);
if (hndWnd==NULL)
{
AfxMessageBox(_T("打开窗口进程失败!"));
return;
}
//远程调用Call
::CreateRemoteThread(hndWnd,NULL,0,(LPTHREAD_START_ROUTINE )(callAddr),NULL,0,NULL);
}