Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как определить имя или хендл окна по имени процесса. / 18 сообщений из 18, страница 1 из 1
02.11.2006, 17:54
    #34101974
hkus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
Допустим у меня имя процесса Opera.exe Как же мне зная только это узнать что там в окне или получить хендл окна ? Такое вообще возможно ?
...
Рейтинг: 0 / 0
02.11.2006, 18:05
    #34102017
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
FindWindow
...
Рейтинг: 0 / 0
02.11.2006, 18:06
    #34102019
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
только это по имени окна
...
Рейтинг: 0 / 0
02.11.2006, 18:07
    #34102022
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
HWND h = FindWindow("Класс_Opera", "Название_окна");
FindWindowEx(h, NULL, "класс эл. управления внутри", "название окна");

или

GetWindow(c поиском child'ов см. msdn)
--------------------------------------------------------------
[подпись с другого сайта]
...
Рейтинг: 0 / 0
02.11.2006, 19:02
    #34102193
hkus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
В том-то и дело что мне нужно не зная имени окна, но зная что это оконное приложение, как-то выйдить по имени процесса имя главного окна. Вот в чем весь калинкор.
...
Рейтинг: 0 / 0
02.11.2006, 19:34
    #34102240
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
hkusВ том-то и дело что мне нужно не зная имени окна, но зная что это оконное приложение, как-то выйдить по имени процесса имя главного окна. Вот в чем весь калинкор."Калинкор" это от слова "калинка", да?
Почитай Букварь, научись задавать вопросы, тогда получишь ответ.
...
Рейтинг: 0 / 0
02.11.2006, 22:54
    #34102451
hkus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
White Owl, да я как-то и без тебя разобрался
...
Рейтинг: 0 / 0
03.11.2006, 12:53
    #34103819
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
EnumWindows + GetWindowModuleFileName ?
...
Рейтинг: 0 / 0
05.11.2006, 13:14
    #34106284
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
hkusДопустим у меня имя процесса Opera.exe Как же мне зная только это узнать что там в окне или получить хендл окна ? Такое вообще возможно ?
Не совсем понял что тебе нужно... но в вот...
Перебираем все процессы и провереяем если они оконные и тд..
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
void __fastcall MyThreadWindows::AllWind()
{ int i= 0 ;
  HANDLE hSnapshot;
  HWND H=FindWindow(NULL,""); // текущее окно;
  char Pch[ 128 ],Test[ 100 ];
  TListItem  *ListItem;    // указатель
  Main->ListAllWindows->Clear();
     /*tagPROCESSENTRY32 lppe;может пригодится*/

     /****          Снимок процессов        ***/
     hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,  0 );
       if (hSnapshot == INVALID_HANDLE_VALUE)
         {
         ShowMessage("Ошибка цикла!");
         }

     /*****     Перечисляем окна     *****/
     do
       {
         if  (IsWindow(H))                  //Проверим полученный хендл
           {
             if (IsWindowVisible(H))
               {
                 if (GetWindowText(H,Pch,sizeof(Pch))!=NULL)
                   {
                   /*пытаемся найти родителя этого окна,*/
                   /*если он NULL то значит оно главное*/
                     if (GetWindow(H,GW_OWNER)==NULL)
                       {
                       ListItem = Main->ListAllWindows->Items->Add();
                       ListItem->Caption = Pch;
                       //Выводим названия окон
                       }
                   }
               }
           }
       H=GetNextWindow(H,GW_HWNDNEXT);
       }
     while (H!=NULL);
  CloseHandle(hSnapshot);
  CloseHandle(H);
  }
...
Рейтинг: 0 / 0
05.11.2006, 22:29
    #34106561
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
Такое невозможно, поскольку у процесса может быть много окон.
...
Рейтинг: 0 / 0
06.11.2006, 10:47
    #34106811
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
MasterZivТакое невозможно, поскольку у процесса может быть много окон.
Код работает...100%... А у процесса вообще может не быть окон, что мы и проверяем если прочитать внимательно...И Главное окно родитель есть в любом оконном приложении...
При выполнении этой процедуры получаем список запущенных программ на компьютере...
+ ProgramManager - главное окно приложения Windows, если попытаться его закрыть то появлятся сообщение о выборе завершить работу...перезагрузится или тд...
...
Рейтинг: 0 / 0
06.11.2006, 10:52
    #34106812
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
UlanOf[quot MasterZiv]Такое невозможно, поскольку у процесса может быть много окон.
Если ты сомневаешься могу *.exe откомпиленный скинуть....
...
Рейтинг: 0 / 0
09.11.2006, 16:05
    #34116776
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
UlanOf

И Главное окно родитель есть в любом оконном приложении...



В Win32, на сколько я помню, вообще нет понятия "главное окно приложения".
...
Рейтинг: 0 / 0
12.11.2006, 15:05
    #34121953
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
MasterZiv UlanOf

И Главное окно родитель есть в любом оконном приложении...



В Win32, на сколько я помню, вообще нет понятия "главное окно приложения".
Родительское окошко... :)
GetWindow(H,GW_OWNER)==NULL вот этим и проверяем...
...
Рейтинг: 0 / 0
12.11.2006, 17:38
    #34122072
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
Win32 SDK help
Owned Windows
An overlapped or pop-up window can be owned by another overlapped or pop-up window. Being owned places several constraints on a window.

An owned window is always above its owner in the z-order.
The system automatically destroys an owned window when its owner is destroyed.
An owned window is hidden when its owner is minimized.
Only an overlapped or pop-up window can be an owner window; a child window cannot be an owner window. An application creates an owned window by specifying the owner's window handle as the hwndParent parameter of CreateWindowEx when it creates a window with the WS_OVERLAPPED or WS_POPUP style. The hwndParent parameter must identify an overlapped or pop-up window. If hwndParent identifies a child window, the system assigns ownership to the top-level parent window of the child window. After creating an owned window, an application cannot transfer ownership of the window to another window.

Dialog boxes and message boxes are owned windows by default. An application specifies the owner window when calling a function that creates a dialog box or message box.

An application can use the GetWindow function with the GW_OWNER flag to retrieve a handle to a window's owner.



При чем здесь главное окно приложения - не понятно. У приложения может быть несколько OVERLAPPED-окон, и эти несколько окон могут быть самостоятельно OWNER-ами нескольких наборов других каких-то окон. Это не выделяет никак ни одно окно как главное.
...
Рейтинг: 0 / 0
13.11.2006, 19:57
    #34125128
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
Я с удовольствием бы выслушал, что я не так понял.... Занимался этим месяца 3-4 и сделал вывод... Возможно затруднения с английским переводом...
Если не прав получу удовольствие если поправишь..
Стиль окна значение описание
WS_OVERLAPPED 0х00000000L Окно имеет заголовок и обрамляющую рамку
or WS_POPUP 0х80000000L Создается всплывающее (popup) окно
Это речь идет о CreateWindow
WINAPI WinMain описании класса в котором при создании указаваются стили создаваемого окна....
Owned Windows(владеемое,немного не по русски) это не Owner Windows (главное)...
...
Рейтинг: 0 / 0
15.11.2006, 07:58
    #34128951
Barlone
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
Запускает IE. Нажимаем Ctrl+N. Смотрим в диспетчер задач и видим два "главных" окна и один процесс iexplore.exe
...
Рейтинг: 0 / 0
26.11.2006, 13:39
    #34155891
UlanOf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как определить имя или хендл окна по имени процесса.
BarloneЗапускает IE. Нажимаем Ctrl+N. Смотрим в диспетчер задач и видим два "главных" окна и один процесс iexplore.exe
Ага я уже поглядел до этого... кароче не понял как это .... запутался нафик... Делал курсовую Диспетчер задач... Вот приведенный выше текс процедуры перебирает все процессы и смотри их окна... и выводит список, полностю соответствует тому что возвращает диспетчер винды на вкладке приложения... Работает исправно, отдельным потоком, с определенной скоростью обнавления... С окнами потом разберусь...
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как определить имя или хендл окна по имени процесса. / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]