如何使我的应用程序一直不失去焦点,除非退出程序?在线~~~~~~~~~~~~~~~急 做好有代码。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Registry;//这个是低级键盘钩子的索引值,Delphi中没有,必须自己定义 const WH_KEYBOARD_LL = 13;//定义一个常量好和上面哪个结构中的flags比较而得出ALT键是否按下const LLKHF_ALTDOWN = $20;type tagKBDLLHOOKSTRUCT = packed record vkCode: DWORD;//虚拟键值 scanCode: DWORD;//扫描码值(没有用过) {一些扩展标志,这个值比较麻烦,MSDN上说得也不太明白,但是 根据这个程序,这个标志值的第六位数(二进制)为1时ALT键按下为0相反。} flags: DWORD; time: DWORD;//消息时间戳 dwExtraInfo: DWORD;//和消息相关的扩展信息 end; KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT; PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } Hwnd:THandle; Tmp:integer; public { Public declarations } end;var Form1: TForm1; HookHandle: HHook; hhkLowLevelKybd: HHOOK;implementationprocedure DisableTaskMgr(bTF: Boolean);var reg: TRegistry;begin reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey('Software', True); reg.OpenKey('Microsoft', True); reg.OpenKey('Windows', True); reg.OpenKey('CurrentVersion', True); reg.OpenKey('Policies', True); reg.OpenKey('System', True); if bTF = True then begin reg.WriteString('DisableTaskMgr', '1'); end else if bTF = False then begin reg.DeleteValue('DisableTaskMgr'); end; reg.CloseKey;end;{$R *.dfm}{ 功能:低级键盘钩子的回调函数,在里面过滤消息 参数:nCode 是Hook的标志 WParam 表示消息的类型 LParam 是一个指向我们在上面定义的哪个结构KBDLLHOOKSTRUCT的指针 返回值:如果不是0的话windows就把这个消息丢掉,程序就不会再收到这个消息了。 }function GetHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM):LRESULT; stdcall;var fEatKeystroke: BOOL; p: PKBDLLHOOKSTRUCT;begin Result:= 0; fEatKeystroke:= FALSE; p:= PKBDLLHOOKSTRUCT(lParam); //nCode值为HC_ACTION时表示WParam和LParam参数包涵了按键消息 if (nCode = HC_ACTION) then begin //拦截按键消息并测试是否是Ctrl+Esc、Alt+Tab、和Alt+Esc功能键。 case wParam of WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP: fEatKeystroke:= ((p.vkCode = VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // Alt+Tab ((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or // (p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps) or //上面是屏蔽WIN按键 //((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN) and (P.vkCode = VK_Delete)) or ((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or ((p.vkCode = VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or ((p.vkCode = VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) OR (((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode = VK_Delete))) //AND (p.flags = true) ; end; end; if fEatKeystroke = True then Result:= 1; if nCode <> 0 then Result:= CallNextHookEx(0, nCode, wParam, lParam);end;procedure hookstar; //设置钩子begin //设置键盘钩子 if hhkLowLevelKybd = 0 then begin hhkLowLevelKybd:= SetWindowsHookExW(WH_KEYBOARD_LL,GetHookProc,Hinstance,0); if hhkLowLevelKybd <> 0 then MessageBox(0, '键盘钩子设置成功!', '提示', MB_OK) else MessageBox(0, '键盘钩子设置失败!', '提示', MB_OK); end else MessageBox(0, '键盘钩子已设置!', '提示', MB_OK);end;procedure hookend;//卸载键盘钩子begin if hhkLowLevelKybd <> 0 then if UnhookWindowsHookEx(hhkLowLevelKybd) <> False then begin MessageBox(0, '系统热键恢复使用!', '提示', MB_OK); hhkLowLevelKybd := 0; end else MessageBox(0, '键盘钩子卸载失败!', '提示', MB_OK) else MessageBox(0, '没有发现键盘钩子!', '提示', MB_OK);end;procedure TForm1.Button1Click(Sender: TObject);begin Hwnd:=FindWindow('Shell_TrayWnd',nil); if Hwnd<>0 then ShowWindow(Hwnd,SW_HIDE); //隐藏任务栏 hookstar; DisableTaskMgr( true );end;procedure TForm1.Button2Click(Sender: TObject);begin Hwnd:=FindWindow('Shell_TrayWnd',nil); ShowWindow(Hwnd,SW_SHOW); //恢复任务栏 hookend; DisableTaskMgr( false );end;end. 请教DevExpress控件包中cxGrid控件的相关问题! 求帮忙,哪有delphi6以前的版本下载啊 关于在ehlib中设置了下拉列表,就是picklist中add了内容 一个菜鸟问题 关于数据库驱动 Isreservedword是什么函数,他的作用是什么? 关于程序运行中API函数、注册表和文件的监视工具! 怎么样取TMemoryStream的一段 赋值给String ? 俺这样写咋不对?? 为什么靠delphi吃饭这么难!这里有湖南.常德混的留个QQ交个朋友吧!!!!!! 应各位同仁盛情邀请,开始放分 求rich实现类似SQL查询分析器的功能
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;//这个是低级键盘钩子的索引值,Delphi中没有,必须自己定义
const WH_KEYBOARD_LL = 13;
//定义一个常量好和上面哪个结构中的flags比较而得出ALT键是否按下
const LLKHF_ALTDOWN = $20;
type
tagKBDLLHOOKSTRUCT = packed record
vkCode: DWORD;//虚拟键值
scanCode: DWORD;//扫描码值(没有用过)
{一些扩展标志,这个值比较麻烦,MSDN上说得也不太明白,但是
根据这个程序,这个标志值的第六位数(二进制)为1时ALT键按下为0相反。}
flags: DWORD;
time: DWORD;//消息时间戳
dwExtraInfo: DWORD;//和消息相关的扩展信息
end;
KBDLLHOOKSTRUCT = tagKBDLLHOOKSTRUCT;
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
Hwnd:THandle; Tmp:integer;
public
{ Public declarations }
end;var
Form1: TForm1;
HookHandle: HHook;
hhkLowLevelKybd: HHOOK;
implementation
procedure DisableTaskMgr(bTF: Boolean);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_CURRENT_USER; reg.OpenKey('Software', True);
reg.OpenKey('Microsoft', True);
reg.OpenKey('Windows', True);
reg.OpenKey('CurrentVersion', True);
reg.OpenKey('Policies', True);
reg.OpenKey('System', True); if bTF = True then
begin
reg.WriteString('DisableTaskMgr', '1');
end
else if bTF = False then
begin
reg.DeleteValue('DisableTaskMgr');
end;
reg.CloseKey;
end;
{$R *.dfm}
{
功能:低级键盘钩子的回调函数,在里面过滤消息
参数:nCode 是Hook的标志
WParam 表示消息的类型
LParam 是一个指向我们在上面定义的哪个结构KBDLLHOOKSTRUCT的指针
返回值:如果不是0的话windows就把这个消息丢掉,程序就不会再收到这个消息了。
}
function GetHookProc(nCode: Integer;WParam: WPARAM;LParam: LPARAM):LRESULT; stdcall;
var
fEatKeystroke: BOOL;
p: PKBDLLHOOKSTRUCT;
begin
Result:= 0;
fEatKeystroke:= FALSE;
p:= PKBDLLHOOKSTRUCT(lParam);
//nCode值为HC_ACTION时表示WParam和LParam参数包涵了按键消息
if (nCode = HC_ACTION) then
begin
//拦截按键消息并测试是否是Ctrl+Esc、Alt+Tab、和Alt+Esc功能键。
case wParam of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
fEatKeystroke:=
((p.vkCode = VK_TAB) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or // Alt+Tab
((p.vkCode = VK_ESCAPE) and ((p.flags and LLKHF_ALTDOWN) <> 0))or //
(p.vkCode = VK_Lwin) or (p.vkCode = VK_Rwin)or (p.vkCode = VK_apps) or //上面是屏蔽WIN按键
//((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN) and (P.vkCode = VK_Delete)) or
((p.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
((p.vkCode = VK_F4) and ((p.flags and LLKHF_ALTDOWN) <> 0)) or
((p.vkCode = VK_SPACE) and ((p.flags and LLKHF_ALTDOWN) <> 0)) OR
(((p.vkCode = VK_CONTROL) and (P.vkCode = LLKHF_ALTDOWN and p.flags) and (P.vkCode = VK_Delete))) //AND (p.flags = true) ;
end;
end; if fEatKeystroke = True then
Result:= 1;
if nCode <> 0 then
Result:= CallNextHookEx(0, nCode, wParam, lParam);
end;procedure hookstar; //设置钩子
begin
//设置键盘钩子
if hhkLowLevelKybd = 0 then
begin
hhkLowLevelKybd:= SetWindowsHookExW(WH_KEYBOARD_LL,GetHookProc,Hinstance,0);
if hhkLowLevelKybd <> 0 then
MessageBox(0, '键盘钩子设置成功!', '提示', MB_OK)
else
MessageBox(0, '键盘钩子设置失败!', '提示', MB_OK);
end
else
MessageBox(0, '键盘钩子已设置!', '提示', MB_OK);
end;procedure hookend;//卸载键盘钩子
begin
if hhkLowLevelKybd <> 0 then
if UnhookWindowsHookEx(hhkLowLevelKybd) <> False then
begin
MessageBox(0, '系统热键恢复使用!', '提示', MB_OK);
hhkLowLevelKybd := 0;
end
else
MessageBox(0, '键盘钩子卸载失败!', '提示', MB_OK)
else
MessageBox(0, '没有发现键盘钩子!', '提示', MB_OK);
end;procedure TForm1.Button1Click(Sender: TObject);
begin Hwnd:=FindWindow('Shell_TrayWnd',nil);
if Hwnd<>0 then ShowWindow(Hwnd,SW_HIDE); //隐藏任务栏
hookstar;
DisableTaskMgr( true );
end;procedure TForm1.Button2Click(Sender: TObject);
begin
Hwnd:=FindWindow('Shell_TrayWnd',nil);
ShowWindow(Hwnd,SW_SHOW); //恢复任务栏
hookend;
DisableTaskMgr( false );
end;end.