Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Вниз

Как получить доступ к контролам другого окна?   Найти похожие ветки 

 
tytus ©   (2007-01-31 17:52) [0]

Доброго дня всем. По ф-ии EnumWindows заполняю листбокс с узказателем на запись. Собственно, хендлы окон уже есть. Но как отличить, что это форма, а не листбокс на форме (или кнопка)?. Я хочу по двойному клику заполнить список контролов.
Вот что пока есть.
type
 PFindWindowStruct=^TFindWindowStruct;
 TFindWindowStruct=record
   Caption:string;             //текст окна
   ClassName:string;         // клас окна
   WindowHandle:THandle;//хендл найденого окна
   HandleStr:string;         //хендл  в хекс-виде
 end;

private
 FWS:PFindWindowStruct;

implementation
function EnumWindowsProc(hWindow:hWnd;lParam:LongInt):Bool;stdcall;
var
  lpBuffer : PChar;
  WndText:string;
  WndClass:string;
  WStyle:LongInt;
  IsChaild:LongInt;
begin
GetMem(lpBuffer, 255);
try
 WndText:=EmptyStr;
 WndClass:=EmptyStr;
 with MAinFm do
 begin
   if GetWindowText(hWindow, lpBuffer, 255) > 0 then WndText:=StrPas(lpBuffer);
   if GetClassName(hWindow, lpBuffer, 255) > 0 then WndClass:=StrPas(lpBuffer);
   WStyle:=GetWindowLong(hWindow,GWL_STYLE);
   IsChaild:=GetWindowWord(hWindow,GWL_HWNDPARENT);
//    if Trim(WndText)<>EmptyStr then
   if (WStyle>0)and(IsChaild=0) then
   begin
     New(FWS);
     FWS^.Caption:=WndText;
     FWS^.ClassName:=WndClass;
     FWS^.WindowHandle:=hWindow;
     FWS^.HandleStr:=IntToHex(hWindow,8);
     LB1.AddItem("",TObject(FWS));
   end;
 end;
finally
 FreeMem(lpBuffer, sizeof(lpBuffer^));
end;
Result:=true;
end;
В приведенном коде пытался отображать только главные окна.
Но суть в другом. Нужно по двойному клику перебрать контролы на форме. Это мне нужно, чтобы содрать с них текст.
procedure TMainFm.FormCreate(Sender: TObject);
var
 WindowInfo:TFindWindowStruct;
begin
EnumWindows(@EnumWindowsProc,LongInt(@WindowInfo));
end;


 
Elen ©   (2007-02-01 07:45) [1]


> Но как отличить, что это форма, а не листбокс на форме

А класс окна на что? Ну если еще сомневаешся то можеш проверять класс парента.


 
Elen ©   (2007-02-01 07:52) [2]


> tytus

Кстати для получения листбокса на форме нужен не EnumWindows, a EnumChildWindows


 
tytus ©   (2007-02-01 10:04) [3]

>Elen ©   (01.02.07 07:52) [2]
EnumChildWindows проканало. А как теперь получить с него текст?
GetWindowText и SendMessage(ChildHandle,WM_GETTEXT.....) не помогает.


 
tytus ©   (2007-02-01 10:59) [4]

Короче до меня доперло.
Кинул на форму RichEdit(RE1), ListBox(LB2) и вот что получилось.
Сей код по клику на кнопке.

n:=LB2.ItemIndex;
if n=-1 then exit;
if UpperCase(PFindWindowStruct(LB2.Items.Objects[n])^.ClassName)="TLISTBOX" then
 begin
   LBCount:=SendMessage(PFindWindowStruct(LB2.Items.Objects[n])^.WindowHandle,
     LB_GETCOUNT,0,0);
   RE1.Lines.Add(IntToStr(LBCount));
   for i:=0 to LBCount-1 do
   begin
     GetMem(Text,255);
     TextLen:=SendMessage(PFindWindowStruct(LB2.Items.Objects[n])^.WindowHandle,
       LB_GETTEXT,i,Integer(Text));
     s:=StrPas(Text);
     RE1.Lines.Add(s);
     FreeMem(Text);
   end;
Все строки чужого листбокса содрались до единой в Richedit!!!



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.07.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.062 c
2-1181973389
Kolan
2007-06-16 09:56
2007.07.08
Сообщение TStringGrid что закончили редактировать ячейку, есть?


15-1181381873
ZeroDivide
2007-06-09 13:37
2007.07.08
COM-порт на новом железе


2-1181798599
fd979
2007-06-14 09:23
2007.07.08
Запись и чтение


3-1176381602
svt
2007-04-12 16:40
2007.07.08
Уважаемы мастера,подскажите что может быть с соединением


15-1180951393
rolex
2007-06-04 14:03
2007.07.08
ошибка tcp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский