Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.007 c
14-64355
JibSkeart
2003-03-04 16:09
2003.03.20
Кто нибуть сталкивался с Radio Ethernet ??


1-64151
kex86
2003-03-07 06:42
2003.03.20
until not GetMessage(msg, 0, 0, 0);


3-63942
AtoL
2003-03-03 15:26
2003.03.20
Программный backup БД


1-64106
off
2003-03-06 08:59
2003.03.20
*.ini или registry?


14-64321
Донской
2003-03-04 09:48
2003.03.20
Interbase 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский