就是在系统中按什么键都失效! 求冻结代码和解除冻结的代码 感激万分!!!!!!!!!!
解决方案 »
- DELPHI中REPORT MACHINE 报表闪一下就没了是什么原因?
- Delphi 调用API做的完成端口出现 10055错误,请高手指点~~
- 如何将网页上的表格复制到一个StringGrid里去?
- delphi动态数组在JAVA中怎么表示
- java下socket和delphi socket程序连接的问题
- 加密问题
- 1stclass3000ProVcl6控件刚下的,但是没注册抹,请问那为朋友有??
- 请问有没有输入矩阵的控件?
- 有关于CLIENTDATASET的排序。
- 救人一命!快点!高手快来!
- 高分求一函数,分不够可再加
- 有没有朋友用过intraweb中的IWDynamicchart这个控件,或者有没有相关的文档!
GetDesktopWindow 得到桌面窗口的句柄
SetWindowsHookEx 设置挂钩
在钩子函数中响应键盘消息
// Import BlockInput function form user32.dll: // BlockInput Funktion von user32.dll importieren: function BlockInput (fBlockInput : boolean) : DWord; stdcall; external 'user32.DLL'; {block input/ blockieren} procedure TForm1.Button1Click(Sender: TObject);
begin
BlockInput(true);
end; {unblock input / Blockierung aufheben} procedure TForm1.Button2Click(Sender: TObject);
begin
BlockInput(false);
end; Note: Requires Windows 98/2000 or later. You can unblock input by pressing CTRL+ALT+DEL
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
BtnSetHook: TButton;
BtnClearHook: TButton;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure BtnSetHookClick(Sender: TObject);
procedure BtnClearHookClick(Sender: TObject);
private
//FHookSet: Boolean;
//procedure EnableButtons;
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function LowLevelKeyboardProc(nCode:integer;WParam:WPARAM;LParam:LPARAM):LRESULT;stdcall;
type
KBDLLHOOKSTRUCT=record
vkCode:DWORD;
scanCode:DWORD;
flags:DWORD;
time:DWord;
dwExtraInfo:dword;
end;
var
fFlag:BOOL;
p:^KBDLLHOOKSTRUCT;
begin
result:=0;
fFlag := false;
p:=Pointer(LPARAM);
if (ncode=HC_ACTION) then
begin
case wparam of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
fFlag :=(p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps);
end;
end;
if fFlag = true then Result:=1;
if ncode <> 0 then Result := CallNextHookEX(0,ncode,wparam,lparam);
end;procedure TForm1.Button3Click(Sender: TObject);
const
WH_KEYBOARD_LL=13;
begin
setwindowshookexw(WH_KEYBOARD_LL,LowlevelKeyboardproc,hinstance,0);
end;procedure TForm1.BtnSetHookClick(Sender: TObject);
var
wndHandle : THandle;
wndClass : array[0..50] of Char;
s:integer;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
s:= SW_show;
ShowWindow(wndHandle, s); // 显示
end;procedure TForm1.BtnClearHookClick(Sender: TObject);
var
wndHandle : THandle;
wndClass : array[0..50] of Char;
s:integer;
begin
StrPCopy(@wndClass[0], 'Shell_TrayWnd');
wndHandle := FindWindow(@wndClass[0], nil);
s:= SW_HIDE;
ShowWindow(wndHandle, s); //隐藏
end;
end.
在keypress事件中写:
if key=#8 then
key:=#0
else key:=#0;然后在KEYDOWN事件中写:
if key=8 then
key:=0
else key:=0;KEY的值可任意写某个键盘键的编码。给分吧。