Показать сообщение отдельно
  #2  
Старый 06.12.2017, 06:52
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Delphi 10.1 Berlin
Вот так работает:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  str : String = 'test string';
var
  hp : HWND;
  he  :HWND;
  pstr : pchar;
begin
  hp := FindWindow(nil,'TestMainForm');
  If IsWindow(hp) Then
    Begin
      he := FindWindowEx(hp,0,'TEDIT',Nil);
      if IsWindow(he)
        Then
          Begin
            GetMem(pstr,SizeOf(Char)*(Length(str)+1));
            Try
              ZeroMemory(pstr,SizeOf(Char)*(Length(str)+1));
              StrPCopy(pstr,str);
              SendMessage(he,WM_SETTEXT,SizeOf(str),NativeInt(pstr))
            Finally
              freeMem(pstr,SizeOf(Char)*(Length(str)+1));
            End;
          End
        Else ShowMessage('Edit not found');
    End
  Else ShowMessage('Main window not found.');
end;
Второе приложение - просто форма с одним TEdit'ом.
Что будет, если на форме несколько TEdit - не проверял. Может быть потребуется сделать EnumWindow/GetWindowInfo для определения какой именно нужен.
Ответить с цитированием