Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возвращаясь к вопросу об уникальности окон


Akvilon ©   (2003-04-24 18:34:00) 

И все же, Господа, неужели нету способа отличить друг от друга два запущенных калькулятора. Без хендла, конечно.


panov   (2003-04-24 22:54:00) [1]

Странно, что такая проблема возникла, если ты сам запускаешь калькулятор.

Запускай внешнюю программу CreateProcess, получай Handle и спокойно используй его.


Scorp   (2003-04-24 22:44:00) [2]

Style прав. Если вы делаете программу-демо, то нужно как-то отключить клаву и мышь в этом процессе. Далее - как быть с другими программами, их то тоже надо "отключить", авось какой-то месседж-бокс выскочит!
Что-то вы тут не додумали. Не такое оно простое дело. Есть программы (даже использовал одну, только забыл, как называется), которые генерят авишки с GUI и всего в нем происходящего. Вот тут - не придерешся, все работает. Но это уже совсем другая история.


Style   (2003-04-24 22:15:00) [3]

Ну это же демонстрационная программа.. Когда она работает
нужно вообще все блокировать. Т.е.

1. Перед ее запуском свернуть все окна
2. Заблокировать нажатие клавы и мышь (кроме Кнопки ESC к примеру)
3. Показать демонстрацию.
4. Востановить окна.


Akvilon   (2003-04-24 21:52:00) [4]

>Scorp
Программу я запускаю сам и имитирую работу только с ней. Используя WindoText и ClassName я вобщем-то неплохо справлялся, если не хватает этого использовал информацию о родителе, в предположении, что дети к нему привязаны (нельзя переместить) и ориентировался по координатам родителя, в принципе можно добраться и до главного окна, оно у меня уж точно уникально. Проблема только в дочерних окнах, которые можно перемещать. И вот как их найти, если ClassName и Windowtext одинаковы. Может есть еще что-нибудь, типа ClassName, а то всё хендлы одни? Или хендел как-нито упорядоченно выделяется между детьми?
А где такие проги?


Akvilon   (2003-04-24 21:19:00) [5]

>Scorp
Программу я запускаю сам и имитирую работу только с ней. Используя WindoText и ClassName я вобщем-то неплохо справлялся, если не хватает этого использовал информацию о родителе, в предположении, что дети к нему привязаны (нельзя переместить) и ориентировался по координатам родителя, в принципе можно добраться и до главного окна, оно у меня уж точно уникально. Проблема только в дочерних окнах, которые можно перемещать. И вот как их найти, если ClassName и Windowtext одинаковы. Может есть еще что-нибудь, типа ClassName, а то всё хендлы одни? Или хендел как-нито упорядоченно выделяется между детьми?
А где такие проги?


Scorp   (2003-04-24 20:49:00) [6]

Насколько я понял - ваша программа имитирует работу с каким-либо окном за каким-то заданым скриптом. Вот тут есть подвох - у вас нету никаких гарантий, что ведется работа с нужным окном. Нету защиты от его "подмены", или вобще ищезновения (тоесть завершения процесса), как я понимаю. Я не знаю всех подробностей, но мне кажется, что идея с самого начала обречена на провал, она не пересекается с особеностями построения Windows-приложений и самой Windows. Есть уже готовые проги, которые демонстрируют работу с программами, записывая скрипт для клавиатуры и мыши, а потом запуская нужний процесс как дочерний, отображают это все на нем.
К сожалению, у меня пока нет каких-либо умных идей. Будут - напишу.


Scorp   (2003-04-24 20:08:00) [7]

>Style © (24.04.03 20:05)
>А убить другие калькуляторы нельзя??? Ну хоть свернуть их,чтобы >Юзеров не пугали.

Єто - и есть что как говорится программерский ИЗВРАТ. Вот такого пожалуйста не советуйте, єто - через за***цу!


Scorp   (2003-04-24 20:06:00) [8]

Озадачили, понимаешь :))
Сейчас будеи думать .......


Style   (2003-04-24 20:05:00) [9]

А убить другие калькуляторы нельзя??? Ну хоть свернуть их,чтобы Юзеров не пугали.


Akvilon   (2003-04-24 19:58:00) [10]

>Scorp
Действительно в корень попали. А надо вот что. Беру прогу и делаю показ как с ней работать. Т.е. беру мышь, двигаю к кнопке через SetCursorPos, нажимаю (mouse_event), появляется чего-нибудь для ввода данных, имитирую нажатие клавиш (Keybd_event). Очень наглядно. Вся проблема в координатах. Куда мышь двигать, где имитировать клики? А надо, по-моему, знать об окне чего-нибудь такое, по чему его сразу найти можно.
Подкинте идейку, Господа, может я иду куда ни туда?
В общем то у меня уже работает все, использую WindowText и ClassName, запоминаю, а потом нахожу, но бывает как с калькуляторами: нет Windowtext, а Classname одинаковые.
Я сам запускаю "калькулятор" и на нем показываю.


Scorp   (2003-04-24 19:28:00) [11]

Очень интересный вопрос, а можно спросить, для чего это?
Мне кажется, что я уловил как это говорится "корень", и думаю, что можно придумать лучшее решение!
Так очень часто бывает - задают вопросы как бы не по теме, а потом оказывается, что это только из-за того, что все знания оканчиваются на хендлах окон (извините, если это вас не косается). Так что - проблемма интересная, задавайте вопрос, от которого ноги ростут, и подумаем вместе ...


DVM   (2003-04-24 19:19:00) [12]

Вообще то странно Вы рассуждаете. Разница между двумя запущенными калькуляторами имеет смысл только когда они работают. Записать какую либо инфу о них можно, но лишено смысла, т.к. при следующем запуске это будут ДРУГИЕ ОКНА, ДРУГИЕ ПРОЦЕССЫ, ДРУГИЕ КАЛЬКУЛЯТОРЫ. ТАКИХ ЖЕ ТОЧНО СКОРЕЕ ВСЕГО БОЛЬШЕ НЕ БУДЕТ! А пока они запущены их ОДНОЗНАЧНО идентифицирует хэндл окна. И с чего Вы взяли, что хэндл - это временное. Пока окно существует - очень даже постоянная весч.


Akvilon   (2003-04-24 19:07:00) [13]

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


DVM   (2003-04-24 18:44:00) [14]

А ID процесса не сгодится?


Наверх

Титульная страница Поиск, карта сайта Написать письмо