Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2015, 11:53   #1
progzero
 
Регистрация: 25.05.2012
Сообщений: 7
Вопрос Работа с чужим окном

Здравствуйте! Есть чужое окно, его дескриптор я нашел. На этом окне размещены панели, которые в свою очередь выступают кнопками (их дескрипторы я тоже нашел). При нажатии определенной панели выскакивает меню. Мне нужно автоматизировать открытие тех или иных пунктов меню. Посылаю на кнопку (TPanel)
Код:
SendMessage(newbutton,WM_LBUTTONDOWN,0,0);
Открывается меню (его дескриптор получить не могу) в spy++ это меню имеет класс #32768.

Задача такая нужно получить дескриптор меню (а он постоянно всегда новый) и нажать любую кнопку в этом меню. Помогите разобраться.
progzero вне форума Ответить с цитированием
Старый 12.02.2015, 07:16   #2
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,281
По умолчанию

Плохой ответ
Еще студентами пытались как-то управлять сторонним приложением и въехали в тот же пень. Кнопочки основного окна нажимались на ура. А вот с всплывающими окнами возникли какие-то проблемы. До конца мы программу не доделали (это было больше похоже на эксперементы по программированию (программирование не наш основной профиль (мы строители-проектировщики), поэтому нам давали только азы)), но помню, что проблема решалась имтацией нажатия клавишь. Т.е. мы знали, сколько раз нужно нажать [TAB], чтобы попасть на нужную кнопку или edit в открывшемся окне. И симитировав нажатие этого самого [TAB] нужное количество раз получали фокус в нужном месте. Далее по аналогии.
Кстати, этот метод удачен тем, что при обновлении нашей программы (это был, кстати, SCAD) на новую версию, ее внешний интерфейс оставался почти не изменным. А вот дискрипторы могут изменится очень сильно. Например, если написанную на D7 программу собрать на XE, думаю все дискрипторы придется определять заново.
А плох этот метод всем остальным. Например кучей эмперических Sleep'ов.

Последний раз редактировалось Sibedir; 12.02.2015 в 07:46.
Sibedir вне форума Ответить с цитированием
Старый 12.02.2015, 07:39   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Раньше использовал такое:
Код:
 // Кликает по Менюхе в окне
 function Click_MainMenu_item(Form: Thandle; NumMenu:integer=0;
   NumItem:integer=0):variant;
var hm:Hmenu;  i, idmen:integer;
begin

hm:=GetMenu(form);
hm:=GetSubMenu(hm,NumMenu);
idMen:=GetMenuItemID(hm,NumItem);
if idMen<>0 then
 PostMessage(form,WM_COMMAND,idMen,0);
result:=idmen;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 10:33   #4
progzero
 
Регистрация: 25.05.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Раньше использовал такое:
Код:
 // Кликает по Менюхе в окне
 function Click_MainMenu_item(Form: Thandle; NumMenu:integer=0;
   NumItem:integer=0):variant;
var hm:Hmenu;  i, idmen:integer;
begin

hm:=GetMenu(form);
hm:=GetSubMenu(hm,NumMenu);
idMen:=GetMenuItemID(hm,NumItem);
if idMen<>0 then
 PostMessage(form,WM_COMMAND,idMen,0);
result:=idmen;
end;
Это конечно прекрасно, но как узнать дескриптор в этом случае? Всплывающее меню в Spy++ не относится к приложению (не является дочерним).
progzero вне форума Ответить с цитированием
Старый 16.02.2015, 11:24   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Всплывающее меню в Spy++ не относится к приложению
А при чем тут оно? Тебе нужно узнать дескриптор главного окна, к которому это меню прикреплено, о чем и говорит параметр Form: Thandle
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.02.2015, 12:02   #6
progzero
 
Регистрация: 25.05.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А при чем тут оно? Тебе нужно узнать дескриптор главного окна, к которому это меню прикреплено, о чем и говорит параметр Form: Thandle
Дескриптор главного окна я знаю, если применить GetMenu(form) значение возвращаемое будет равно 0. Поэтому и предполагаю, что это меню всплывающее не прикреплено к главной форме, а создается динамически, т.к. в Spy++ его под главной формой нету, а висит в корне под рабочим столом с классом #32768 и его дескриптор меняется каждый раз при открытии.
progzero вне форума Ответить с цитированием
Старый 17.02.2015, 17:25   #7
progzero
 
Регистрация: 25.05.2012
Сообщений: 7
По умолчанию

Так есть у кого-нибудь идеи или готовые решения? Может кто-нибудь мне помочь?
progzero вне форума Ответить с цитированием
Старый 17.02.2015, 17:50   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

У меня нет. Я все что знаю о меню сказал. Если это какое-то popup меню, то тут я ничего не скажу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.02.2015, 20:34   #9
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от progzero Посмотреть сообщение
Так есть у кого-нибудь идеи или готовые решения? Может кто-нибудь мне помочь?
Скажи, какая программа - возможно появится решение.
Iron Monk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с чужим окном W0LF Общие вопросы Delphi 14 13.05.2014 11:18
работа с чужим консольным окном C# Zer0 Помощь студентам 0 01.09.2011 03:48
Работа с чужим окном определенного заголовка Marsel737 Общие вопросы Delphi 12 08.12.2009 23:11
Работа с чужим приложением ERASERROR Win Api 2 28.01.2008 15:22
работа с чужим окном RammFan Win Api 1 18.01.2007 20:21