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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2012, 00:27   #1
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию Проблема с нажатием кнопки в приложении стороннего разработчика

Здравствуйте!

Уважаемые модераторы, пожалуйста, переместите, при необходимости, данную тему в раздел Win Api или Общие вопросы .NET.

Есть некоторое приложение с панелью инструментов, на панели всего одна кнопка. Панель нестандартная. Кнопка не имеет сочетания горячих клавиш, и приложение не позволяет настроить. Не знаю как достучаться до данной кнопки (кнопка ли это?) и выполнить её нажатие.



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

Код:
//использую для поиска окна      
[DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

//использую для переключения в окно (окно разворачивается, если свернуто, и становится активным)
[DllImport("USER32.DLL")]
public static extern bool SwitchToThisWindow(IntPtr hWnd, bool Restore);


//для передачи нажатия 
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(int hWnd, int msg, int wParam, IntPtr lParam);

В данном примере нахожу своё окно, передаю сочетание Ctrl+O, в диалоговом окне "Введите имя файла" нажимаю кнопку "Отмена".
Код:
IntPtr handle = = FindWindow("TApplication", "Текст заголовка");
SwitchToThisWindow(handle, true);
SetForegroundWindow(handle);

InputSimulator.SimulateModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_O);
Thread.Sleep(2000);

handle = FindWindow("#32770", "Введите имя файла");
IntPtr hwndChild = FindWindowEx((IntPtr)handle, IntPtr.Zero, "Button", "Отмена");
Thread.Sleep(2000);

SendMessage((int)hwndChild, BN_CLICKED, 0, IntPtr.Zero);
Учиться никогда не поздно
Kottik вне форума Ответить с цитированием
Старый 27.11.2012, 15:18   #2
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

ничего что у тебя код не откомпилируется? ))
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 28.11.2012, 19:37   #3
Kottik
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 47
По умолчанию

Это и не был конечный код, код здесь просто так приведен, чтобы показать, что я не дуб-дубом.
Вопрос только в:
Цитата:
Есть некоторое приложение с панелью инструментов, на панели всего одна кнопка. Панель нестандартная. Кнопка не имеет сочетания горячих клавиш, и приложение не позволяет настроить. Не знаю как достучаться до данной кнопки (кнопка ли это?) и выполнить её нажатие.
К тому же, UISpy не видит даже окна панели с этой кнопкой, а InqSoft Windows Scanner - видит.
Учиться никогда не поздно
Kottik вне форума Ответить с цитированием
Старый 29.11.2012, 13:00   #4
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

больше похоже на то, что ты его просто скопипастил откуда то

сложно что-то подсказать не зная ни программы ни что делает кнопка
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с нажатием клавиши в другом приложении Bl@ckGold Общие вопросы Delphi 6 14.05.2011 17:37
Перерисовка канвы нажатием кнопки клавы ViNcHeStEr Помощь студентам 3 07.04.2009 04:57
Управление нажатием кнопки в другом приложении Mikhail Bakurov Помощь студентам 5 13.10.2008 23:19
Проблема с нажатием кнопки мышки Zeraim Общие вопросы Delphi 2 23.05.2008 18:33
Переход на метку нажатием кнопки Макс84 Общие вопросы Delphi 6 04.04.2007 08:59