名前 題名 ▼ 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. > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link