读书人

用ShellExecute打开记事本后怎么保存

发布时间: 2012-06-10 14:03:15 作者: rapoo

用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来打开记事本然后根据记事本所在进程句柄来判断记事本是否关闭,例如:

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;

读书人网 >.NET

热点推荐