Q&A

  • 윈도우 시작키를 제어하는 방법 있나요?..Plz..


안녕하세요..



프로그램특성상 윈도우즈에서 사용하는 키들을 후킹으로 막고있는데



윈도우 시작키만은 이거 제어하기 상당히 힘드네요..



(흠..왜이리 막아야되는 키가 많은지..ctrl+alt+del..alt+f4..alt+tab..)



윈도우 시작키(ctrl+Esc:같은기능을하죠) 에 전혀 반응하지못하도록 할수있는지



-시작화면조차도 안보이게-



답변 부탁드립니다..





1  COMMENTS
  • Profile
    김영대 1999.10.22 23:02
    조복기 wrote:

    >

    > 안녕하세요..

    > 프로그램특성상 윈도우즈에서 사용하는 키들을 후킹으로 막고있는데

    > 윈도우 시작키만은 이거 제어하기 상당히 힘드네요..

    > (흠..왜이리 막아야되는 키가 많은지..ctrl+alt+del..alt+f4..alt+tab..)

    > 윈도우 시작키(ctrl+Esc:같은기능을하죠) 에 전혀 반응하지못하도록 할수있는지

    > -시작화면조차도 안보이게-

    > 답변 부탁드립니다..



    // 아래 소스는 Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc 입력을 막고 푸는 소스입니다

    // 또한 "시작" 버튼을 화면에 나타나지 않게 하거나 또는 Disabled 시키는

    // 루틴도 포함되어 있습니다



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure DlsableStartButton(Force: Boolean);

    begin

    if Force then

    EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil), False)

    else

    EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd',nil),0,'Button',nil), True);

    end;



    procedure hideStartbutton(visi: boolean);

    var

    Tray, Child: HWnd;

    c: array [0..127] Of Char;

    s: String;

    Begin

    // 윈도우즈 task bar 의 핸들을 찾는다

    Tray := FindWindow('Shell_TrayWnd', nil);



    // task bar의 child들 중에서 button 핸들을 찾는다

    Child := GetWindow(Tray, GW_CHILD); // task bar의 child 핸들중 하나를 리턴

    while Child <> 0 Do

    begin

    // windows의 클래스명을 구해서 Button 이면...

    if GetClassName(Child, c, SizeOf(c)) > 0 Then

    Begin

    s := StrPas(c);

    if UpperCase(s) = 'BUTTON' Then

    begin

    if visi Then

    ShowWindow(Child, 1) // 보이기

    else

    ShowWindow(Child, 0); // 감추기

    end;

    end;



    // 만약 Button 윈도우를 찾지 못하면 sibling 윈도우를 찾는다

    Child := GetWindow(Child, GW_HWNDNEXT);

    end

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    dummy : integer;

    begin

    SystemParametersInfo( SPI_SCREENSAVERRUNNING, 1, @dummy, 0);



    // "시작" 버튼 감추기

    hideStartbutton(False);



    // "시작" 버튼 Disable

    // DlsableStartButton(True);

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    var

    dummy : integer;

    begin

    SystemParametersInfo( SPI_SCREENSAVERRUNNING, 0, @dummy, 0);



    // "시작" 버튼 보이기

    hideStartbutton(True);



    // "시작" 버튼 Enable

    // DlsableStartButton(False);

    end;



    end.