Перейти к содержимому

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

Программное нажатие кнопки. В данном примере хочу показать, как просто манипулировать над элементами управления, чужой программы. Для этого нам понадобится всего несколько 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;
}
Метки: