Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2012, 00:15   #1
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию Delphi свернута ли программа?

Прошу помощи. Нужно определить, свернуто ли сторонее приложение или нет. Есть список процессов, их PID и путь к ехе.

Последний раз редактировалось CAN-UKRAINE; 18.02.2012 в 01:10.
CAN-UKRAINE вне форума Ответить с цитированием
Старый 18.02.2012, 08:19   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
свернуто ли сторонее приложение или нет
Именно свернуто? Не в трей, не скрыто а именно свернуто в кнопку на панели задач?
Цитата:
Есть список процессов, их PID и путь к ехе.
Теперь можешь поискать примеры с EnumThreadWindows, которая даст окна по "номеру" потока. Ну и... Даже не знаю что дальше, проверяй их состояние на скажем свернутость функцией IsIconic
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.02.2012, 22:04   #3
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию

Именно свернуто. Пробовал через IsIconic, но получаю только handle процессов. А вот получить имя ехе никак не получается
Код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Window:hWnd;
 buffer: array [0..127] of char;
 begin
 ListBox1.Clear;
 Window:=GetWindow(Handle,GW_HWNDFIRST);

 while Window<>0 do
  begin
    if ( IsIconic(Window)=False) and
    IsWindowVisible(Window) and
    (GetWindow(Window,GW_OWNER)=0) and
    (GetWindowText(Window,buffer,sizeof(buffer))<>0)
    then
     begin
     GetWindowText(Window,buffer,sizeof(buffer));
     ListBox1.Items.Add(StrPas(buffer));
     //ListBox2.Items.Add(GetModuleName(GetClassLong(Window,GCL_HMODULE)));
     end;

    Window:=GetWindow(Window,GW_HWNDNEXT);
    end;

  ListBox1.ItemIndex:=0;
 end;
CAN-UKRAINE вне форума Ответить с цитированием
Старый 19.02.2012, 09:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но получаю только handle процессов.
Имя... ИМХО нужно использовать библиотеку PSApi.
И ести делать так как ты то после получения хендла окна нужно получить процесс, к которому окно относится через GetWindowThreadProcessId
А уже через него и имя процесса можно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2012, 18:40   #5
CAN-UKRAINE
Пользователь
 
Регистрация: 30.10.2011
Сообщений: 24
По умолчанию

Получилось! Спасиба огромное. Пошол немного другим путем:
Зная Handle свернутых процессов, через function TakeProcessID получил их PID. И в окончании сравниваю со своим списком процессов
CAN-UKRAINE вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ у каво есть программа Биоритмов в Delphi или хотя бы исходник для Delphi Student_174 Помощь студентам 0 20.04.2011 12:53
Программа на Delphi milawka Фриланс 1 23.03.2011 22:22
delphi программа vbchristy46 Помощь студентам 4 15.06.2010 20:35
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46