超级奇怪的问题,CreateProcess函数无法隐藏运行进程???怪!怪!怪,高手看过来! ( 积分: 200 )

L

legoog

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样的,我要用CreateProcess函数隐藏运行我自己用delphi写的程序,有Form窗口!
设置了SW_HIDE还是不行?请问怎么会事?我试了Winexec和ShellExecute都不能隐藏运行?
(注意:除了DOS窗口可以隐藏运行,为什么win32程序没办法实现?????)
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
begin
ZeroMemory(@si, sizeof(si));
si.cb := sizeof(si);
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := SW_HIDE; //设置了,无效?怎么办?
ZeroMemory(@pi, sizeof(pi));
if CreateProcess('C:/Windows/System32/Calc.exe', nil, nil, nil,
False, NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then
begin
Form1.Caption := '运行成功';
end;
end;
 
以前也遇到过这一问题
最后是将新的进程运行于自己创建的桌面下面时才把问题解决的
 
控制台程序的才可以隐藏,其他的好像要自己处理消息才行
 
我想是因为delphi的带窗口程序都有一个TApplication,在TApplication中创建了一个隐藏的窗口,所以你设置的隐藏窗口实际上是TApplication创建的那个,而不是显示出来的那个主窗口.
 
dreamisx说的有道理!!form已经不是第一级的窗口了!!Tapplication创建的是第一个窗口!!!!
 
把他放到虚拟桌面下,这样,任何窗体都不会显示了.
 
你的窗体不是第一个当然隐藏不了
 
可以改写这两个程序,增加通信功能,使第一个程序一收到第二个程序的消息就隐藏窗口。
 
至于用有名互斥进程变量,油槽/管道还是直接写进程内存(用API)就由得你了。
 
STARTUPINFO有很多字段,貌似你没有设置初始值,仅仅ZeroMemory(@si, sizeof(si))还是不够的,可以手工赋值每个字段都搞一次看看。
 
想干坏事?
 
顶部