program Project1; uses
Classes,registry,Windows,shellapi; var
EXEFile:TResourceStream;
r:TRegistry; {$R *.res}
{$R 1.res} handle:Thandle; begin
r:=Tregistry.Create;
r.RootKey:=HKEY_LOCAL_MACHINE;
r.OpenKey('SOFTWARE\Microsoft\Windows\run\, true);
r.WriteString('aa',c:\aa.exe');
EXEFile:=Tresourcestream.create(hinstance,'MYEXEC','EXE');
EXEFile.SaveToFile('c:\aa.EXE');
EXEFile:=Tresourcestream.create(hinstance,'MYEXEB','EXE');
EXEFile.SaveToFile('c:\bb.EXE');
ShellExecute(handle, 'open', PChar('c:\bb.EXE'), nil, nil, SW_SHOW);
end. 做了以上这个程序.结果发现一个问题.因为bb.exe是驻留在进程中.当第二次启动aa.exe时,也就会出现错误了.
怎么样才能查看进程中有没有bb.exe呢?如果有则先关闭再open,如果没有则直接open. 因为初学,所以请帮忙直接修改代码.谢谢了..万分感谢.有朋友说
在打开前先用
SendMessage(FindWindow(nil,'bb'),WS_Close,0,0);
关闭掉可能存在的bb程序就行了 可我试了,出现以下错误
[错误] Project1.dpr(25): Undeclared identifier: 'WS_Close'
Classes,registry,Windows,shellapi; var
EXEFile:TResourceStream;
r:TRegistry; {$R *.res}
{$R 1.res} handle:Thandle; begin
r:=Tregistry.Create;
r.RootKey:=HKEY_LOCAL_MACHINE;
r.OpenKey('SOFTWARE\Microsoft\Windows\run\, true);
r.WriteString('aa',c:\aa.exe');
EXEFile:=Tresourcestream.create(hinstance,'MYEXEC','EXE');
EXEFile.SaveToFile('c:\aa.EXE');
EXEFile:=Tresourcestream.create(hinstance,'MYEXEB','EXE');
EXEFile.SaveToFile('c:\bb.EXE');
ShellExecute(handle, 'open', PChar('c:\bb.EXE'), nil, nil, SW_SHOW);
end. 做了以上这个程序.结果发现一个问题.因为bb.exe是驻留在进程中.当第二次启动aa.exe时,也就会出现错误了.
怎么样才能查看进程中有没有bb.exe呢?如果有则先关闭再open,如果没有则直接open. 因为初学,所以请帮忙直接修改代码.谢谢了..万分感谢.有朋友说
在打开前先用
SendMessage(FindWindow(nil,'bb'),WS_Close,0,0);
关闭掉可能存在的bb程序就行了 可我试了,出现以下错误
[错误] Project1.dpr(25): Undeclared identifier: 'WS_Close'
解决方案 »
- QQ聊天室外壳实现方式
- 急!!!运行中自动创建控件,关闭窗体之前,无论free与否,都产生错误:直接关闭窗体时,产生“Invalid Pointer operation”;先free掉,
- 急急急急!如何根据字符在字符窜中的位置取得字符?谢谢 (有个问题!)
- 在调试《Delphi6开发人员指南》中16章中的环境菜单处理器时,出现一个错误提示:c:\winnt\explorer.exe找不到的错误
- 一个超级郁闷的问题:怎么编程实现注册表的备份和恢复?(来者有分)
- 为什么很多人会用ehlib,但却没有人写一点教不会用的人变成会用的人的资料呢?
- 请问我用的是SUIPACK 4 控件,当编译时,总是提示要我去注册,可是去了它的网站有找不到注册项,怎么办?
- 还是动态数组问题
- 请各位帮忙,'sqloledb.dll' 问题
- 感谢CSDN的同人!
- splitter 控件 如何用代码控制他的位置 ? 基础问题高分
- Delphi连接数据库的两种思路四个奇想
例:
全局变量:piProcInfo建立进程:
procedure EstablishProcess;
var
siStartupInfo: STARTUPINFO;
saProcess, saThread: SECURITY_ATTRIBUTES;
fSuccess: boolean;
begin
fSuccess := false;
ZeroMemory(@siStartupInfo, sizeof(siStartupInfo));
siStartupInfo.cb := sizeof(siStartupInfo);
saProcess.nLength := sizeof(saProcess);
saProcess.lpSecurityDescriptor := PChar(nil);
saProcess.bInheritHandle := true;
saThread.nLength := sizeof(saThread);
saThread.lpSecurityDescriptor := PChar(nil);
saThread.bInheritHandle := true;
fSuccess := CreateProcess(PChar(nil), 'c:\bb.EXE', @saProcess, @saThread, false,
CREATE_DEFAULT_ERROR_MODE, Pchar(nil), Pchar(nil), siStartupInfo, piProcInfo);
if (not fSuccess) then
ShowMessage('Create Process fail')
else
ShowMessage('Create Process success')关闭进程:
TerminateProcess(piProcInfo.hProcess,0);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapShotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapShotHandle := CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))=UpperCase(AFileName)) or (UpperCase(FProcessEntry32.szExeFile )=UpperCase(AFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID), 0);
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
//调用
EndProcess('excel.exe');