喫茶XRAYトップページ

[スレッド全体
]

[11067] ローカルキーフック返信 削除
2017/4/11 (火) 09:26:55 Mr.XRAY
[ESCキーの無効について]
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201704/17040001.txt

動作仕様的にはよく理解できない仕様ですが,
ローカルなキーフックを使用して [ESC] を無効にする例です.

implementation

uses Unit2;

{$R *.DFM}

var
  KeyHookHandle : HHOOK=0;

//-----------------------------------------------------------------------------
//  キーフックのコールバック関数
//  wPar  : 仮想キーコード
//  lPar  : キーの状態(MSDNのKeyboardProc callbackiに説明あり)
//-----------------------------------------------------------------------------
function KeyHookProc(nCode:integer; wPar: WPARAM; lPar: LPARAM): LRESULT; stdcall;
begin
  Result := 0;

  if nCode < 0 then begin
    Result := CallNextHookEx(KeyHookHandle, nCode, wPar, lPar);
    exit;
  end;

  if nCode = HC_ACTION then begin
    if (wPar = VK_ESCAPE) then begin
      //本来動作を無効にする
      Result := 1;
    end;
  end;

  if Result = 0 then begin
    Result := CallNextHookEx(KeyHookHandle, nCode, wPar, lPar);
  end;
end;

//=============================================================================
//  別のフォームをモーダル表示
//=============================================================================
procedure TForm1.Button5Click(Sender: TObject);
var
  AForm : TForm2;
begin
  AForm := TForm2.Create(Self);
  try
    AForm.Left := 500;
    AForm.Top  := 300;

    AForm.ShowModal;
  finally
    FreeAndNil(AForm);
  end;
end;

//=============================================================================
//  キーフック開始
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
  if KeyHookHandle = 0 then begin
    KeyHookHandle := SetWindowsHookEx(WH_KEYBOARD,
                                 @KeyHookProc,
                                 0,
                                 GetCurrentThreadId);
  end;
end;

//=============================================================================
//  キーフックを解
//=============================================================================
procedure TForm1.Button2Click(Sender: TObject);
begin
  if KeyHookHandle <> 0 then begin
    UnhookWindowsHookEx(KeyHookHandle);
    KeyHookHandle := 0;
  end;
end;

end.



[11106] 特定のキーの無効化返信 削除
2017/4/14 (金) 18:01:18 Mr.XRAY
> [ESCキーの無効について]
> http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+201704/17040001.txt


題材として面白そうなので記事にしておきました.

[256] [04_ローカルキーフックによる特定のキー操作の無効化]
http://mrxray.on.coocan.jp/Delphi/plSamples/256_LocalHookKeyMouse.htm#04

からページの最後までが該当します.
ちなみに,特定のキーの無効化です.
特定の「文字」の無効化ではありません.


[11107] Re:特定のキーの無効化返信 削除
2017/4/14 (金) 23:04:49 Mr.XRAY
> ちなみに,特定のキーの無効化です.

キーコードいうのは,キーボードの各キーに割り当てられいる固有の値です.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82