2021年12月21日 星期二

Launch Notepad

 https://coderoad.ru/6645426/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0-%D0%B1%D0%BB%D0%BE%D0%BA%D0%BD%D0%BE%D1%82%D0%B0-%D0%B2-delphi

 Проблема блокнота в delphi 

 привет, мы используем версию Delphi 5. Мы получаем проблему при открытии блокнота в delphi. Мы хотим открыть блокнот по щелчку кнопки и передать ему данные, чтобы Блокнот мог отображать эти данные. Я не хочу его спасать. пожалуйста, помогите мне в этом. спасибо.  

 

uses
  Clipbrd;

procedure LaunchNotepad(const Text: string);
var
  SInfo: TStartupInfo;
  PInfo: TProcessInformation;
  Notepad: HWND;
  NoteEdit: HWND;
  ThreadInfo: TGUIThreadInfo;
begin
  ZeroMemory(@SInfo, SizeOf(SInfo));
  SInfo.cb := SizeOf(SInfo);
  ZeroMemory(@PInfo, SizeOf(PInfo));
  CreateProcess(nil, PChar('Notepad'), nil, nil, False,
                NORMAL_PRIORITY_CLASS, nil, nil, sInfo, pInfo);
  WaitForInputIdle(pInfo.hProcess, 5000);

  Notepad := FindWindow('Notepad', nil);
  // or be a little more strict about the instance found
//  Notepad := FindWindow('Notepad', 'Untitled - Notepad');

  if Bool(Notepad) then begin
    NoteEdit := FindWindowEx(Notepad, 0, 'Edit', nil);
    if Bool(NoteEdit) then begin
      SendMessage(NoteEdit, WM_SETTEXT, 0, Longint(Text));

      // To force user is to be asked if changes should be saved
      // when closing the instance
      SendMessage(NoteEdit, EM_SETMODIFY, WPARAM(True), 0);
    end;
  end
  else
  begin
    ZeroMemory(@ThreadInfo, SizeOf(ThreadInfo));
    ThreadInfo.cbSize := SizeOf(ThreadInfo);
    if GetGUIThreadInfo(0, ThreadInfo) then begin
      NoteEdit := ThreadInfo.hwndFocus;
      if Bool(NoteEdit) then begin
        Clipboard.AsText := Text;
        SendMessage(NoteEdit, WM_PASTE, 0, 0);
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LaunchNotepad('test string');
end;

沒有留言: