Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
FastTI
10 / 10 / 7
Регистрация: 29.08.2014
Сообщений: 84
#1

GetForegroundWindow() не работает в службе - C#

18.05.2016, 14:47. Просмотров 348. Ответов 8
Метки нет (Все метки)

Здравствуйте. Пишу сервис и возникла проблема с методом GetForegroundWindow(). При поиске активного окна.Метод возвращает 0.
http://www.cyberforum.ru/csharp-beginners/thread1670250.html

C#
1
2
3
4
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr GetForegroundWindow();
 
IntPtr handleActive = GetForegroundWindow() // = 0;
При чем все работает из консоли. Но не работает со службы. Я читал что вроде как там защита и из сервиса нет возможности десктопа считывать, но есть ли решение данной проблемы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2016, 14:47
Я подобрал для вас темы с готовыми решениями и ответами на вопрос GetForegroundWindow() не работает в службе (C#):

Использование таймера в службе
Здравствуйте. есть решение с двумя проектами: служба windows и библиотека...

Вызов функции в службе
Необходимо написать службу которая будет отслеживать подключение USB устройств....

Найти косяки в службе
Написал свою первую службу. По задумке она через определенное время очищает...

Получение информации о службе
Как средствами c# узнать тип запуска службы (автоматически или вручную) и...

Обработка глобальных исключений в службе
Добрый день! Подскажите пожалуйста. Не получается сделать обработку...

8
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
18.05.2016, 15:00 #2
Возможно поможет галка "разрешить взаимодействие с рабочим столом" в свойствах сервиса.

Но я бы на вашем месте подумал о том, что должна была бы вернуть эта функция, работай она как вы ожидаете, если в систему залогинено сразу несколько пользователей.
0
FastTI
10 / 10 / 7
Регистрация: 29.08.2014
Сообщений: 84
18.05.2016, 15:02  [ТС] #3
Цитата Сообщение от quwy Посмотреть сообщение
Возможно поможет галка "разрешить взаимодействие с рабочим столом" в свойствах сервиса.
Не помогает эта галка. пробовал((
0
OwenGlendower
Супер-модератор
Эксперт .NET
8746 / 7750 / 3317
Регистрация: 17.03.2014
Сообщений: 15,247
Записей в блоге: 1
18.05.2016, 15:03 #4
FastTI, сервис может работать когда в системе нет пользователей или когда их несколько. Поэтому в общем это неправильная постановка задачи. Зачем твоей службе информация о foreground окне?
0
FastTI
10 / 10 / 7
Регистрация: 29.08.2014
Сообщений: 84
18.05.2016, 15:09  [ТС] #5
посредством сервиса я получаю активное окно и уже исходя из его активности произвожу закрытие проги.
когда я проверяю свой код из консоли или winForms/wpf все отрабатывает и в переменную записывается имя процесса (того что мне нужно). А из сервиса этого не происходит. Имя процесса "Idle" оно не определяется.
0
OwenGlendower
Супер-модератор
Эксперт .NET
8746 / 7750 / 3317
Регистрация: 17.03.2014
Сообщений: 15,247
Записей в блоге: 1
18.05.2016, 15:13 #6
FastTI, сделай дополнительную программу которая будет работать в сеансе пользователя и общаться c сервисом через WCF или любой удобный способ межпроцессного общения. Клиентская программа сможет вызывать GetForegroundWindow() и любые другие необходимые функции.
1
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
18.05.2016, 15:14 #7
Цитата Сообщение от FastTI Посмотреть сообщение
А из сервиса этого не происходит
Вам уже дважды сказали, почему сервис не должен видеть пользовательских окон.
Напишите обычную безоконную программу и поместите ее в автозагрузку, тогда никаких проблем с GetForegroundWindow() не будет.
0
FastTI
10 / 10 / 7
Регистрация: 29.08.2014
Сообщений: 84
18.05.2016, 15:25  [ТС] #8
Цитата Сообщение от quwy Посмотреть сообщение
Вам уже дважды сказали, почему сервис не должен видеть пользовательских окон.
ну не должен не значит не может. В этом и вопрос как можно обойти данную проблему (не определение службой десктопа)

Цитата Сообщение от quwy Посмотреть сообщение
Напишите обычную безоконную программу и поместите ее в автозагрузку, тогда никаких проблем с GetForegroundWindow() не будет.
это то что я делаю сейчас... Но мне нужно чтобы от программы остался максимум один запущенный процесс и больше нигде не было "следов" от нее.

Добавлено через 1 минуту
Цитата Сообщение от OwenGlendower Посмотреть сообщение
сделай дополнительную программу которая будет работать в сеансе пользователя и общаться c сервисом через WCF или любой удобный способ межпроцессного общения
Пока для меня это темный лес. Но, спасибо копну глубже.
0
quwy
Native x86
3333 / 2180 / 649
Регистрация: 13.02.2013
Сообщений: 7,239
18.05.2016, 15:28 #9
Цитата Сообщение от FastTI Посмотреть сообщение
В этом и вопрос как можно обойти данную проблему
Никак, логика работы системы не предполагает подобного взаимодействия.

Цитата Сообщение от FastTI Посмотреть сообщение
Но мне нужно чтобы от программы остался максимум один запущенный процесс и больше нигде не было "следов" от нее.
И в чем проблема? Обычная (не консольная) программа без форм проявляет себя только строчкой в диспетчере процессов. Ни окон, ни кнопок на панели задач она не создает. Для управления можно заставить ее добавить иконку с контекстным меню в системный трей, но это совсем не обязательно.
1
18.05.2016, 15:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2016, 15:28
Привет! Вот еще темы с решениями:

Воспроизведение звука в службе Windows
Здравствуйте, передо мной стоит задача воспроизведения звуковой сигнализации...

Определение нажатой клавиши в службе Windows
Всем привет. Пишу службу для винды. Мне нужно определить нажата ли клавиша и...

Передача данных от приложения службе Windows
Уважаемые знатоки, подскажите пожалуйста, как мне правильнее или вообще хоть...

Как ограничить доступ к службе wcf
В общем вопрос для меня пока не однозначный но он имеет место быть. Можно ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru