Программно нажимаем на кнопки

В данном примере хочу показать, как просто манипулировать над элементами управления, чужой программы.
Для этого нам понадобится всего несколько API функций.

HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName); - Ищет окно, поиск дочерних окон не производит.
lpClassName – имя класса окна;
lpWindowName – имя заголовка окна.

HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass, LPCTSTR lpszWindow ); - Ищет окно,
производит поиск дочерних окон.
hwndParent – основное окно, в котором производится поиск дочерних;
hwndChildAfter – элемент с которого следует начинать поиск, если NULL тогда поиск пойдет с самого первого элемента;
lpszClass – класс элемента управления;
lpszWindow – имя, если NULL тогда поиск всех элементов класса lpszClass.

LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); - функция посылает сообщения окнам.
hWnd – описатель окна;
Msg – сообщение;
wParam – первый параметр;
lParam – второй параметр.

Для проверки, было создано обыкновенное приложение с помощью AppWizard`a. На главном окне расположены Edit,
в который будет вставляться текст и кнопка, которая будет выводит сообщение, текст которого находится в EditBox.

После создается проект Win32 Application и пишется следующий код:

#include "stdafx.h"

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hwndMain = FindWindow(NULL,"Test");
if(hwndMain)
{
HWND hwnd = FindWindowEx(hwndMain,NULL,"Edit",NULL);
if(hwnd)
{
if(SendMessage((HWND)hwnd,WM_SETTEXT,(WPARAM)NULL,(LPARAM)(LPCTSTR)"Code by Lazy_elf"))
{
hwnd = FindWindowEx(hwndMain,NULL,"Button","Push");
if(hwnd)
{
SendMessage((HWND)hwnd,BM_CLICK,(WPARAM)NULL,(LPARAM)NULL);

}
else{MessageBox(NULL,"Error FindWindowEx","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Error SendMessage","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Not find Edit Box","Error",MB_OK|MB_ICONSTOP);}
}
else{MessageBox(NULL,"Not find main window","Error",MB_OK|MB_ICONSTOP);}
return 0;
}
 
« Предыдущая статья   Следующая статья »