![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возвращаясь к вопросу об уникальности окон
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 процесса не сгодится?