Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Установи низкоуровневый клавиатурный хук
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc, hinstExe, 0);
Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Re[2]: Как предотвратить потерю фокуса приложением?
Мне всегда казалось что при Alt+Tab поток В ЛЮБОМ СЛУЧАЕ отключается от RIT, (Вроде в Рихтере так написано, приду домой перепроверю), и то что никаким хуком это не проймешь — типа CtrlAltDel
Поправьте меня если я не прав.
Саша.
Re[2]: Как предотвратить потерю фокуса приложением?
Не покатит. Это не запретит потерю фокуса путем кликания на другом приложении или на таскбаре. Надо предотвратить именно потерю фокуса, а не нажатие на Алт-Таб
Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Не потеряла фокус ? Для чего ?
Чем топмост не устраивает ?
Приоритет у твоей задачи, что она будет в топе, что в бэкграунде — одинаковый.
Так и зачем ?
Установи приоритет реалтайм + топмост...
Re[2]: Как предотвратить потерю фокуса приложением?
Здравствуйте sasha, Вы писали:
S>Здравствуйте asd, Вы писали:
asd>>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
S>Установи низкоуровневый клавиатурный хук S>HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc, hinstExe, 0);
S>
Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Есть такойй топик в MSDN. Там и ссылка на пример есть, но пример я не смог скачать
Коротко суть : обрабатываешь чз хуки все сообщения от клавиатуры, активации, фокусные и тд. Нужно также системную очередь сообщения фильтровать. Сканируешь все окна, и добиваешься того, чтоб они не лезли никуда.
Возможно, на время, перебрать все окна и попробовать задизаблить их (это уже моя идея), но не все дадут себя задизаблить.
Re[3]: Как предотвратить потерю фокуса приложением?
Здравствуйте Dimon, Вы писали:
D>Пользователь ткнулся мышью в другое окно и все D>Все твои усилия насмарку
Люди, вы чего
Нападение какое-то устроили на мой несчастный кусок кода
Разве я говорил что-нибудь про тыкание мышкой где-нибудь?
Разве человек, хоть немного разбирающийся в программировании может подумать, что я пытался отловить мышь? Думаю, что нет. Я хотел только помочь человеку с клавой. И надеюсь, что все-таки
"все мои усилия" не были насмарку
С наилучшими пожеланиями, sasha.
Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
По поводу клавиатуры тут уже много говорили. А по поводу мыши есть интересная идея: задать границы перемещения курсора, чтобы его нельзя было вывести за пределы диалога (а значит и щёлкнуть на чужом окне не получится). Для этого используется функция ClipCursor:
Примечание: после перемещения или ресайзинга эффект ClipCursor теряется. Поэтому нужно повторно вызывать эту функцию или вообще запрещать указанные операции.
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Здравствуйте asd, Вы писали:
asd>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
Моежт уже не актулаьно, но тем не менее, вот цитата из Рихтера насчет Alt+Tab
So how do different thread's get connected to the RIT? Well, as I've just explained, when a process is spawned, this process's thread can create a window. This window comes to the foreground and its thread gets connected to the RIT. In addition, the RIT is responsible for handling special key sequences such as Alt+Tab, Alt+Esc, and Ctrl+Alt+Del. Since the RIT handles these key sequences internally, users are guaranteed that they can always activate windows with the keyboard; there is no way for an application to intercept and discard these key sequences. When the user presses one of the special key sequences, the RIT activates the selected window and connects its thread to the RIT. Windows also offers functions that activate a window, causing the window's thread to be connected to the RIT.
Cаша.
Re[2]: Как предотвратить потерю фокуса приложением?
Здравствуйте Hollander, Вы писали:
H>Здравствуйте asd, Вы писали:
asd>>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
H>Есть такойй топик в MSDN. Там и ссылка на пример есть, но пример я не смог скачать H>Коротко суть : обрабатываешь чз хуки все сообщения от клавиатуры, активации, фокусные и тд. Нужно также системную очередь сообщения фильтровать. Сканируешь все окна, и добиваешься того, чтоб они не лезли никуда.
H>Возможно, на время, перебрать все окна и попробовать задизаблить их (это уже моя идея), но не все дадут себя задизаблить.
А как топик этот назывался? Хоцца взглянуть...
Re[3]: Как предотвратить потерю фокуса приложением?
Здравствуйте 0xFEED, Вы писали:
FEED>Здравствуйте Hollander, Вы писали:
H>>Возможно, на время, перебрать все окна и попробовать задизаблить их (это уже моя идея), но не все дадут себя задизаблить.
FEED>А как топик этот назывался? Хоцца взглянуть...
Нашел: Q80822 NoSwitch.exe Prevents Windows from Switching Tasks
Subclass the desktop window to prevent the Task List from being displayed when the user double-clicks the desktop window.
Prevent the user from using key combinations to switch to another task by trapping the following three wParam values for the WM_SYSCOMMAND message: SC_NEXTWINDOW, SC_PREVWINDOW, and SC_TASKLIST.
Prevent other applications from activating themselves by enumerating all top-level windows, and disabling the windows that do not belong to this application.
Each time a WM_INITMEMUPOPUP message is received for the system menu, disable the menu items that relate to switching tasks.
Re[2]: Как предотвратить потерю фокуса приложением?
Здравствуйте Alexander Shargin, Вы писали:
AS>Здравствуйте asd, Вы писали:
asd>>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
AS>По поводу клавиатуры тут уже много говорили. А по поводу мыши есть интересная идея: задать границы перемещения курсора, чтобы его нельзя было вывести за пределы диалога (а значит и щёлкнуть на чужом окне не получится). Для этого используется функция ClipCursor:
AS>
AS>Примечание: после перемещения или ресайзинга эффект ClipCursor теряется. Поэтому нужно повторно вызывать эту функцию или вообще запрещать указанные операции.
Вот цитата из всеми нами любимого Рихтера по поводу ClipCursor:
... if an asynchronous activation event occurs (when the user clicks on another application's window, when a call to SetForegroundWindow is made, or when Ctrl+Esc is pressed), the system stops clipping the cursor's movement, allowing the cursor to move freely across the entire screen.
Re[3]: Как предотвратить потерю фокуса приложением?
Здравствуйте sasha, Вы писали:
S>Вот цитата из всеми нами любимого Рихтера по поводу ClipCursor: S>... if an asynchronous activation event occurs (when the user clicks on another application's window, when a call to SetForegroundWindow is made, or when Ctrl+Esc is pressed), the system stops clipping the cursor's movement, allowing the cursor to move freely across the entire screen.
Ну и что? В том то и дело, что юзер не сможет щёлкнуть по другому окну, если ему не вывести курсор за пределы нашего. По крайней мере мне (когда я проверял эту идею) не удалось. А по поводу Ctrl+Esc надо заботиться отдельно, на это я не претендую...
--
Я думал, ты огромный страшный Бажище,
А ты недоучка, крохотный Бажик...
Re[4]: Как предотвратить потерю фокуса приложением?
Здравствуйте Alexander Shargin, Вы писали:
AS>Здравствуйте sasha, Вы писали:
S>>Вот цитата из всеми нами любимого Рихтера по поводу ClipCursor: S>>... if an asynchronous activation event occurs (when the user clicks on another application's window, when a call to SetForegroundWindow is made, or when Ctrl+Esc is pressed), the system stops clipping the cursor's movement, allowing the cursor to move freely across the entire screen.
AS>Ну и что? В том то и дело, что юзер не сможет щёлкнуть по другому окну, если ему не вывести курсор за пределы нашего. По крайней мере мне (когда я проверял эту идею) не удалось. А по поводу Ctrl+Esc надо заботиться отдельно, на это я не претендую...
OK, согласен, я не совсем правильно понял идею
Таким образом, подводя итог, можно сказать, что мы пришли к всеобщему соглашению по поводу первоначального вопроса. Alt-Tab, Alt-Esc и Ctrl-Esc отловили, мышку отловили
С чем всех нас и поздравляю
Re[2]: Как предотвратить потерю фокуса приложением?
Здравствуйте Dimon, Вы писали:
D>Здравствуйте asd, Вы писали:
asd>>Хочется вот чего: чтобы приложение, основанное на диалоге никогда не теряло фокус (не путайте с топ-мост), то есть чтобы пока оно выполняется, нигде более нельзя было бы кликать, переключаться по Alt-Tab, Ctrl-Esc итд. Как такое запрограмить под Win2K (про то, чтобы запретить Ctrl-Alt-Del я даже не прошу)?
D>Не потеряла фокус ? Для чего ? D>Чем топмост не устраивает ? D>Приоритет у твоей задачи, что она будет в топе, что в бэкграунде — одинаковый. D>Так и зачем ? D>Установи приоритет реалтайм + топмост...
Ага а ещё проще убей все остальные процессы кроме своего — мороке меньше !
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)