Главная страница
    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.04 c
15-1181237054
vch
2007-06-07 21:24
2007.07.08
В два раза больше - можно?


15-1181230556
question
2007-06-07 19:35
2007.07.08
MS SQL 2000 и MS SQL 2005 на одном компьютере под Windows 2003


2-1181817231
SunriseGirl
2007-06-14 14:33
2007.07.08
Базы данных, работа с компонентами


15-1180987047
Курдль
2007-06-04 23:57
2007.07.08
Поиск работников.


15-1181101093
KSergey
2007-06-06 07:38
2007.07.08
Что посетить в Москве с ребенком 10-ти лет?





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