用ShellExecute打开记事本后,怎么保存后再执行下一行DELPHI代码
用ShellExecute打开记事本后,如何保存后再执行下一行DELPHI代码
begin
ShellExecute(Handle,'Open',PChar( 'notepad.exe'),PChar('c:\remark.txt'),nil,SW_SHOWNORMAL);
end;
我的问题是第一行代码用ShellExecute打开记事本c:\remark.tet后,程序然后直接运行下一行代码.结果redtMemo中的内容还是原来c:\remark.txt中的内容
我的意思是修改并保存remark.txt后,程序在执行redtMemo.lines.LoadFromFile('c:\remark.txt');以获取修改后的内容.
希望各位朋友帮帮忙!小弟先谢谢了
------解决方案--------------------
ShellExecute是开启外部程序,其实你可以用CreatePress来打开记事本然后根据记事本所在进程句柄来判断记事本是否关闭,例如:
begin
ShellExecute(Handle,'Open',PChar( 'notepad.exe'),PChar('c:\remark.txt'),nil,SW_SHOWNORMAL);
end;
我的问题是第一行代码用ShellExecute打开记事本c:\remark.tet后,程序然后直接运行下一行代码.结果redtMemo中的内容还是原来c:\remark.txt中的内容
我的意思是修改并保存remark.txt后,程序在执行redtMemo.lines.LoadFromFile('c:\remark.txt');以获取修改后的内容.
希望各位朋友帮帮忙!小弟先谢谢了
------解决方案--------------------
ShellExecute是开启外部程序,其实你可以用CreatePress来打开记事本然后根据记事本所在进程句柄来判断记事本是否关闭,例如:
- Delphi(Pascal) code
var si:TStartupInfo; pi:TProcessInformation; hwin:HWND; begin FillChar(si, Sizeof(si), #0);//必须将si结构的成员初始化为0 si.cb := Sizeof(si); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := SW_hide; if CreateProcess(pchar('c:\windows\notepad.exe'), nil, nil, nil, false, CREATE_NEW_CONSOLE, nil, nil, si, pi) then begin begin //当前进程会一直等到记事本进程结束,然后才往下执行 WaitForSingleObject(pi.hProcess,INFINITE); ////// //执行你其他的操作 ///// end; end;
------解决方案--------------------
借6楼贴的 WaitForSingleObject
var
proc_info : TProcessInformation;
startinfo : TStartupInfo;
Success : Boolean;
szExeName, szFileName : String;
begin
szExeName := 'c:\windows\notepad.exe';
szFileName := '.\test.txt';
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startinfo, sizeof(TStartupInfo), 0);
startinfo.cb := sizeof(TStartupInfo);
Success := CreateProcess(nil,
pchar(szExeName + ' ' + szFileName),
nil,
nil,
false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,
nil,
startinfo,
proc_info);
if Success then begin
WaitForSingleObject(proc_info.hProcess,INFINITE);
Memo1.Lines.LoadFromFile(szFileName);
end;
end;