为什么用ShellExcute 这个API函数不能隐藏一个程序呢?(最后一个参数设置为:SW_HIDE) ( 积分: 200 )

  • 主题发起人 主题发起人 dbyoung
  • 开始时间 开始时间
D

dbyoung

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么用ShellExcute 这个API函数不能隐藏一个程序呢?(最后一个参数设置为:SW_HIDE)
 
为什么用ShellExcute 这个API函数不能隐藏一个程序呢?(最后一个参数设置为:SW_HIDE)
 
我用WinExec试过隐藏命令行窗口,至于隐藏程序,刚刚试了下,还真的不可以。
 
我记得用CreateProcess可以隐藏
 
ShellExcute和WinExec都是一样的,如何叫SW_HIDE起作用呀?
 
你们难道没有这样的经历吗:在背后加载一个需要很长时间的程序,前台程序处理人机对话,(因为有一段时间)当条件满足时,才将后台的程序显示出来?
 
CreateProcess
 
program Project1;<br><br>{$APPTYPE CONSOLE}<br><br>uses<br> &nbsp;Windows,<br> &nbsp;SysUtils;<br><br>var<br> &nbsp;si: TStartupInfo;<br> &nbsp;pi: TProcessInformation;<br>begin<br> &nbsp;FillChar(si, SizeOf(si), 0);<br> &nbsp;FillChar(pi, SizeOf(pi), 0);<br> &nbsp;si.cb := SizeOf(si);<br> &nbsp;si.dwFlags := STARTF_USESHOWWINDOW;<br> &nbsp;si.wShowWindow := SW_HIDE;<br> &nbsp;si.lpTitle := PChar('hello china');<br> &nbsp;if not CreateProcess(nil, 'C:/WINNT/system32/CMD.EXE',<br> &nbsp; &nbsp;nil, nil, False,<br> &nbsp; &nbsp;CREATE_NEW_CONSOLE,<br> &nbsp; &nbsp;nil, nil, si, pi) &nbsp;then<br> &nbsp; &nbsp;MessageBox(0, 'Error to create process', 'Err',<br> &nbsp; &nbsp; &nbsp;MB_ICONINFORMATION or MB_OK); &nbsp; <br> &nbsp;//WaitForSingleObject(pi.hProcess, 1000*1000);<br>end.
 
为什么不能隐藏程序的原因是因为你调用的程序不止一个窗体或创建的主窗体不是他默认的显示窗体(象很多有屏幕溅射的程序),如果你调用命令行CMD、记事本、计算器这样的单窗口程序是可以,但有些程序就不是这样简单了,如果你要隐藏必须要运行后确定它的显示窗体,然后用showwindow(handle,hide)来。
 
可以枚举一个进程的所有线程,<br>再枚举其所有窗体,然后全部隐藏
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部