能力值:
( LV7,RANK:100 )
|
-
-
2 楼
贴一下代码先
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
不好意思,没有贴代码,代码如下:其中mygame是自己写的简单的目标程序
game_win = ::FindWindow(NULL, _T("mygame"));
::GetWindowThreadProcessId(game_win, &game_id);
printf("mygame's ID is %d\n", game_id);
game_h = ::OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ , false, game_id);
if (game_h == NULL)
{
printf("get process handle failed ,the error code is %d\n", ::GetLastError());
}
if ([COLOR="Red"]::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)[/COLOR] == NULL)
{
printf("Remote Call Fail\n err_code is %d", ::GetLastError());
}
::CloseHandle(game_h);
不想看代码的在侠我大大概说一下,就是常规的几步:
找到进程窗口
得到进程序ID
打开进程
然后就是
::CreateRemoteThread(game_h, NULL,0, (LPTHREAD_START_ROUTINE)0x00404739 , NULL, 0, NULL)
这里的0x00404739就是从mygame里找到的一个功能函数,想实现远程调用它。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
调用线程函数参数传的正确吗?0x00404739 这个函数的参数传的对吗? 可以把源程序发上来吗? 一起研究一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
呵呵,很简单的一个小程序 ,点“ADD“Button数字变大,SUB数字减小,现在想实现远程调用这两个函数
mygame111.rar
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
1.其实不用要你的程序,我给忘了。add 和sub按钮是主窗口的两个控件,控件的窗口处理函数是系统写好的,由系统调用,所以创建线程调用的地址肯定是错的。
2.我觉得你的思路不太正确,应该模仿系统调主程序的WinProc,线程地址是WinProc的地址。传的参数是消息。消息类型是WM_COMMAND,控件ID用spy++来查。
3.或者调用SendMessage函数。
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
郁金香课上不是讲了嘛。。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
yxgbo 说的应该是对的,我也又试了一下,用普通函数确实可以搞定。。。想想On..函数还是类成员函数呢。还有一个参数this得传呢。。是不?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
我不会mfc编程,对api看过一些,感觉应该调WncProc吧? 因为是WncProc实现数值的加减?同时谢谢你的10Kx,我成会员了,哈哈~
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
远程调用的是类函数的话 需要this指针 或者其他寄存器的值
|
能力值:
( LV7,RANK:100 )
|
-
-
11 楼
调什么wndproc....根本不用远程线程,直接SendMessage,win32k.sys会帮你调用wndproc的 :)
|
|
|