Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


Имитация клика по кнопке на любой форме.

Поиск:
>Извините, как можно сымитировать клик по кнопке, расположенной на форме другой программы? Можно ли вообще это сделать?

Это достаточно легко сделать. Для начала нужно определиться, на что мы будем нажимать (то есть получить описатель этой кнопочки). Для этого понадобятся функции поиска формы, а также элемента формы.

Код

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long


Для примера я предлагаю сымитировать клик по кнопке Пуск. Тогда нужно объявить следующие константы.

Код

Private WndWind As Long ' Описатель окна
Private WbdButton As Long 'Описатель кнопки


И при загрузке вашей формы впишем такой код:

Код

Private Sub Form_Load()
WndWind = FindWindow("Shell_TrayWnd", vbNullString) 'Ищем системную панель, на которой и находится нужная кнопка
WbdButton = FindWindowEx(WndWind, 0, "Button", vbNullString) 'Ищем кнопку на панели
End Sub


Вот мы и нашли кнопку Пуск. Теперь на нее нужно кликнуть. Т.к. клик - своего рада сообщение посылаемое кнопке, то воспользуемся функцией SendMessage

Код

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,  _
ByVal wParam As Long, lParam As Any) As Long


Для того чтобы посылать клик, нужно объявить константу (они все обитают в MSDN).

Код

Const BM_CLICK = &HF5


Для примера сделаем так: добавим на форму кнопочку, а в нее вставим такой код:

Код

Private Sub Command1_Click()
Call SendMessage(WbdButton, BM_CLICK, 0, 0) ' Здесь нули, т.к. wMsg и wParam, мне кажется для клика не нужны
End Sub


Вот и все. Теперь при щелчке по нашей кнопке будет разворачиваться меню пуск

Листинг:

Код

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, _
ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Const BM_CLICK = &HF5
Private WndWind As Long
Private WbdButton As Long
Private Sub Command1_Click()
   Call SendMessage(WbdButton, BM_CLICK, 0, 0)
End Sub
Private Sub Form_Load()
   WndWind = FindWindow("Shell_TrayWnd", vbNullString)
   WbdButton = FindWindowEx(WndWind, 0, "Button", vbNullString)
End Sub

Источник: www.vbstreets.ru
Автор: Гайдар Магдануров






Просмотров: 3738

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную