做了个程序需要运行启动一个外部程序,,如何隐藏启动那个外部程序,用 ShellExecute()和WinExec()都无法隐藏启动那个程序,,请高手们帮下忙,谢谢了!
解决方案 »
- 启动Delphi2010及打开任何工程时遇到的错误
- 如何注册多个系统热键
- 如何检测usb键盘是否已连接?
- 利用TDBChart来显示查询结果的图表,X轴有多个字段要如何处理?
- 有没有支持HTML的Label控件!
- 请朋友们帮个忙,如何用程序来进行路由和远程访问控制的配置
- 画实时曲线的时候,怎样让坐标可以随着窗口的放大缩小,自动的缩放比列
- 关于DELPHI V5.0的例子----CHAT
- 谁知道delphi中怎样制作不规则窗体?
- 软件文档到底是什么写作风格的一种文件?
- delphi中如何判断adoquery中的某一个单元格为空呢?
- 谁知道怎么开发QQ麻将桌的界面的控件,不知道怎么开发这样的控件。高手提示下
或者
shell(0,'open','cmd.exe','/c 位置',nil,nil,sw_hide);
运行以后他还是可以看到得!
StartupInfo.wShowWindow := SW_HIDE;
if(CreateProcess(nil, 'project1.exe',
nil,nil,FALSE,NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo)) then
begin
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
shellexecute(0,'open','patch.exe','','',SW_hide); 执行后该程序也是SYSTEM权限并且闪一下才到后台运行 结果就因为这闪一下 把别人从全屏游戏里给弹出来了.... 服务程序有设置与桌面交互。 另外,我新建一个桌面应用程序测试此句 直接进后台运行,不会出现 闪现然后才转到后台,难道因为是SYSTEM权限的问题?请各位帮忙看看
var
Hd:THandle;
Tmp,Tmp1:String;
Lp:TProcessEntry32;
begin
Result:=0;
Lp.dwSize:=SizeOf(TProcessEntry32);
Hd:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if Process32First(Hd,Lp) then
Repeat
Tmp:=UpperCase(Trim(Name));
Tmp1:=Trim(UpperCase(Lp.szExeFile));
if AnsiPos(Tmp,Tmp1)>0 then
begin
Result := OpenProcess($000F0000 or $00100000 or $FFF, True, Lp.th32ProcessID);
break;
end
Until Process32Next(Hd,Lp)=False;
end;function CreateProc(ProcessName: string; SwCmd: Word): Boolean;
var
siStartupInfo: STARTUPINFO;
saProcess,saThread: SECURITY_ATTRIBUTES;
piProcInfo: PROCESS_INFORMATION;
Hd: Cardinal;
ProcessHd: THandle;
Hds: THandle;
begin
Result := False;
ProcessHd:=GetProcessHandleAsName('explorer.exe');
if ProcessHd=0 then
Exit;
if OpenProcessToken(ProcessHd, TOKEN_ALL_ACCESS, Hds) then
if DuplicateTokenEx(Hds, TOKEN_ALL_ACCESS, nil, SecurityIdentification, TokenPrimary, Hd) then
begin
ZeroMemory(@siStartupInfo, SizeOf(siStartupInfo));
siStartupInfo.cb := SizeOf(siStartupInfo);
siStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
siStartupInfo.wShowWindow := SwCmd;
saProcess.nLength := SizeOf(saProcess);
saProcess.lpSecurityDescriptor := nil;
saProcess.bInheritHandle := False;
saThread.nLength := SizeOf(saThread);
saThread.lpSecurityDescriptor := nil;
saThread.bInheritHandle := False;
Result := CreateProcessAsUser(Hd, nil, PChar(ProcessName), nil, nil, False, CREATE_NO_WINDOW, nil, nil, siStartupInfo, piProcInfo);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if CreateProc('C:\WINDOWS\system32\calc.exe',0) then
edit1.Text :='ok'
else
edit1.Text :='no';
end;
//handle是要隐藏的窗口的句柄。
ShowWindow(handle,SW_HIDE);//隐藏窗口这连控件都能隐藏。呵呵