Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.25;
Скачать: CL | DM;

Вниз

SPI_SCREENSAVERRUNNING не работает...   Найти похожие ветки 

 
Worst_87   (2007-01-27 15:32) [0]

Мне надо отключить клавиатурные сочетания: Windows+D, Ctrl+Esc и - самое главное - Ctrl+Alt+Del. Пытался воспользоваться этой ф-цией ничего не получилось, все кнопки как работали, так и работают.

Подскажите, пожалуйста, реальный способ отключения системных клавиш!

P.S.: Это не шпион и не троян, это всего лишь shell :-)


 
Eraser ©   (2007-01-27 22:03) [1]

> [0] Worst_87   (27.01.07 15:32)

CAD отключать не надо, а всё остальное - можно через LL_HOOK.


 
Worst_87   (2007-01-28 15:33) [2]

Eraser не понял, простите. Я чайник :-)

Можно примерчик ф-ции для отключения хотя бы сочетаний, открывающих Главное меню?


 
Eraser ©   (2007-01-28 16:23) [3]

> [2] Worst_87   (28.01.07 15:33)

пример хука?
unit LowLevelHook;

interface

uses
 JwaWinUser, Windows, Messages, Classes;

function InitializeLowLevelHook: Boolean;
function ReleaseLowLevelHook: Boolean;

var
 HookWindowList: TList;

implementation

uses ROMConst;

var
 hLowLevelHookHandle: HHOOK;
 hProcessID: Cardinal;

function LowLevelKeyboardProc(nCode: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
var
 bHandled, bKeyDown: Boolean;
 hWindow: THandle;
 pHookStruct: PKbDllHookStruct;
 ProcessID: Cardinal;
begin
 bHandled := False;
 if nCode = HC_ACTION then
 begin
   // Определяем, нужно ли перехватывать данное окно.
   hWindow := GetFocus;
   Windows.GetWindowThreadProcessId(GetFocus(), ProcessID);
   if ProcessID <> hProcessID then
     hWindow := 0;
   if (HookWindowList.IndexOf(Pointer(hWindow)) <> -1) and (hWindow <> 0) then
   begin
     pHookStruct := Pointer(lParam);
     bKeyDown := (wParam = WM_KEYDOWN) or (wParam = WM_SYSKEYDOWN);
     case pHookStruct.vkCode of
       VK_TAB:
         begin
           if (pHookStruct.flags and LLKHF_ALTDOWN) <> 0 then
             if bKeyDown then
             begin
               PostMessage(hWindow, LL_MSG, LL_MSG_PARAM_ALT_TAB, 0);
               bHandled := True;
             end;
         end;
       VK_LWIN:
         begin
           if bKeyDown then
             PostMessage(hWindow, LL_MSG, LL_MSG_PARAM_LWIN_DOWN, 0)
           else
             PostMessage(hWindow, LL_MSG, LL_MSG_PARAM_LWIN_UP, 0);
           bHandled := True;
         end;
       VK_RWIN:
         begin
           if bKeyDown then
             PostMessage(hWindow, LL_MSG, LL_MSG_PARAM_RWIN_DOWN, 0)
           else
             PostMessage(hWindow, LL_MSG, LL_MSG_PARAM_RWIN_UP, 0);
           bHandled := True;
         end;
     end;
   end;
 end;
 if bHandled then
   Result := 1
 else
   Result := CallNextHookEx(hLowLevelHookHandle, nCode, wParam, lParam)
end;

function InitializeLowLevelHook: Boolean;
begin
 hProcessID := GetCurrentProcessId;
 hLowLevelHookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc,
   HInstance, 0);
 Result := hLowLevelHookHandle <> 0;
end;

function ReleaseLowLevelHook: Boolean;
begin
 if hLowLevelHookHandle <> 0 then
   Result := UnhookWindowsHookEx(hLowLevelHookHandle)
 else
   Result := False;
end;

initialization
 HookWindowList := TList.Create;

finalization
 HookWindowList.Free;
end.


только его под свои условия конечно переделай, тут лишнего много.


 
Worst_87   (2007-01-28 17:55) [4]

И что, с этим хуком не будут работать все клавиши, которые мне нужны?


 
Eraser ©   (2007-01-28 20:08) [5]

> [4] Worst_87   (28.01.07 17:55)

у настрадамуса спроси )



Страницы: 1 вся ветка

Текущий архив: 2007.03.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
2-1172907376
elserpiente
2007-03-03 10:36
2007.03.25
Что это?


1-1170164319
whitebarin
2007-01-30 16:38
2007.03.25
Как программно отключить Falsh накопитель?


15-1172672040
Александр Иванов
2007-02-28 17:14
2007.03.25
Перенос БД


2-1172914538
Нуб
2007-03-03 12:35
2007.03.25
динамическое окно + динамическая кнопка


2-1172962863
buben
2007-03-04 02:01
2007.03.25
хэндл процесса