![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Ребята, нужно написать прогу которая делала манипуляции с другой прогой! В инете порылся, нашел что это делается через Spy++. Только как это сделать через С# пока представления не имею. Объясните пожалуйста, кто имел опыт работы или укажите ссылочку на данную тематика!
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Spy++ это утилита, входящая в комплект VS начиная с 6-й версии. Предназначение её состоит в том, чтобы иметь возможность посмотреть на иерархию процессов, потоков и окон. Кроме того, можно трассировать WinAPI-шные сообщения с возможностью фильтрации, а также найти окно по Handle и наоборот. Вот практически всё что она умеет.
-------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
вот именно, поэтому первый вопрос непонятен:
Что касаемо собстна "нажать чужую кнопку", так это на WinAPI делается "на раз", если знать структуру чужого окна (нас интересуют имена window classes и иерархия вложенности окон). Действительно, получить эту инфу можно с пом. Spy++. На этом все возможности этой утилиты и заканчиваются, потому что посылать сообщения она не умеет. Как нажать кнопку, зная её window class и расположение в дереве окон ? Используя функцию FindWindow или FindWindowEx, получаем по имени или по window class-у "корневое" окно приложения, затем таким же образом ищем вложенное окно, пробираясь по иерархии окон. Когда добрались до кнопки, имеем её Handle (HWND), можно послать нажатие. Чтобы в точности сымитировать нажатие, можно например с помощью той же Spy++ прицепиться к кнопке и трассировать оконные сообщения с фильтрацией "только WM_LBUTTONDOWN, WM_LBUTTONUP", получив таким способом lParam и wParam. Эти значения и будут аргументами ф-ции SendMessage. -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А можно привести пример на С#, пожалуйста! |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Пример для какого приложения тебе нужен ? Или так, в общем ?
-------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Вот пример, консольное приложение, при запуске находит окно калькулятора и "нажимает" в нём кнопку 1:
-------------------- ![]() |
||||
|
|||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
VisualProgrammerNET |
|
|||
![]() Почётный халявщик ![]() ![]() Профиль Группа: Участник Сообщений: 461 Регистрация: 30.10.2005 Где: Зеленоград Репутация: 1 Всего: 6 |
Давно мучал вопрос. Как из приложения C# выключить/перезагрузить комп? Ессно, через винапи, но сколько ни лазил по библиотекам... в общем, как?
![]() Собрался написать хитрую программку, которая прячется в автозапуске и при активизации перезагружает комп ![]() ![]() -------------------- 3 ГОДА НА ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
один топик = один вопрос, вообще-то... Что касается "как выключить комп", то это делается через командную строку: RUNDLL.EXE user.exe,exitwindows Можно то же самое через WinExec организовать, или через Process.Start() -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А почему кнопка может не ловится Spy++? Я навожу на нее прицел, а виделяется только один GroupBox
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Может, и не кнопка это вовсе ![]() Руками нарисованная, то есть. З.Ы. проверить просто: находишь прицелом групбокс и в дереве смотришь, какие у групбокса внутри есть чилды. Если там кнопки нету - значит её и нет. З.Ы.(2) извиняюсь за задержку с ответом. -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
jfx |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 98 Регистрация: 18.10.2004 Репутация: нет Всего: 1 |
Думаю вам небезинтересно будет прочесть вот эту статью:
Deliver The Power Of Spy++ To Windows Forms With Our New Tool
Источник Это сообщение отредактировал(а) jfx - 23.6.2006, 16:12 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
По простому не получается ? Ну попробуй тогда сделать так, если сможешь: 1) начать с пом. Spy++ прослушивать сообщения WM_LBUTTONDOWN/UP/CLICK, выставить галку "All windows of same process" 2) нажать мышкой "кнопку" в окне 3) посмотреть, какие сообщения отловил Spy++ 4) не меняя положения окна с "кнопкой", послать (с пом. SendMessage) окну такие же сообщения с теми же lParam и wParam, посмотреть будет ли результат Если пункт 4 приведёт к такой же реакции, как пункт 2 (т.е. "кнопка" нажмётся), значит можно всё это делать для любого положения окна: после того как FindWindow() нашёл окно, определяем левый верхний угол окна (импортируемая функция GetWindowPos), по ним вычисляем координаты кнопки и посылаем окну WM_LBUTTONDOWN/WM_LBUTTONUP. Добавлено @ 16:14 Упс, пропустил сообщение jfx, скорее всего в этом и дело ![]() -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А у меня выдает ошибку! Подозреваю что lParam у меня в такой форме 0014000E, а у тебя в 0x150018! Если да, то как переконвертировать?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Это такое же hex-число, как и 0x150018. Только "0x" не хватает. -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Пример чего ? Шестнадцатеричных чисел ? Пожалста: 0x000001 0xabcdef 0x456000 0x100000 -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
Не работает! Я посылаю этой нарисованной кнопке сообщения, а она не реагирует! Может я не тому окну посылаю?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Так ты посылаешь сообщение кнопке скроллбара ? Для этого есть совсем другие сообщения - WM_VSCROLL, например.
-------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А если кнопка на панеле задач то же LBUTONNUP LBUTONNDOWN?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Панель задач - отдельное окно, но в целом ничем (по поведению) не должно отличаться от обычных окон. -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
ну и при чём здесь панель инструментов к панели задач ?.. -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А если кнопка на панеле инструментов, то же LBUTONNUP LBUTONNDOWN?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Гм, что понимается под "панелью инструментов" ? Область окна в верхней части, где расположены мелкие кнопки типа "открыть файл", "копировать", "вставить" и т.п. ? Если да - то там кроме WM_LBUTTONDOWN/UP/CLICK есть ещё очень важное сообщение WM_COMMAND, посылаемое при выборе (нажатии/отжатии) кнопки тулбара. Можно в эту сторону покопать...
-------------------- ![]() |
|||
|
||||
Ch0bits |
|
|||
![]() Python Dev. ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2124 Регистрация: 21.2.2005 Где: Казань Репутация: 1 Всего: 62 |
Есть такая архиполезная утилита %systemroot%\system32\shutdown.exe -r -t 60 запускаешь и смотришь на табличку о завершении работы (такую же вызывал MSBlast) ![]() Подробнее читай справку - ключ /? Отмена завершения - ключ -a. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
всё это классно, конечно, но непонятно как относится к теме -------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
А какое посылать сообщение для нажатия OK/Cancel в сплывающем сообщении?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Энтер и искейп
-------------------- ![]() |
|||
|
||||
zmaximka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 27.5.2006 Где: Украина, Одесса Репутация: нет Всего: нет |
||||
|
||||
Nickey |
|
|||
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
Понятно что один вопрос - одна тема, но мой вопросец очень схож. Как нажать на кнопку другого прилажения из вышеприведенных примеров понятно, а вот если на форме есть объект для ввода текста, как туда послать сообщение. Интересует меня потомучто есть задача в телнет клиент кинуть пару команд, т.е. саму команду, и enter. Вот как это можно сделать?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 24 Всего: 232 |
Nickey, читайте разделы в MSDN посвещённые оконным сообщениям и в частности - функции SendMessage, PostMessage. Для замены текста в тектбоксе на новый - сообщение WM_SETTEXT. Для добавления текста придётся эмулировать нажатия клавиш (для этого есть стандартный класс SendKeys).
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |