
| 
 | 
|  | 作者: battle [battle]  论坛用户 | 登录 | 
| HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPALL,NULL);获取进程 PROCESSENTRY32 info; info.dwSize = sizeof(info); // PROCESS process; Process32First(handle,&info); while(Process32Next(handle,&info)) send(Socket,(char*)&info,255,0); 发送,,这样发送每次只发送一个进程 请问怎样,获取所有进程,,一次性的全部发送过去? 谢谢 [此贴被 286(unique) 在 05月17日10时15分 编辑过] | 
| 地主 发表时间: 04-05-16 11:38 | 
|  | 回复: 286 [unique]  版主 | 登录 | 
| HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPALL,NULL);获取进程 PROCESSENTRY32 info[1000]; info[0].dwSize = sizeof(info); // PROCESS process; Process32First(handle,&info[0]); int i=1; while(Process32Next(handle,&info[i])) i++; send(Socket,(char*)&info,255*i,0); | 
| B1层 发表时间: 04-05-17 10:14 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 谢谢。。。。。。。。。。不过 我接受到 PROCESSENTRY32 info; recv((void*)&info,sizeof(info)); while(1) { char pro[255]; sprintf(pro,"%d",info.th32ProcessID); m_list.InsertItem(0,info.szExeFile); m_list.SetItemText(0,0,info.szExeFile); m_list.SetItemText(0,1,pro); return; } 添加也只显示一条进程,,,怎么全部显示出来。。在次感谢!! | 
| B2层 发表时间: 04-05-17 11:31 | 
|  | 回复: 286 [unique]  版主 | 登录 | 
| 发送时就把个数发过去. recv((void*)&info,sizeof(info)*N); //N几个数. | 
| B3层 发表时间: 04-05-17 13:29 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 怎么会出现这种情况  | 
| B4层 发表时间: 04-05-17 13:55 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 我晕啊。。喊 烫啊。。CPU要烧了。。呵呵 | 
| B5层 发表时间: 04-05-17 13:56 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 我晕啊。。喊 烫啊。。CPU要烧了。。呵呵 | 
| B6层 发表时间: 04-05-17 13:58 | 
|  | 回复: 286 [unique]  版主 | 登录 | 
| “烫”表示该段内存未被初始化。 可能是你的N的判断出错,或在发送时出错,或在接收时出错。 | 
| B7层 发表时间: 04-05-17 15:41 | 
|  | 回复: NetDemon [netdemon]  ADMIN | 登录 | 
|     | 
| B8层 发表时间: 04-05-17 16:12 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 还是搞不定,,还是 烫 ................. | 
| B9层 发表时间: 04-05-17 16:29 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| BOOL path; while(path) { char pro[255]; PROCESSENTRY32 info; path = sock.Receive((void*)&info,sizeof(info)); sprintf(pro,"%d",info.th32ProcessID); m_list.InsertItem(0,info.szExeFile); m_list.SetItemText(0,0,info.szExeFile); m_list.SetItemText(0,1,pro); }成功接受了所有进程。。但循环没结束,,程序越来越慢了。。。用什么办法搞定 谢谢了。。再次麻烦 | 
| B10层 发表时间: 04-05-17 23:43 | 
|  | 回复: 286 [unique]  版主 | 登录 | 
| 在发送的数据中,自己定义一个结束标志就行了。 通过path = sock.Receive((void*)&info,sizeof(info));作这判断结束的方法的确不太合适。 | 
| B11层 发表时间: 04-05-18 09:01 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 能不能具体点。。。。我很菜的呀!! | 
| B12层 发表时间: 04-05-18 12:24 | 
|  | 回复: hackgou [hackgou]  论坛用户 | 登录 | 
| 特务兄:下面是你二楼的代码while(1) { char pro[255]; sprintf(pro,"%d",info.th32ProcessID); m_list.InsertItem(0,info.szExeFile); m_list.SetItemText(0,0,info.szExeFile); m_list.SetItemText(0,1,pro); return; } while只会执行一次就return了。所以只显示一条进程,当然也接收了一条PROCESSENTRY32结构体。 至于10楼的 BOOL path; while(path) { char pro[255]; PROCESSENTRY32 info; path = sock.Receive((void*)&info,sizeof(info)); sprintf(pro,"%d",info.th32ProcessID); m_list.InsertItem(0,info.szExeFile); m_list.SetItemText(0,0,info.szExeFile); m_list.SetItemText(0,1,pro); } 检查一下path的返回值,根据sock的Receive方法在接收数据完成后的返回值来结束while,因为由于编译器不同Receive的返回值可能不一样,但是大多数会返回-1,这个值在windows下也被定义为:SOCKET_ERROR,而不是0,这就是while无法结束的原因。 | 
| B13层 发表时间: 04-05-18 21:50 | 
|  | 回复: battle [battle]  论坛用户 | 登录 | 
| 能不能弄个 例子出来看看。。。 | 
| B14层 发表时间: 04-05-19 18:58 | 
|  | 回复: yinjun [yinjun]  论坛用户 | 登录 | 
| 我不明白 | 
| B15层 发表时间: 04-05-22 13:23 | 
| 
 | 
20CN网络安全小组版权所有
Copyright ©    2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon   

粤ICP备05087286号