最近写一个程序,需要在业务代码开始之前先运行一个java写的程序,这个程序运行之后是个黑黑的cmd窗口,这是一个命令行程序
程序退出的时候,我希望可以同时向这个CMD窗口发送一些命令(Exit),使得相关java程序正常退出,然后关闭这个cmd窗口。有没有办法实现?
13 个解决方案
#1
shellexecute(form1.handle,'open','c:\vcvarsall.bat','-s','',sw_show);
一般执行完会自动关闭
#2
Shellexecute执行,如果查找窗口可以用进程快照,CreateToolhelp32Snapshot,遍历进程,找到了就发送WM_Close消息或者直接TermianteProcess
#3
WinExec(PChar(bat),SW_HIDE)
#4
认为该楼一般不会错,呵呵
#5
记得默认情况下,执行完一个外部程序后,命令窗口就是自动关闭退出的
#6
我要运行的程序是一个驻留程序....不会自动退出的...
#7
不会自动退出那就用遍历进程的方法TerminateProcess,只要知道进程名就好办
#8
var
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName := ExtractFilePath(ParamStr(0)) + 'A.bat';
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
#9
用FindWindow找到句柄,
再用sendmessage或postmessage发送WM_CLOSE关闭之。
若关不了,就直接TerminateProcess
再用sendmessage或postmessage发送WM_CLOSE关闭之。
若关不了,就直接TerminateProcess
#10
哦,还有交互的需要啊,那就使用doscmd控件
#11
在bat里最后加上一行:
EXIT
执行完了就自动退CMD窗口了啊。
EXIT
执行完了就自动退CMD窗口了啊。
#12
WinExec(PChar(bat),SW_HIDE)
#13
用DosCommand解决了~~
#1
shellexecute(form1.handle,'open','c:\vcvarsall.bat','-s','',sw_show);
一般执行完会自动关闭
#2
Shellexecute执行,如果查找窗口可以用进程快照,CreateToolhelp32Snapshot,遍历进程,找到了就发送WM_Close消息或者直接TermianteProcess
#3
WinExec(PChar(bat),SW_HIDE)
#4
认为该楼一般不会错,呵呵
#5
记得默认情况下,执行完一个外部程序后,命令窗口就是自动关闭退出的
#6
我要运行的程序是一个驻留程序....不会自动退出的...
#7
不会自动退出那就用遍历进程的方法TerminateProcess,只要知道进程名就好办
#8
var
BatchFileName: string;
ProcessInfo: TProcessInformation;
StartUpInfo: TStartupInfo;
begin
BatchFileName := ExtractFilePath(ParamStr(0)) + 'A.bat';
FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
StartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(BatchFileName), nil, nil,
False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
ProcessInfo) then
begin
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
end;
end;
#9
用FindWindow找到句柄,
再用sendmessage或postmessage发送WM_CLOSE关闭之。
若关不了,就直接TerminateProcess
再用sendmessage或postmessage发送WM_CLOSE关闭之。
若关不了,就直接TerminateProcess
#10
哦,还有交互的需要啊,那就使用doscmd控件
#11
在bat里最后加上一行:
EXIT
执行完了就自动退CMD窗口了啊。
EXIT
执行完了就自动退CMD窗口了啊。
#12
WinExec(PChar(bat),SW_HIDE)
#13
用DosCommand解决了~~