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

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

18.01.2012, 03:54. Показов 2268. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.01.2012, 03:54
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 42 секунды
сори за ошибки, надеюсь смысл понятен)
Спасибо. Но это не подходит. Я делаю аналог TeamViewer.
0
56 / 56 / 10
Регистрация: 27.12.2011
Сообщений: 141
18.01.2012, 15:07
Загугли, должны быть исходники подобных приложений, посмотри кто как выходил из ситуации!
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 3
18.01.2012, 15:09  [ТС]
Цитата Сообщение от Караман Посмотреть сообщение
Загугли, должны быть исходники подобных приложений, посмотри кто как выходил из ситуации!
Уже все перегуглил. Дело в том, что у меня клиент под Android. Под Windows я уже давно решил этот вопрос через MapVirtualKey и keybd_event.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2012, 15:09
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru