Форум: "Система";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
ВнизПерехват лампочки Scroll Lock на клавиатуре Найти похожие ветки
← →
GrBob (2003-01-20 20:19) [0]Подскажите, как сделать, чтобы пользователь не мог зажечь лампочку Scroll Lock(даже когда Программа.Visible=False).
+ Желательно, чтобы и программы, мигающие лампочками, тоже не работали. (Порчу клавиатуры не предлагать).
← →
E_Dimon (2003-01-20 22:49) [1]Попробуйте перехват нажатий клавиш или
функцию RegisterHotKey, код клавиши Scroll Lock - VK_SCROLL
← →
Fiend (2003-01-21 14:03) [2]Вообще то, он ее всегда сможет "зажечь", например зажигалкой!
Ж)
← →
M@X (2003-01-23 10:58) [3]Зажечь лампочку или включить режим Scroll?
Лампочку зижигаем asm_блерным кодом (почитай доку), а чтобы пользователь не нажимал scroll - имеется компонент TПлоскогубцы для физического изничтожения батона
← →
Viktor Kushnir (2003-01-24 08:59) [4]На самом деле TОтвертка + TПояльник куда лучше и безболезненее
← →
Anatoly Podgoretsky (2003-01-24 09:12) [5]Наклеить непрозрачную бумажку, не совсем порча, всегда можно отклеить.
← →
FH (2003-01-24 11:12) [6]нука, нука о б асмовском коде если можно, поподробнее...
← →
Севостьянов Игорь (2003-01-24 19:04) [7]У меня есть решение хоть не идеальное и может автор хотел нечто иное, но проще говоря пользователь сможет зажеч лампочку на долю секунды, но она тут же погаснет. Вот собственно код:
---------------------
DLL
---------------------
library HookAgnt;
uses Windows,
KeyboardHook in "KeyboardHook.pas";
exports
KeyboardProc;
var
hFileMappingObject: THandle;
lpvMem: Pointer;
//----------------------------//
// DLL_PROCESS_DETACH //
//----------------------------//
procedure DLLMain(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
UnmapViewOfFile(lpvMem);
CloseHandle(hFileMappingObject);
end;
end;
//----------------------------//
// DLL_PROCESS_ATTACH //
//----------------------------//
begin
DLLProc := @DLLMain;
hFileMappingObject := CreateFileMapping(
THandle($FFFFFFFF), // use paging file
nil, // no security attributes
PAGE_READWRITE, // read/write access
0, // size: high 32 bits
4096, // size: low 32 bits
"HookAgentShareMem" // name of map object
);
if hFileMappingObject = INVALID_HANDLE_VALUE then
begin
ExitCode := 1;
Exit;
end;
lpvMem := MapViewOfFile(
hFileMappingObject, // object to map view of
FILE_MAP_WRITE, // read/write access
0, // high offset: map from
0, // low offset: beginning
0 // default: map entire file
);
if lpvMem = nil then
begin
CloseHandle(hFileMappingObject);
ExitCode := 1;
Exit;
end;
end.
unit KeyboardHook;
interface
uses Windows;
var
hCurrentHook: HHOOK;
function KeyboardProc(hCode: Integer; vkCode: WPARAM; ksMsgInf: LPARAM): LRESULT; stdcall;
implementation
uses Messages;
procedure SetKeyState(Key: Integer);
var
KeyBoardState : TKeyboardState;
begin
GetKeyBoardState(KeyBoardState);
if ByteBool(GetKeyState(Key) and 1) then
begin
keybd_event(Key, Lo(MapVirtualKey(Key, 0)), 0, 0);
keybd_event(Key, Lo(MapVirtualKey(Key, 0)), KEYEVENTF_KEYUP, 0);
end;
end;
function KeyboardProc(hCode: Integer; vkCode: WPARAM; ksMsgInf: LPARAM): LRESULT;
begin
Result := 0;
if vkCode <> VK_SCROLL then
begin
Result := CallNextHookEx(hCurrentHook, hCode, vkCode, ksMsgInf);
end
else
begin
SetKeyState(VK_SCROLL);
end;
end;
end.
---------------------
EXE
---------------------
program KbdHook;
uses
Windows,
Dialogs;
var
hinstDLL: HINST;
hkprcKeyboard: TFNHookProc;
msg: TMsg;
begin
hinstDLL := LoadLibrary("HookAgnt.dll");
hkprcKeyboard := GetProcAddress(hinstDLL, "KeyboardProc");
SetWindowsHookEx(WH_KEYBOARD, hkprcKeyboard, hinstDLL, 0);
repeat until not GetMessage(msg, 0, 0, 0);
end.
---------------------
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.03.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c