www.demi-s.narod.ru

Delphi
Статьи:

· Интерфейс

· WinAPI

· Компоненты

· Базы данных

· ShellAPI



WinAPI


Получить/Установить текст в TMemo из другого приложения

У Вас была такая ситуация, где Вы должны были копировать/вставить некоторый текст из другого приложения (без использования OLE)?

Рассмотрим этот код:

Function GetOtherWindowMemoText(const sCaption : String) : WideString;
var
         hWindow : THandle; 
         hChild  : THandle; 

         aTemp      : array[0..5000] of Char;
         sClassName : String;
begin
         Result := ''; 

         hWindow := FindWindow(Nil,PChar(sCaption)); 

         if hWindow = 0 then begin
            ShowMessage('НЕ МОГУ найти программу');
            exit;
         end;

         hChild := GetWindow(hWindow, GW_CHILD);
         while hChild <> 0 do Begin
               if GetClassName(hChild, aTemp, SizeOf(aTemp)) > 0 then begin
                  sClassName := StrPAS(aTemp);

                  if sClassName = 'Edit' then begin
                     SendMessage(hChild,WM_GETTEXT,SizeOf(aTemp),Integer(@aTemp));

                     Result := StrPAS(aTemp);
                  end;
               end;
               hChild := GetWindow(hChild, GW_HWNDNEXT); 
         end;
end;

Function SetOtherWindowMemoText(const sCaption : String; const sText : String) : WideString;
var
         hWindow : THandle; 
         hChild  : THandle; 

         aTemp      : array[0..5000] of Char;
         sClassName : String; 
begin
         Result := ''; 

         hWindow := FindWindow(Nil, PChar(sCaption)); 

         if hWindow = 0 then begin
            ShowMessage('НЕ МОГУ найти программу'); 
            exit;
         end;

         hChild := GetWindow(hWindow, GW_CHILD);
         while hChild <> 0 do Begin
               if GetClassName(hChild, aTemp, SizeOf(aTemp)) > 0 then begin
                  sClassName := StrPAS(aTemp);

                  if sClassName = 'Edit' then begin
                     StrPCopy(aTemp,sText); 
                     SendMessage(hChild,WM_SETTEXT,SizeOf(aTemp),Integer(@aTemp));
                  end;
               end;
               hChild := GetWindow(hChild, GW_HWNDNEXT); 
         end;
end;

Если, к примеру, Вы хотите получить текст из Notepad, то Вы должны будете передать заголовок блокнота в функцию GetOtherWindowMemoText и назначить возвращаемое значение на RichEdit, то:

...............................................
//Получить текст из блокнота.
RichEdit1.Lines.Text := GetOtherWindowMemoText('Untitled - Notepad');
...............................................
//Установить текст в блокноте.
SetOtherWindowMemoText('Untitled - Notepad', RichEdit1.Lines.Text);
...............................................

Abdulaziz Jasser


Hosted by uCoz