|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.11.2010, 12:24 | #1 |
Новичок
Джуниор
Регистрация: 03.08.2010
Сообщений: 2
|
Доброго времени суток. Пишу на С++ (MS Visual Studio 2008). Коротко о самой задаче, затем о проблеме.
***Задача***: пишется EXE-ник, который запускает проги на новом рабочем столе, это не терминал, а просто новый рабочий стол на той же станции (HWINSTA). Так же нужно переключение между рабочими столами. ***Реализация***: написан EXE-ник (RunApp.exe), который запускает проги на новом рабочем столе. написан EXE-ник (DesktopInit.exe), который подгружает HOOK.DLL и устанавливает ловушку на клавиатуру. написана DLL (HOOK.DLL), в которой реализована процедура "LRESULT CALLBACK KeyboardProc(...". запуск в следующем порядке: Сначала RunApp.exe подгружает HOOK.DLL и устанавливает ловушку на клавиатуру на основном Desktope, Затем RunApp.exe запускает на новом DESKTOP-e процесс DesktopInit.exe, который подгружает HOOK.DLL и устанавливает ловушку на клавиатуру на новом DESKTOPe. Затем RunApp.exe запускает на новом DESKTOPe любые приложения (согласно пареметрам коммандной строки RunApp.exe). Подгружать HOKK.DLL на обоих DESKTOP-ах нужно потому что все процессы при запуске привязаны к одному рабочему столу параметром lpDesktop структуры STARTUPINFO и ловушки срабатывают так же с привязкой к DESKTOP-у. ***ПРОБЛЕМА*** на новом DESKTOPе можно запустить процесс (например notepad.exe) от имени другого пользователя, и при нажатии на клавиатуру все работатет. Нажмем условную комбинацию клавиш и переключемся на основной DESKTOP, А ТУТ ЗАСАДА, если запустить процес от имени другого юзера (на важно Admin или нет) то процес работает пока не нажмешь клавишу на кавиатуре(фокус клавиатуры на этом процессе). как тока нажал — ПРОЦЕСС ВИСНЕТ и все. А процессы запущенные от того же юзера — работают без нариканий, и по той же комбинации можно опять переключится на новый DESKTOP. Если RunApp.exe не запускает ни один процесс на новом Desktope, или запускает процессы на основном рабочем столе, и подгружает HOOK.DLL и устанавливает ловушку на клавиатуру, то на основном (единственном) рабочем столе ничего не виснет, под любым юзером, все красиво отрабатывается. ***ВОПРОС***: почему виснет и как избежать зависания !!! помогите разобраться, плиз. Запуск на новом раб. столе: код RunApp.exe: Код:
Код:
hKeyHook = SetWindowsHookEx(WH_KEYBOARD, &KeyboardProc, gl_hInst, 0); Виснет даже при такой реализации ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// LRESULT CALLBACK KeyboardProc (int code, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(hKeyHook, code, wParam, lParam); } Это третий форум, всего просмотров больше 250, и ни на одном ни одного ответа, ни совета, ни предложения..... Ну че блин за фигня, проблему то надо как то решить, ну хоть че нить подскажите. плиииз. Последний раз редактировалось Stilet; 22.11.2010 в 10:09. |
21.11.2010, 17:24 | #2 |
Форумчанин
Регистрация: 09.03.2008
Сообщений: 127
|
Пробуй отладить процесс, который подвисает, установи свой отладчит системы по-умолчанию и посмотри в каком именно месте подвис процесс, посмотри стек вызовов, и там думаю все поймешь и сам...
|
22.11.2010, 10:01 | #3 |
Новичок
Джуниор
Регистрация: 03.08.2010
Сообщений: 2
|
Засада гдето в RunApp
Если RunApp.exe не запускает ни один процесс на новом Desktope, или запускает процессы на основном рабочем столе, и подгружает HOOK.DLL и устанавливает ловушку на клавиатуру, то на основном (единственном) рабочем столе ничего не виснет, под любым юзером, все красиво отрабатывается. я создал еще один тестовый прект по умолчанию Win32 (создает окно, процедуру обраб. сообщ. окна ...) запустил его из под VS под друзим юзером, нажал на клаву и процесс повис, я в отладчик жму на паузу а мне сообщение: "Процесс, по-видимому заблокирован (или не в состоянии выполнять код пользовательского режима). Все потоки остановлены." остановился на строке Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запуск программы от имени другого пользователя... | EraM | Общие вопросы Delphi | 3 | 12.05.2011 11:07 |
Определение имени пользователя из сервиса | Garacio_cain | Общие вопросы Delphi | 2 | 10.12.2009 17:17 |
Событие при нажатии на клавиатуру | BuT@JL | Общие вопросы Delphi | 8 | 26.06.2009 11:27 |
Прочесс без имени пользователя | delphin100 | Общие вопросы Delphi | 0 | 29.10.2008 06:45 |
Получение прав другого пользователя | Квэнди | Win Api | 14 | 28.07.2008 14:49 |