Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 3
1

Проблема с SendKeys.SendWait. Приложение зависает, если на удаленном компьютере происходит авторизация в системе или смена пользователя

18.01.2012, 03:54. Показов 1775. Ответов 4
Метки нет (Все метки)

Здравствуйте. Вообщем пишу сервис, который принимает через сеть символы с клавиатуры и "нажимает" их. Возникла проблема. Если на компьютере у пользователя не стоит пароль, то сразу после загрузки мы попадаем на рабочий стол. Сервис в это время работает и принимает символы и успешно печатает их. Если возникает ситуация когда пользователь вызывает окно смены пользователя или блокирует свой сеанс, то мы видим стандартное окно авторизации... Тут то и возникает проблема. Символы не печатаются. И поток сервиса зависает на строке SendKeys.SendWait(...). Точно такая же ситуация если при загрузке компьютера нам предлагают авторизироваться и мы еще не видели рабочий стол пользователя. Т.е я могу ввести данные авторизации, но потом когда подгрузится рабочий стол SendKeys.SendWait(...) вешает процесс.

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

Класс который это делает:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SwitchToUIDesktop : IDisposable
    {
        private IntPtr _newDesktop = IntPtr.Zero;
        private IntPtr _oldDesktop = IntPtr.Zero;
 
        
        public  SwitchToUIDesktop()
        {
            this._oldDesktop = Win32.GetThreadDesktop(Win32.GetCurrentThreadId());
            this._newDesktop = Win32.OpenInputDesktop(0, true, 0x2000000);
            Win32.SetThreadDesktop(this._newDesktop);
        }
 
        void IDisposable.Dispose()
        {
            if (this._oldDesktop != IntPtr.Zero)
            {
               Win32.SetThreadDesktop(this._oldDesktop);
            }
            if (this._newDesktop != IntPtr.Zero)
            {
               Win32.CloseDesktop(this._newDesktop);
            }
        }
    }
Использование:
C#
1
2
3
4
using (new SwitchToUIDesktop())
{
    SendKeys.SendWait(символ);
}
Не могу понять в чем проблема
Заранее ОГРОМНОЕ человеческое спасибо!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2012, 03:54
Ответы с готовыми решениями:

Не срабатывает SendKeys.SendWait
Если кнопка мыши нажата,то SendKeys.SendWait("{DOWN}") листание НЕ вызывает. При этом я нашел, что...

SendKeys.SendWait() не успевает обрабатывать
Добрый день. Через SendWait отправляю вот такую вещь SendKey("{ENTER}{DIVIDE}my name is...

SendKeys.SendWait() как то криво работает
Есть программа, которая должна посылать нажатие клавиши 1. Я сделал так: SendKeys.SendWait(1)...

Почему программа получая символы от SendKeys.SendWait выводит ”\”?
Проблема возникла с консольной программой написанной кем-то очень давно в Дании (наверное на языке...

4
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
18.01.2012, 15:02 2
Сделай свойство в которое будешь записывать статус соединения таймаут, подключение делай в потоке, если через определенное время свойство не будет инициализовано свойство значением "подключены", делаешь выход из потока и попытка переподключения. Это как вариант, но уверенесть более красивый и лёгкий способ.

Добавлено через 42 секунды
сори за ошибки, надеюсь смысл понятен)
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 3
18.01.2012, 15:04  [ТС] 3
Цитата Сообщение от Караман Посмотреть сообщение
Сделай свойство в которое будешь записывать статус соединения таймаут, подключение делай в потоке, если через определенное время свойство не будет инициализовано свойство значением "подключены", делаешь выход из потока и попытка переподключения. Это как вариант, но уверенесть более красивый и лёгкий способ.

Добавлено через 42 секунды
сори за ошибки, надеюсь смысл понятен)
Спасибо. Но это не подходит. Я делаю аналог TeamViewer.
0
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
18.01.2012, 15:07 4
Загугли, должны быть исходники подобных приложений, посмотри кто как выходил из ситуации!
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 3
18.01.2012, 15:09  [ТС] 5
Цитата Сообщение от Караман Посмотреть сообщение
Загугли, должны быть исходники подобных приложений, посмотри кто как выходил из ситуации!
Уже все перегуглил. Дело в том, что у меня клиент под Android. Под Windows я уже давно решил этот вопрос через MapVirtualKey и keybd_event.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.01.2012, 15:09

SendKeys.SendWait: Как отловить тот момент, когда сообщение обработано конечным окном?
Собственно вопрос: как отловить тот момент, когда сообщение обработано конечным окном?

Не происходит смена пользователя
Доброго времени суток. У меня проблема с windows 7. Как обычно, для смены пользователя нажал пуск -...

Смена пользователя (авторизация) - перезагрузка приложения
У меня в приложении есть авторизация с последующим подключением к БД. Если пользователь поставил...

Метод SendKeys.SendWait передает вместо точки "/"
Имеется форма, которая заменяет точку в email ,если использовать метод SendKeys. Форма на флеше,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru