Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.08;
Скачать: CL | DM;

Вниз

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

 
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 вся ветка

Текущий архив: 2007.07.08;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.031 c
2-1180954499
хПх
2007-06-04 14:54
2007.07.08
Png в TimageList


9-1155566754
Zo
2006-08-14 18:45
2007.07.08
низкие фпс в opengl


15-1181384901
Суслик
2007-06-09 14:28
2007.07.08
Кому удалось поставить?


3-1176305371
Lavrenty
2007-04-11 19:29
2007.07.08
формат даты в DBGridEh


1-1178559317
Dmitry_177
2007-05-07 21:35
2007.07.08
Как chm-файлы справки открывать в программе?





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