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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 02:15   #1
Obert
 
Регистрация: 20.05.2010
Сообщений: 7
По умолчанию узнать активно ли (foreground) приложение

Здравствуйте, мне понадобилась функция, которая определяет активно ли (находится в foreground) определённое приложение (в данном случае "Second Life").
Я написал:

Код:
function if_SL_foreground:boolean;
const
  MaxCaptionSize: integer = 88;
var
  MonolitHandle: HWND;
  MonolitCaption: String;
begin
  Application.ProcessMessages;

  SetLength(MonolitCaption, MaxCaptionSize);
  MonolitHandle := GetForegroundWindow();
  GetWindowText(MonolitHandle, PChar(MonolitCaption), MaxCaptionSize);

  if MonolitCaption='Second Life' then Result:=True else Result:=False;
end;
Проблема: MonolitCaption берёт из активного окна именно "Second Life", но при сравнении со строкой 'Second Life' результат оказывается отрицательным. Может проблема в том, что Delphi переведён в Юникод? У меня Delphi 2010.

Решить проблему удалось заменив

Код:
if MonolitCaption='Second Life' then Result:=True else Result:=False;
на

Код:
Form1.Edit1.Text:=MonolitCaption;
if Form1.Edit1.Text='Second Life' then Result:=True else Result:=False;
введя невидимую TEdit. Но это же очень некрасиво! Можно ли как-то конвертировать MonolitCaption более приличным способом?

Последний раз редактировалось Obert; 20.05.2010 в 02:22.
Obert вне форума Ответить с цитированием
Старый 20.05.2010, 02:35   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

текстовая переменная?
Код:
var
str:String;
...
...
str:=MonolitCaption;
vovk вне форума Ответить с цитированием
Старый 20.05.2010, 02:36   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

'Second Life' это заголовок формы?

можно решить вопрос по определению PID процесса с активным окном и уже сравнивать его.
ведь я думаю у вас не только форма есть.

можно и так поступить:
Цитата:
function if_SL_foreground:boolean;
const
MaxCaptionSize: integer = 88;
var
MonolitHandle: HWND;
MonolitCaption: String;
begin
Application.ProcessMessages;
SetLength(MonolitCaption, MaxCaptionSize);
MonolitHandle := GetForegroundWindow();
SetLength(MonolitCaption,GetWindowT ext(MonolitHandle,PChar(MonolitCapt ion),MaxCaptionSize));
if MonolitCaption='Second Life' then Result:=True else Result:=False;
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.05.2010 в 02:38.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.05.2010, 02:53   #4
Obert
 
Регистрация: 20.05.2010
Сообщений: 7
По умолчанию

vovk, да нет, текстовая переменная ничего не меняет, я попробовал.

А вот способ, предложенный Пепел Феникса работает!

Большое спасибо, вопрос решён.
Obert вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение shock-in Общие вопросы Delphi 2 19.12.2009 22:03
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) Мила777 Фриланс 2 21.10.2009 11:05
mdi приложение Михаил Юрьевич Общие вопросы Delphi 1 21.09.2009 01:01
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12