| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Потоки в формах и службах |
| Автор: boobie 14.1.2014, 08:04 | ||||||
| Добрый день! Чем отличается поведение потока (простого, объекта класса THread), если его создает не окно, а служба. Есть такой простенький поток:
Так вот, если я его запускаю в оконном приложении, то все работает как надо - поток работает, getasynckeystate - перехватывает клавиши, (перехват идет всегда: свернуто приложение или развернуто, в фокусе оно или невидимо). А если я этот поток запускаю из службы, то перехват не работает. Работает только счетчик
Что не так? Т.е. создаю службу и с параметрами ServiceType - stWin32 StartType - stAuto
П.С. В потоке, на самом деле, я использую переменные из MySluzhba, но работает только счетчик, энтер с бэкспэйсом не ловятся. Еще есть таймер, который заканчивает выполнение потока через 100 секунд и записывает все строки в файл. |
| Автор: Illusion Dolphin 14.1.2014, 08:44 | ||
Из доков:
|
| Автор: kami 14.1.2014, 09:13 |
Выбросьте его и юзайте таймер. Зачем нужен поток, если всё, что он выполняет - это вызывает Synchronize? |
| Автор: boobie 14.1.2014, 10:00 |
| Illusion Dolphin, Т.е. если рабочий стол не активен или приоритета не хватает и рабочий стол блокирует? Так почему с обычным приложением проходит, т.е. я сворачиваю его (или вообще делаю невидимым), набираю в блокноте, а getasynckeystate в потоке все видит... А тут? Это из-за того, что служба стартует вместе с системой? Как это обойти? Хуки помогут? |
| Автор: Illusion Dolphin 14.1.2014, 12:21 | ||||
Вы всё равно в активном десктопе.
Легально начиная с Vista никак вроде, в любом случае дожно быть приложение в вашем активном десктопе. |
| Автор: boobie 14.1.2014, 13:15 | ||
Получатся, что голые службы вообще не могут использовать
А хуками могут пользоваться? |