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