begin
  
    ShellExecute(Handle,'Open',PChar( 'notepad.exe'),PChar('c:\re.txt'),nil,SW_SHOWNORMAL);
    end;我的问题是第一行代码用ShellExecute打开记事本c:\re.tet后,程序然后直接运行下一行代码.结果redtMemo中的内容还是原来c:\re.txt中的内容
我的意思是修改并保存re.txt后,程序在执行redtMemo.lines.LoadFromFile('c:\re.txt');以获取修改后的内容.
希望各位朋友帮帮忙!小弟先谢谢了

解决方案 »

  1.   

    ShellExecute是开启外部程序,其实你可以用CreatePress来打开记事本然后根据记事本所在进程句柄来判断记事本是否关闭,例如: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;或是
    你自己开个线程监控readme.txt(这个方法可以试试,没实践过)
      

  2.   

    你直接通个memo来代替系统的记事本输入不就可以了吗?或者用sleep等待一下,代码如下:ShellExecute(0,0,'notepad','c:\re.txt',0,1);
    sleep(12000);//等待12秒。
    redtMemo.lines.LoadFromFile('c:\re.txt');
    刚然,比较完美的做法是监听文件变化,来实时载入,代码就比较多了。
    还有一种比较好用的方法是不停的取该txt文件的大小,发现大小发生变化了,再载入到redtMemo中。
      

  3.   

    网络搜索“delphi 调用外部程序并等待其运行结束”
      

  4.   

    楼主617105好: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;
    这样是打开一个空白的记事本,我的意思是打开已有的记事本,然后在编辑,最后保存。
      

  5.   

    不如把re.txt加载到redtMemo控件里修改,然后保存文件。
      

  6.   

    http://hi.baidu.com/time9154/blog/item/cb9b3710f4ac94f0c3ce79bf.html
      

  7.   

    借6楼贴的 WaitForSingleObjectvar
      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;