Управление окном другой программы.
Дело вот в чём нужно создать программку которая управляла другой. Например изменяла бы значения Label Caption Form и другое
(программы не связаны, например управляемая программа блокнот)
Очень надеюсь на вас, срочно нужно написать!
Заранее спасибо, что нибудь посоветуйте...
Хай
Дело вот в чём нужно создать программку которая управляла другой. Например изменяла бы значения Label Caption Form и другое
(программы не связаны, например управляемая программа блокнот)
Очень надеюсь на вас, срочно нужно написать!
Заранее спасибо, что нибудь посоветуйте...
FindWindow()
SetWindowText()
SetWindowPos()
MoveWindow()
ShowWindow()
PostMessage()
SetWindowLong()
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/msdn_subclas3.asp
А где описание работы?
Круто но мне надо APIшные функции а это мсдэновские вроде.
А где описание работы?
Ух, ты хоть сам то понял что сказал )))))))))))))))))
Что за MsdnAPI )))))
Это как раз и есть самые что ни на есть WinAPI функции.
{
char szClsName[64] = {0};
int ciCount = GetWindowText(hWnd, szClsName, 63);
if(!strcmp(szClsName, (LPSTR)lParam) || !hStart)
{
hStart = hWnd;
SetWindowText(hWnd, "стоп");
UpdateWindow(hWnd);
return false;
}
return true;
}
//----------------------------------------------------------------------------
LRESULT CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
DWORD dwPID;
GetWindowThreadProcessId(hWnd, &dwPID);
if(dwPID == (DWORD)lParam)
{
while(EnumChildWindows(hWnd, (WNDENUMPROC)EnumChildProc, (LPARAM)"пуск"))
return false;
}
return true;
}
//----------------------------------------------------------------------------
LRESULT CALLBACK MainWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static HWND hEwnd, hBwnd;
switch(uMsg)
{
case WM_CREATE:
hEwnd = CreateWindow("COMBOBOX",
NULL, WS_CHILD|CBS_DROPDOWNLIST,
0,
20,
300,
380,
hWnd,
NULL,
((LPCREATESTRUCT) lParam)->hInstance,
NULL);
ShowWindow(hEwnd, SW_SHOWNORMAL);
hBwnd = CreateWindow("BUTTON",
"1",
WS_CHILD|BS_PUSHBUTTON,
0,
0,
20,
20,
hWnd,
(HMENU)1,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
ShowWindow(hBwnd, SW_SHOWNORMAL);
break;
case WM_DESTROY:
PostQuitMessage (0);
return 0;
break;
case WM_LBUTTONDOWN:
GetProcessList(hEwnd);
break;
case WM_COMMAND:
if(LOWORD(wParam) == 1 && HIWORD(wParam) == BN_CLICKED && (HWND)lParam == hBwnd)
{
ShowWindow(hwnd_main, SW_HIDE);
SetWindowText(hStart, "стоп");
UpdateWindow(hStart);
}
break;
case WM_ACTIVATE:
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//---------------------------------------------------------------------------
DWORD WINAPI GetProcessList(const HWND hWnd)
{
HANDLE hProcSnap = NULL;
PROCESSENTRY32 pe32ProcList;
//ZeroMemory(
pe32ProcList.dwSize = sizeof(PROCESSENTRY32);
try
{
hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if((int)hProcSnap == -1) throw;
Process32First(hProcSnap, &pe32ProcList);
do
{
if(!strcmp(pe32ProcList.szExeFile, "explorer.exe"))
{
if(!EnumWindows((WNDENUMPROC)EnumWindowsProc, (LPARAM)pe32ProcList.th32ProcessID));
break;
}
}
while(Process32Next(hProcSnap, &pe32ProcList));
}
__finally
{
if(hProcSnap)CloseHandle(hProcSnap);
}
return 0;
}
//---------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc_main;
MSG msg;
ZeroMemory(&wc_main, sizeof(wc_main));
wc_main.cbSize = sizeof(wc_main);
wc_main.style = CS_HREDRAW|CS_VREDRAW;
wc_main.lpfnWndProc = (WNDPROC)MainWindowProc;
wc_main.hInstance = hInstance;
wc_main.hbrBackground = (HBRUSH)COLOR_GRAYTEXT;
wc_main.hIcon = LoadIcon(NULL, IDI_WARNING);
wc_main.hCursor = LoadCursor(0, IDC_ARROW);
wc_main.lpszClassName = "DXC";
RegisterClassEx(&wc_main);
hwnd_main = CreateWindow("DXC", "WinAPI", WS_OVERLAPPEDWINDOW, 100, 100, 300, 400, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd_main, SW_SHOWDEFAULT);
UpdateWindow(hwnd_main);
while(GetMessage(&msg, 0, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
здесь например, есть кусок кода меняющий надпись "Пуск" одноименной кнопки на панели задач, на "Стоп"
Круто но мне надо APIшные функции а это мсдэновские вроде.
А где описание работы?
:D :D :D
MSDN — это и есть по сути описание API-функций платформы (а платформа у нас Win32). Если хорошенько порыться в MSDN, можно найти и примеры. Ещё совет, которым прошу не пренебрегать: найди книжку, в которой описывается программирование под Win32 без всяких объектных библиотек типа VCL или MFC и ознакомься с её содержимым (учить наизусть не обязательно ;)).
А может кто-нить знает как создать объект на форме другой программы (кнопочку напр. или новую вкладку)?
Да нет ниче проще... Подгружаеш свою длл к нужному процессу для которого хочеш создать контрол и когда подгрузишся создаеш свой контрол уже в этом процессе...
А бес их знает
-->меняющий надпись "Пуск" одноименной кнопки на панели задач, на "Стоп
Даже если делать нафиг всёравно нафиг это надо
-->найди книжку, в которой описывается программирование под Win32
WinAPI Видел но теперь днём с огнём как говорится
CУдя по вашим ответам мой заплесневелый ум подсказывает что вы не правильно меня поняли:
Представим случай
Есть прога пр1.ехе -- на ней But1
есть пр2.ехе -- на ней Edit1 and Button1
Дальше запускаем обе проги
На форме пр2 Edit1.text = "лала тополя"; и Button1.Click();
НА форме пр1 в значении But1.caption должно появиться "лала тополя";
У меня ещё есть подозрения что значения какого-нибудь элемента лежит в переменной тобиш в памяти, и если изменить ячейку памяти мож быть и изменится значение, но как найти вот это вопрос так вопрос?
На вопрос тебе ответили в полном объеме. Если не хватает знаний как эти ответы использовать - тогда учится учится и еще раз учится. Писать код за тебя не будет никто.
Есть онлайн версия МСДН - есть масса литературы - если нет возможности купить бумажный оригинал - в сети ее не меньше.
Любые операции с элементами в винде - это операции с окнами.
Но всёравно спасибо что не помогли : -- ((
Ну хоть опишите функцию SetWindowText (FindWindow у меня есть) и как найти Хендл But1.
___________________________________________
P.S. Терпеть неиогу Татинком чтоб он сдох чтоб сервера перегарели!!!
WinHwnd = FindWindow(NULL, Edit1->Text.c_str());
if (WinHwnd == 0) ShowMessage("Нет такого окна");
if (SetWindowText(WinHwnd, Edit2->Text.c_str())) ShowMessage("good");
}
Вот нафигачил, но это изменяет только заголовок подскажите как для кнопки быть.
предпредыдуший пост натолкнул меня на мысль вот в чём есть проги трейнеры там изменябтся значения из памяти как быть для значения кнопки? Можно таким способом реализовать?
Если бы грузился msdn я бы давно зашёл, у меня этот форум то 5 минут грузится!
Но всёравно спасибо что не помогли : -- ((
Ну хоть опишите функцию SetWindowText (FindWindow у меня есть) и как найти Хендл But1.
И откуда только такие таланты на руси берутся? Открываем меню Хэлп, там Platform SDK - описание непосредственно "эмэсдээновских" API функций. (собст-но, раздел msdn, касающийся WinAPI, так и называется - Platform SDK). SetWindowText точно там найдёшь.
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!
HWND hwndChild = FindWindowEx(WinHwnd, NULL, NULL, szButonCaption);
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!
zoh ++ - рекомендую изменить поведение на форуме.
HWND hwndChild = FindWindowEx(WinHwnd, NULL, NULL, szButonCaption);
А как узнать хендл, к примеру, PageControl'а, если я знаю хендл процесса, окна, ну и названия вкладок?
А как узнать хендл, к примеру, PageControl'а, если я знаю хендл процесса, окна, ну и названия вкладок?
Тебе уже сказал honeybeer:
EnumWindowsProc + EnumChildProc
Это как? Где об этом можно покурить?
Все элементы на форме окна, и это есть маленикие окна, а посему кним прменимы функиции для сомого окна прогры!
А найти хендл твоей кнопки можно опытным путем, при помоши тупого перебора всех элементов этого окна.