论坛: 编程破解 标题: 获取所有进程,,一次性的全部发送过去 复制本贴地址    
作者: 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号