Главная страница
    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.038 c
15-1180475224
No_Dead
2007-05-30 01:47
2007.07.08
Криптосистемы теряют стойкость


4-1169975166
LENIN_INC
2007-01-28 12:06
2007.07.08
LENIN INC WIN32API Library v1.2 (build 23.08.2006)


15-1181035461
Megabyte
2007-06-05 13:24
2007.07.08
У вас такое часто бывает?


15-1181377892
matt
2007-06-09 12:31
2007.07.08
Приблуда для дельфи


2-1181677472
Gaist
2007-06-12 23:44
2007.07.08
Создание авто- загрузочной проги.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский