CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  Windows SDK/API

如何挂起/唤醒其它程序?

楼主WorldCreater(造化天尊)2004-08-04 17:48:00 在 Delphi / Windows SDK/API 提问

如何挂起/唤醒其它程序? 问题点数:20、回复次数:9Top

1 楼jinjazz(近身剪)回复于 2004-08-04 17:51:34 得分 0

直接执行??  
  ShellExecute  
  Top

2 楼sdgxboy(而立浪子)回复于 2004-08-04 23:52:59 得分 0

好象利用winexe这个函数就可以了吧Top

3 楼WorldCreater(造化天尊)回复于 2004-08-05 08:27:29 得分 0

不是的。  
  比如一个程序正在运行中,我想用自已的程序挂起/唤醒它,就象挂起/唤醒自已创建的线程一样。Top

4 楼tabris17(四不象)回复于 2004-08-06 12:25:42 得分 5

用toolhelp32函数枚举该进程的所有线程,用SuspendThread挂起所有线程,ResumeThread唤醒所有线程Top

5 楼WorldCreater(造化天尊)回复于 2004-08-06 15:06:39 得分 0

//我是在nt/2003平台下,这样写有什么不妥吗?为什么并没将进程暂停?  
  procedure   TMainFrm.SuspendThreadBtnClick(Sender:   TObject);  
  var  
      PID:   DWORD;  
      hProcess:   THandle;  
      i:   DWORD;  
      aModuleHandles:   array[0..$3FFF-1]   of   DWORD;  
      ModuleName:   array[0..MAX_PATH]   of   char;  
      cModules:   DWORD;  
  begin  
      if   ProcLV.Selected=nil   then  
      begin  
          ShowMessage('你没有选定一个项目,请在项目上双击');  
      end;  
      PID   :=   StrToInt(ProcLV.Selected.SubItems.Strings[0]);  
      hProcess   :=   OpenProcess(PROCESS_QUERY_INFORMATION   or   PROCESS_VM_READ,   false,   PID);  
      try  
              if   hProcess   >   0   then  
              begin  
                  if   EnumProcessModules(hProcess,   @aModuleHandles,   SizeOf(aModuleHandles),   cModules)   then  
                  begin  
                      for   i:=0   to   cModules-1   do  
                      begin  
                          if   SuspendThread(aModuleHandles[i])=-1   then     //并没有显示失败  
                          begin  
                              ShowMessage('挂起失败');       //不会跳出这个信息  
                          end;  
                      end;  
                      ShowMessage(inttostr(i));  
                  end;  
              end;  
      finally  
          CloseHandle(hProcess);  
      end;  
  end;Top

6 楼tabris17(四不象)回复于 2004-08-06 15:29:21 得分 5

EnumProcessModules用来枚举进程模块的,不是线程  
   
  要用toolhelp32的Thread32First和Thread32Next来枚举线程Top

7 楼WorldCreater(造化天尊)回复于 2004-08-09 10:37:03 得分 0

依照开发指南的说法,nt下是不支持toolhelp32的,不是吗?Top

8 楼tabris17(四不象)回复于 2004-08-09 11:58:26 得分 5

nt   4.0版本下没有,2000/xp下都有  
   
  nt   4.0可以用native   api实现Top

9 楼linzhengqun(风。我回来了)回复于 2004-08-09 12:48:38 得分 5

可以的,你试过之后才知道Top

相关问题

  • 如何通过程序将休眠状态的电脑唤醒?
  • 服务器如何唤醒访问者的应用程序???
  • 含中断的驱动程序唤醒进程的问题?
  • *******如何让程序启动另一个程序,并阻塞当前运行的程序,等另一个程序运行结束后再唤醒主程序
  • 怎样在程序中关闭系统(98,2k,xp)、休眠系统、唤醒系统!
  • 怎样把最小化的其他的.net应用程序重新唤醒并显示
  • 如何在程序中调用其它应用程序?
  • 怎么在DELPHI程序中执行其它程序?
  • 怎样控制其它程序?
  • 怎样阻止其它应用程序

关键词

  • 线程
  • nt
  • 唤醒
  • amodulehandles
  • cmodules
  • 程序
  • hprocess
  • toolhelp
  • showmessage
  • 进程

得分解答快速导航

  • 帖主:WorldCreater
  • tabris17
  • tabris17
  • tabris17
  • linzhengqun

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo