// Ctrl+Alt+Del 키를 사용못하게... SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@nOldVal,0); // Alt+Tab 및 Ctrl+ESC 막기 SystemParametersInfo(SPI_SETFASTTASKSWITCH,1,@nOldVal,0); 95/98에서는 위와같이 사용하는데... 2000은...
구창민
•
2001.10.31 10:55
처음 wrote:
> // Ctrl+Alt+Del 키를 사용못하게...
> SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@...
> // Ctrl+Alt+Del 키를 사용못하게...
> SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@nOldVal,0);
> // Alt+Tab 및 Ctrl+ESC 막기
> SystemParametersInfo(SPI_SETFASTTASKSWITCH,1,@nOldVal,0);
>
> 95/98에서는 위와같이 사용하는데...
> 2000은 먹질 않더라구요...
> 아시는분 도움 좀 주세요
>
안녕하세요~ 구창민입니다.
SystemParametersInfo 함수는 윈도그9.x 전용함수입니다.
NT 계열에서는 지원하시지 않지요.
아래 소스를 참고하세요.
윈도그 2000 에서 Alt+Tab, Alt+ESC, Ctrl+ESC 키들을 막아줍니다.
손쉽게 테스트 해보려면 빈폼을 올리고 Button을 두개 올린다음
ButtonClick 이벤트를 두개다 만드시구요. 두 Button을 더블클릭 한번씩 하시면 됩니다. ^_^;
그런다음 아래 소스를 통째로 Unit1 파일에 엎어쓰세요.
예전에 테스트 해본 코드니 바로 컴파일 될겁니다.
그럼~ 항상 즐거운 프로그래밍 하시길~~~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
PKBDLLHOOKSTRUCT = ^TKBDLLHOOKSTURCUT;
TKBDLLHOOKSTURCUT = record
vkCode,
scanCode,
flag,
time,
dwExtraInfo: DWORD;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
hRainKeyHook: cardinal;
public
{ Public declarations }
end;
var
Form1: TForm1;
hhookCurrent: HHOOK;
implementation
{$R *.DFM}
function KeyBoardProc( icode: integer; wParam: integer; lParam: integer): integer; stdcall;
var
p: PKBDLLHOOKSTRUCT;
fEatKeystroke: Boolean;
begin
fEatKeystroke := False;
if ( icode = HC_ACTION ) then
begin
case ( wParam ) of
WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT( lParam );
fEatKeystroke := ( p^.vkCode = VK_TAB ) and ( ( p^.flag and $00000020 ) <> 0 ) or
( p^.vkCode = VK_ESCAPE ) and ( ( p^.flag and $00000020 ) <> 0 ) or
( p^.vkCode = VK_ESCAPE ) and ( ( GetKeyState( VK_CONTROL ) and $8000 ) <> 0 );
end;
end;
end;
if fEatKeystroke then result := 1
else
result := CallNextHookEx(0, iCode, wParam, lParam);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
hhookCurrent := SetWindowsHookEx( 13{WH_KEYBOARD_LL}, @KeyBoardProc, HInstance, 0 );
caption := inttostr( hhookCurrent );
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if hhookCurrent <> 0 then
begin
UnhookWindowsHookEx( hhookCurrent );
hhookCurrent := 0;
end;
end;
end.