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

Вниз

Работать с окнами по составленному сценарию   Найти похожие ветки 

 
SKIPtr   (2008-02-23 09:23) [0]

Подскажите пожалуйста  у меня есть список ListBox там записаны имена окн и что с ними нужно сделать Дальше я перебираю все окна чтоб найти окна с которыми буду выполнять соответствующие действия Как лучше производить сверку

Задача вроде постая но я хочу спросить кто это уже делал как лучше поступить а то изобретая велосипед боюсь вдруг получаться квадратные колеса


 
Anatoly Podgoretsky ©   (2008-02-23 11:49) [1]

Дык простая и есть if A = B then


 
SKIPtr   (2008-02-23 15:33) [2]

В ListBox будет записано примерно информация   окно с именем А закрыть окно с именем Б свернуть и программа должна обнаружить появление этих окон и выпрлнить соответствубщие действия так как это лучше


 
Сергей М. ©   (2008-02-23 15:56) [3]


> окно с именем А


У окна нет имени.


 
SKIPtr   (2008-02-23 17:51) [4]

под именем я имел заголовок окна ну или имя класса окна


 
Сергей М. ©   (2008-02-23 18:36) [5]

С заголовком и/или классом окна работает функция FindWindow[Ex]

Но, скажем, у окна кнопки (TButton) нет заголовка. Как будешь выкручиваться ?


 
SKIPtr   (2008-02-23 20:43) [6]

программа должна работать с окнами которые видет  FindWindow будет там заголовок или класс это для меня не принципиально когда у меня была только команда закрыть окно я брал строку с ListBox через FindWindow я получал доступ к этому окну и закрывал его И потом со следующей строкой тоже самое Если открыто несколько таких окон за несколько проходов они закрывались все Когда появилась команда свернуть FindWindow мне уже не даст доступ к всем окнам чтоб их свернуть так как быть


 
Сергей М. ©   (2008-02-23 21:03) [7]


> программа должна работать с окнами которые видет  FindWindow


FindWindow[Ex] "видит" любые окна, которые созданы "классически", т.е. с пом. CreateWindow[Ex]


> FindWindow мне уже не даст доступ к всем окнам


FindWindow ищет любые существующие верхнеуровневые окна текущего десктопа.


 
SKIPtr   (2008-02-24 07:20) [8]

я пишу что оно не даст доступ ко всем окнам потому что окон может быть много а команда найдет ближайшее она не может вернуть ссылку на несколько окон


 
Leonid Troyanovsky ©   (2008-02-24 10:23) [9]


> SKIPtr   (24.02.08 07:20) [8]

RTFM: EnumWindows.

--
Regards, LVT.


 
SKIPtr   (2008-02-25 08:30) [10]

Вот в начале я писал у меня есть список команд ListBox  и список окон (или список не нужен?)  мне нужен совет как лучше составить алгоритм сравнения этих списков


 
Плохиш ©   (2008-02-25 10:44) [11]


> SKIPtr   (25.02.08 08:30) [10]

Screen.Forms


 
Leonid Troyanovsky ©   (2008-02-25 11:03) [12]


> SKIPtr   (25.02.08 08:30) [10]

> Вот в начале я писал у меня есть список команд ListBox  
> и список окон (или список не нужен?)  мне нужен совет как
> лучше составить алгоритм сравнения этих списков

Для работы с окнами нужно:
1. Выбрать нужные окна, т.е. узнать их хендлы.
2. Установить на потоки, создавшие эти окна, хук WH_CALLWNDPROC*
для отслеживания валидности оных хендлов.
3. Применять к выбранным хендлам требуемые функции либо
слать им нужные сообщения.

Для выбора нужных окон необходимо использовать EnumWindows,
сравнивая, например, классы окон (GetClassName) и иную
имеющуюся информацию.

--
Regards, LVT.


 
SKIPtr   (2008-02-25 12:25) [13]


> Для выбора нужных окон необходимо использовать EnumWindows,
>
> сравнивая, например, классы окон (GetClassName) и иную
> имеющуюся информацию.
>

Тут дело в том меня интересуе не сами функции а как это реализовать ну например брать строку в ListBox и с этой строкой пройти по EnumWindows потом брать следующею строку и опять EnumWindows или находим текущий окно через EnumWindows пробегаем по строкам ListBox находим следующее окно и опять строки ListBox или есть еще какой другой метод


 
Leonid Troyanovsky ©   (2008-02-25 14:33) [14]


> SKIPtr   (25.02.08 12:25) [13]

> реализовать ну например брать строку в ListBox

Я ж описал алгоритм.

Листбокса тут явно не хватит, нужны более развитые структуры.
Во-первых, нужен список имен искомых классов,
во-вторых, список найденных хендлов окон.

Если сделать их полями формы, то ссылку на форму можно передать
в перечисляющую функцию в последнем параметре EnumWindows.
А сравнивать имена классов окон можно хоть StrLIComp.

Можно немного модифицировать [12], начиная с установки глобального
хука, который будет следить как за появлением окон верхнего уровня,
так и за их уничтожением, т.е., следить за актуальностью списка хендлов.
После установки хука делаем EnumWindows, или посылаем окнам
верхнего уровня широковещательный SendMessageTimeout.

--
Regards, LVT.


 
Amoeba ©   (2008-02-25 16:26) [15]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=432


 
Leonid Troyanovsky ©   (2008-02-25 17:11) [16]


> Amoeba ©   (25.02.08 16:26) [15]

> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=432


function EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall; // Обязательно stdcall !!!
Var
   Nm:Array[0..255] of Char;  // буфер для имени
   Cs: Array[0..255] of Char; // буфер для класса
Begin
   GetWindowText(Wd,Nm,255); // считываем  текст заголовка окна
   GetClassName(Wd,Cs,255); // считываем название класса окна
   ListBox1.Items.Add

Обязательно передаем в Param ссылку на ListBox1 (или FormX)!!!

Ну, для первого знакомства, ничего, сойдет ;)

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2008-02-25 17:15) [17]


> Leonid Troyanovsky ©   (25.02.08 17:11) [16]

> function EnumProc (Wd: HWnd; Param: LongInt): Boolean; stdcall;

Да, во-ще, BOOL, если проявить занудство.

--
Regards, LVT.



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

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

Наверх




Память: 0.51 MB
Время: 0.015 c
6-1180019290
flaxe
2007-05-24 19:08
2008.03.23
"Фильтр" пакетов


2-1204035970
s_t_d
2008-02-26 17:26
2008.03.23
Масштаб просмотра для элемента QuickRep


15-1202320985
Dmitry_V
2008-02-06 21:03
2008.03.23
насколько трудоёмко программирование ActiveX?


3-1191587246
BlackCat
2007-10-05 16:27
2008.03.23
Разграничение полномочий в приложении, работающем с БД


15-1202563215
Lip
2008-02-09 16:20
2008.03.23
Где лучше ловить исключение?