Служба Windows (Win. 7) Получить активное окно не работает? - PullRequest
0 голосов
/ 27 октября 2011

У меня есть такая часть кода в моем проекте:

const int cChars = 256;
int ihandler = 0;

StringBuilder sBuff = new StringBuilder(cChars);
ihandler = GetForegroundWindow();

StreamWriter sw;
if (File.Exists("C:\\Log.txt"))
{
    sw = File.AppendText("C:\\Log.txt");
    sw.WriteLine(sBuff.ToString() + "->" + ihandler.ToString());
    sw.WriteLine("-----------");
    sw.Close();
}
else
{
    sw = new StreamWriter("C:\\Log.txt");
    sw.WriteLine(sBuff.ToString() + "->" + ihandler.ToString());
    sw.WriteLine("-----------");
    sw.Close();
}

Это значение всегда получает 0, и я не могу достичь имени активного окна. Я использую Windows 7. И это проект службы Windows, что мне делать? ihandler всегда получает 0, поэтому я не могу достичь имени.

Ответы [ 3 ]

3 голосов
/ 27 октября 2011

В службе Windows нет пользовательского интерфейса, нет зарегистрированного пользователя и нет активного окна.

Служба Windows запускается при запуске системы (если она настроена как автоматическая), и пользователь не входит в систему, поэтому он делаетНет смысла пытаться получить Актив или ForeGroundWindow.

. Вы должны исправить свой дизайн и избегать использования какого-либо окна, потому что вы не можете представить или предположить любое доступное и активное.

Редактировать: это могло бы работать на компьютерах до Windows XP, поскольку изменение работы служб в их собственных сеансах Windows было сделано в Vista / Win7.

все же, даже если это работало в Win2000 илиWinXP, был плохой дизайн.

1 голос
/ 27 октября 2011

Служба работает в отдельном сеансе, далеко от интерактивного сеанса с рабочим столом. В сеансе обслуживания нет такого понятия, как окно переднего плана, и поэтому оно возвращает 0.

0 голосов
/ 27 октября 2011

Вы можете попытаться разрешить службе взаимодействовать с рабочим столом. Я не уверен на 100%, решит ли это вашу проблему, но стоит попробовать.

В окне свойств вашего сервиса (services -> щелкните правой кнопкой мыши -> properties) перейдите на вкладку Log On и установите флажок «Разрешить сервису взаимодействовать с рабочим столом».

...