![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я пробую написать небольшую прогу для блокировки Винды(появляется табличка с просьбой ввода парля), но у меня возникла проблема: так как при нажатии кнопок Alt+Tab происходит переключение на другое окно, то я попроюовал ето обойти при помощи:
... procedure TForm1.Timer1Timer(Sender: TObject); begin if GetForegroundWindow<>Form1.Handle then SetForegroundWindow(Form1.Handle); end; ... но результат етого не радует(есть вероятность, что переключение на другое окно при нажатии Alt+Tab произойдет) и вот тут мне пришел в голову вопрос - а можно ли перехватить нажатие кнопки Alt или Tab?(В событие OnKeyPress получалось перехватить к примеру Shift, но при нажатии Alt ни какой реакции не было ) Подскажите пожалуйста можно ли как нибудь перехватить нажатие Alt или Tab, так чтобы не появлялась табличка выбора окна? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Перехватить-то легко, но вопрос не в этом, нужно подменить нажатие т.е. сказать системе что мы ничего не нажимали.
Можно выключить комбинацию черех хук или горячую клавишу. Подробности в MSDN'е или SDK в Дельфи. Однако в NTях по-моему не выйдет. Всё это справедливо для Ctrl+ESC и Alt+Tab, но не для CAD. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 14 Всего: 115 |
1 FormStyle:=fsStayOnTop;
2 отключи ALT+CTRL+DEL SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,nil,0) потом если надо вруби SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,nil,0) хотя второго будет достаточно. |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Дело в том, что отключение CAD таким образом может быть только в W9x,Me. И при этом комбинация Alt+Tab (её нужно было временно отключить, а не CAD) отключается вообще т.е. и переключаться не будет но и ловиться тоже. Вот такие дела.
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
на onKeyPress Shift перехватить невозможно. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Сорри перепутал - OnKeyDown |
||||
|
|||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
а так можно: if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 1); ? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Ну.. в onKeyDown Alt перехватить не сложно: IF ssAlt in Shift then ShowMessage('Нажата клавиша Alt'); -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
WM_HOTKEY? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Ага,
RegisterHotKey()+WM_HOTKEY -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
К примеру я регистрирую 'горячую клавишу':
... procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Handle,id_AltTab,MOD_ALT,VK_TAB); end; ... Как можно узнать идентификатор id_AltTab?(это будет суммой десятичного значения Alt и Tab?) |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я тут порылся в Help'e и наткнулся на GlobalAddAtom - при помощи этой функции можно получить идентификатор 'hot key'?
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Кто-нибудь может вкратце объяснить, что такое ATOM.
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Атом - "поименнованный" кусочек памяти доступный всем процессам для передачи небольшого куска информации из одной программы в другую.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Vit писал недавно пример взятый с мастаков как зарегистрировать горячую клавишу. По-моему там всё доступно обяснено...
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я попробовал зарегистрировать Alt+F4 - там все было ОК, но при регистрации HotKey Alt+Tab эту комбинацию все равно можно нажать:
procedure TForm1.hotykey(var msg:TMessage); begin if (msg.LParamLo=MOD_ALT) and (msg.LParamHi=VK_TAB) then begin ShowMessage('Alt + Tab Pressed'); end; end; procedure TForm1.FormCreate(Sender: TObject); begin id:=GlobalAddAtom('hotkey'); RegisterHotKey(handle,id,mod_ALT,VK_TAB); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnRegisterHotKey(handle,id); end; В чем ошибка? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
В смысле что она ловится, но приложения всё-равно переключаются ?
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
По моему Alt+Tab вообще не ловится, поскольку ShowMessage не появляется! |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
А сообщение WM_HOTKEY в описании класса формы описал ?
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } protected procedure HotKey(var msg:TMessage); message WM_HOTKEY; end; |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |