Показать сообщение отдельно
  #4  
Старый 25.08.2009, 18:16
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

pesi, листик Word отличается от Блокнота как минимум классом окна. В моем MS Office XP этот класс — «_WwG». В других версиях Word смотрите сами, какой класс окна. Все остальное можете делать (почти) так же, как в случае с Блокнотом.
Код:
...

var
  Form1: TForm1;
  WordDoc: HWND;
  function EnumChildWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;

implementation

{$R *.dfm}

function EnumChildWndProc(hndl: HWND; lprm: LPARAM): BOOL; stdcall;
const
  WordDocClass = '_WwG';
var
  WndClassName: PChar;
begin
  Result := True;
  GetMem(WndClassName, 255);
  try
    GetClassName(hndl, WndClassName, 255);
    if StrPas(WndClassName) = WordDocClass then
    begin
      WordDoc := hndl;
      Result := False;
    end;
  finally
    FreeMem(WndClassName, 255);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wnd: HWND;
  i: Integer;
  s: string;
begin
  WordDoc := 0;
  wnd := FindWindow(nil, PChar('Документ1 - Microsoft Word'));
  if wnd <> 0 then
  begin
    EnumChildWindows(wnd, @EnumChildWndProc, 0);
    if WordDoc <> 0 then
    begin
      s := 'Hello';
      for i := 1 to Length(s) do
        PostMessage(WordDoc, WM_CHAR, Word(s[i]), 0);
      PostMessage(WordDoc, WM_KEYDOWN, VK_RETURN, 0);
    end
    else ShowMessage('Word list is not found!');
  end
  else ShowMessage('MS Word is not found!');
end;
Ответить с цитированием