Как отследить всплывающее меню ?
От: butsefal  
Дата: 03.08.06 02:05
Оценка:
Здравствуйте, подскажите новичку, пожалуйста.
Я пытаюсь написать программу, которая отслеживала бы деятельность другой программы автоматически. Исходная программа имеет графическое окно, в которое выводятся числовые данные обработки в виде непрерывного массива в реальном времени. Исходников нет, в коде копаться сложно. При этом данные прогой прорисовываются в окне, Winspector показывает, что никаких под-окон это окно не имеет. Если нажать в окне правую кнопку мыши, то всплывает меню, в котором есть кнопка Copy Data. При её выборе данные из окна копируются на Clipboard, откуда их достать просто. Handle основного окна я достать могу. Но вот как достать handle всплывающего меню и список элементов ? Оно закрывается когда я хочу на него навести Spy. И как потом в этом меню выбрать Copy кнопку ... Короче, нужен скрипт, который бы списывал данные из основного окна без моего участия. Можно предложить вариант симуляции нажатия и смещения мышки на данную кнопку по координатам, но он удручает ...
Заранее спасибо.
Re: Как отследить всплывающее меню ?
От: Аноним  
Дата: 03.08.06 03:43
Оценка:
Здравствуйте, butsefal, Вы писали:

А вызывать GetWindowText() для основного окна программы не пробовали ?
А по поводу меню проще наверное слать главному окну проги сообщение WM_COMMAND.
Re: Как отследить всплывающее меню ?
От: Master Yoda Великобритания  
Дата: 03.08.06 03:49
Оценка:
Здравствуйте, butsefal, Вы писали:

B>Я пытаюсь написать программу, которая отслеживала бы деятельность другой программы автоматически. Исходная программа имеет графическое окно, в которое выводятся числовые данные обработки в виде непрерывного массива в реальном времени. Исходников нет, в коде копаться сложно. При этом данные прогой прорисовываются в окне, Winspector показывает, что никаких под-окон это окно не имеет. Если нажать в окне правую кнопку мыши, то всплывает меню, в котором есть кнопка Copy Data. При её выборе данные из окна копируются на Clipboard, откуда их достать просто. Handle основного окна я достать могу. Но вот как достать handle всплывающего меню и список элементов ? Оно закрывается когда я хочу на него навести Spy. И как потом в этом меню выбрать Copy кнопку ... Короче, нужен скрипт, который бы списывал данные из основного окна без моего участия. Можно предложить вариант симуляции нажатия и смещения мышки на данную кнопку по координатам, но он удручает ...


Запускаешь программу. Запускаешь Spy++. Находишь окно программы, запускаешь перехват сообщений для него. Переключаешься опять на программу. Вызываешь меню, выбираешь Copy Data. Переключаешься на Spy++ и смотришь, с какими параметрами был послан последний WM_COMMAND. После этого все, что тебе нужно будет делать — посылать окну этой программы WM_COMMAND с аналогичными параметрами
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: Как отследить всплывающее меню ?
От: Аноним  
Дата: 03.08.06 04:34
Оценка:
Здравствуйте, Master Yoda, Вы писали:

MY>Запускаешь программу. Запускаешь Spy++. Находишь окно программы, запускаешь перехват сообщений для него. Переключаешься опять на программу. Вызываешь меню, выбираешь Copy Data. Переключаешься на Spy++ и смотришь, с какими параметрами был послан последний WM_COMMAND. После этого все, что тебе нужно будет делать — посылать окну этой программы WM_COMMAND с аналогичными параметрами


Спасибо, всё понятно, сегодня попробую. А то все данные там нарисованные и GetWindowText() ничего не даёт. Я понимал, что надо послать WM_COMMAND, но не знал как параметры определить. Тогда хотелось бы усложнить вопрос:
Данные накапливаются в окне с момента запуска программы. Поэтому после часа работы данных в окне очень много (там появляется ползунок) и процесс записи на Cipboard может занимать до 30 сек. Можно ли понять, какое сообщение надо послать для копирования только, скажем, последних 10 строк каждую минуту , чтобы не перекопировать каждый раз всё заново с самого начала ? Или как принудительно остановить запись на Clipboard, скажем, через 0.1 сек ? Это возможно ?
Re[3]: Как отследить всплывающее меню ?
От: Master Yoda Великобритания  
Дата: 03.08.06 04:46
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Данные накапливаются в окне с момента запуска программы. Поэтому после часа работы данных в окне очень много (там появляется ползунок) и процесс записи на Cipboard может занимать до 30 сек. Можно ли понять, какое сообщение надо послать для копирования только, скажем, последних 10 строк каждую минуту , чтобы не перекопировать каждый раз всё заново с самого начала ?


Если это как-то поддерживается самой программой, то можно конечно. Если же у нее существует только один пункт "Copy Data", который всегда копирует все данные, то конечно нельзя.

А>Или как принудительно остановить запись на Clipboard, скажем, через 0.1 сек ? Это возможно ?


Хм, навряд ли, разве что процесс прибить...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.