Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Управление окном другой программы.

383
14 апреля 2006 года
zoh
237 / / 03.04.2005
Хай
Дело вот в чём нужно создать программку которая управляла другой. Например изменяла бы значения Label Caption Form и другое
(программы не связаны, например управляемая программа блокнот)
Очень надеюсь на вас, срочно нужно написать!
Заранее спасибо, что нибудь посоветуйте...
294
14 апреля 2006 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by zoh
Хай
Дело вот в чём нужно создать программку которая управляла другой. Например изменяла бы значения 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

383
14 апреля 2006 года
zoh
237 / / 03.04.2005
Круто но мне надо APIшные функции а это мсдэновские вроде.
А где описание работы?
585
14 апреля 2006 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by zoh
Круто но мне надо APIшные функции а это мсдэновские вроде.
А где описание работы?


Ух, ты хоть сам то понял что сказал )))))))))))))))))
Что за MsdnAPI )))))
Это как раз и есть самые что ни на есть WinAPI функции.

585
14 апреля 2006 года
honeybeer
297 / / 06.09.2004
Код:
LRESULT CALLBACK EnumChildProc(HWND hWnd, LPARAM lParam)
{
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;
}

здесь например, есть кусок кода меняющий надпись "Пуск" одноименной кнопки на панели задач, на "Стоп"
294
14 апреля 2006 года
Plisteron
982 / / 29.08.2003
Цитата:
Originally posted by zoh
Круто но мне надо APIшные функции а это мсдэновские вроде.
А где описание работы?


:D :D :D

MSDN — это и есть по сути описание API-функций платформы (а платформа у нас Win32). Если хорошенько порыться в MSDN, можно найти и примеры. Ещё совет, которым прошу не пренебрегать: найди книжку, в которой описывается программирование под Win32 без всяких объектных библиотек типа VCL или MFC и ознакомься с её содержимым (учить наизусть не обязательно ;)).

11K
14 апреля 2006 года
veb
18 / / 04.04.2006
А может кто-нить знает как создать объект на форме другой программы (кнопочку напр. или новую вкладку)?
406
14 апреля 2006 года
vitaly2003s
481 / / 27.07.2004
Цитата:
Originally posted by veb
А может кто-нить знает как создать объект на форме другой программы (кнопочку напр. или новую вкладку)?


Да нет ниче проще... Подгружаеш свою длл к нужному процессу для которого хочеш создать контрол и когда подгрузишся создаеш свой контрол уже в этом процессе...

383
15 апреля 2006 года
zoh
237 / / 03.04.2005
-->Это как раз и есть самые что ни на есть WinAPI функции
А бес их знает

-->меняющий надпись "Пуск" одноименной кнопки на панели задач, на "Стоп
Даже если делать нафиг всёравно нафиг это надо

-->найди книжку, в которой описывается программирование под Win32
WinAPI Видел но теперь днём с огнём как говорится

CУдя по вашим ответам мой заплесневелый ум подсказывает что вы не правильно меня поняли:
Представим случай
Есть прога пр1.ехе -- на ней But1
есть пр2.ехе -- на ней Edit1 and Button1
Дальше запускаем обе проги

На форме пр2 Edit1.text = "лала тополя"; и Button1.Click();

НА форме пр1 в значении But1.caption должно появиться "лала тополя";
383
16 апреля 2006 года
zoh
237 / / 03.04.2005
У меня ещё есть подозрения что значения какого-нибудь элемента лежит в переменной тобиш в памяти, и если изменить ячейку памяти мож быть и изменится значение, но как найти вот это вопрос так вопрос?
1
16 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by zoh
У меня ещё есть подозрения что значения какого-нибудь элемента лежит в переменной тобиш в памяти, и если изменить ячейку памяти мож быть и изменится значение, но как найти вот это вопрос так вопрос?


На вопрос тебе ответили в полном объеме. Если не хватает знаний как эти ответы использовать - тогда учится учится и еще раз учится. Писать код за тебя не будет никто.
Есть онлайн версия МСДН - есть масса литературы - если нет возможности купить бумажный оригинал - в сети ее не меньше.
Любые операции с элементами в винде - это операции с окнами.

383
17 апреля 2006 года
zoh
237 / / 03.04.2005
Если бы грузился msdn я бы давно зашёл, у меня этот форум то 5 минут грузится!
Но всёравно спасибо что не помогли : -- ((

Ну хоть опишите функцию SetWindowText (FindWindow у меня есть) и как найти Хендл But1.


___________________________________________
P.S. Терпеть неиогу Татинком чтоб он сдох чтоб сервера перегарели!!!
383
17 апреля 2006 года
zoh
237 / / 03.04.2005
 
Код:
HWND WinHwnd;
 WinHwnd = FindWindow(NULL, Edit1->Text.c_str());
 if (WinHwnd == 0) ShowMessage("Нет такого окна");
 if (SetWindowText(WinHwnd, Edit2->Text.c_str())) ShowMessage("good");
}


Вот нафигачил, но это изменяет только заголовок подскажите как для кнопки быть.

предпредыдуший пост натолкнул меня на мысль вот в чём есть проги трейнеры там изменябтся значения из памяти как быть для значения кнопки? Можно таким способом реализовать?
534
18 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by zoh
Если бы грузился msdn я бы давно зашёл, у меня этот форум то 5 минут грузится!
Но всёравно спасибо что не помогли : -- ((

Ну хоть опишите функцию SetWindowText (FindWindow у меня есть) и как найти Хендл But1.

И откуда только такие таланты на руси берутся? Открываем меню Хэлп, там Platform SDK - описание непосредственно "эмэсдээновских" API функций. (собст-но, раздел msdn, касающийся WinAPI, так и называется - Platform SDK). SetWindowText точно там найдёшь.

383
18 апреля 2006 года
zoh
237 / / 03.04.2005
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!
534
18 апреля 2006 года
HarryAxe
448 / / 19.01.2006
Цитата:
Originally posted by zoh
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!

HWND hwndChild = FindWindowEx(WinHwnd, NULL, NULL, szButonCaption);

1
18 апреля 2006 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by zoh
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!


zoh ++ - рекомендую изменить поведение на форуме.

11K
21 апреля 2006 года
veb
18 / / 04.04.2006
Цитата:
Originally posted by HarryAxe
HWND hwndChild = FindWindowEx(WinHwnd, NULL, NULL, szButonCaption);


А как узнать хендл, к примеру, PageControl'а, если я знаю хендл процесса, окна, ну и названия вкладок?

246
21 апреля 2006 года
GIZMO
1.8K / / 30.07.2004
Цитата:
Originally posted by veb
А как узнать хендл, к примеру, PageControl'а, если я знаю хендл процесса, окна, ну и названия вкладок?


Тебе уже сказал honeybeer:
EnumWindowsProc + EnumChildProc

33K
16 ноября 2007 года
hooky-mars
3 / / 16.11.2007
Цитата: vitaly2003s
Да нет ниче проще... Подгружаеш свою длл к нужному процессу для которого хочеш создать контрол и когда подгрузишся создаеш свой контрол уже в этом процессе...


Это как? Где об этом можно покурить?

33K
16 ноября 2007 года
hooky-mars
3 / / 16.11.2007
Цитата: zoh
Выше смотри я написал использование этой функции мне надо для кнопки а не заголовка окна!!



Все элементы на форме окна, и это есть маленикие окна, а посему кним прменимы функиции для сомого окна прогры!

А найти хендл твоей кнопки можно опытным путем, при помоши тупого перебора всех элементов этого окна.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог