帮忙看看,为何屏蔽不了Alt+F4组合键?(100分)

  • 主题发起人 主题发起人 舞雪
  • 开始时间 开始时间

舞雪

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是delphi5,win98se.我想把系统的alt+f4屏蔽掉。也就是,只要我的程序在运行,用
户按下alt+f4之后,并不能关闭我的程序,当然也不能关闭其它的任何窗口。一直到我的程
序退出alt+f4才可以生效。可我向系统注册alt+f4键时,RegisterHotKey函数返回值为true,
但是按下alt+f4后,我的程序还是关闭了(更不用说关其它的程序了) [:(]
程序是这样的,假设我要求当按alt+f4的时候出现一个消息对话框。
; private
; HotKeyId: Integer;
; procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
...
procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
; if (Msg.LparamLo = Mod_Alt) And (Msg.LParamHi = VK_F4) then
; begin
; ; showmessage('OK');
; end;
end; ;
procedure TForm1.FormCreate(Sender: TObject);
begin
; HotKeyId := GlobalAddAtom('HotKey') - $C000;
; if RegisterHotKey(Handle, hotkeyid, Mod_Alt, VK_F4) then
; ; showmessage('reg suc'); ;
end;
运行时一开始会出现一个 'reg suc' 的消息框,但按下alt+f4的时候就不会出现
'ok'的消息框了!为什么会这样???????[?]
 
屏蔽Alt+F4 :

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if (ssAlt in shift)and(key=115) then key:=0;
end;
 
嘿嘿,出怪事另了,我这里完全可以呀!
WinSE+Delphi5+pack2,呵呵。
而且效果很不错
 
使用热键程序可以系统的所有按键!
就是说在任何窗体上按Alt+F4,都可以被截获,而使用FormKeyDown仅仅屏蔽自己的窗体。
 
to 卷起千堆雪tyn:
; 这样不行,这样只是不能关闭自己的程序,我要的是,屏蔽全局的alt+f4,不能关闭其它
任何窗口!
; ;如果知道如何使自己的窗口永远处于受焦状态也可以!!
 
to yzhshi
; 是使用win32里的hotkey控件吗?那好像只对自己的程序有用啊!
; 要不,我把我的源码给你,你帮我加上屏蔽好吗?呵呵~~~[:D]
 
老兄!我就是使用你的程序呀!!!!!!!
完全可以,你上面贴出的程序!
 
这个程序是一个仿windows格式化的程序,只是为了跟一些好友开个玩笑![:)]
unit Unit1;

interface

uses
; Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
; ComCtrls, StdCtrls, ExtCtrls;

type
; TForm1 = class(TForm)
; ; Label1: TLabel;
; ; ComboBox1: TComboBox;
; ; RadioGroup1: TRadioGroup;
; ; GroupBox1: TGroupBox;
; ; Label2: TLabel;
; ; Edit1: TEdit;
; ; CheckBox1: TCheckBox;
; ; CheckBox2: TCheckBox;
; ; CheckBox3: TCheckBox;
; ; Button1: TButton;
; ; Button2: TButton;
; ; ProgressBar1: TProgressBar;
; ; procedure FormCreate(Sender: TObject);
; ; procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
; ; procedure FormClose(Sender: TObject; var Action: TCloseAction);
; private
; ; { Private declarations }
; ; HotKeyId: Integer;
; ; procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;

; public
; ; { Public declarations }
; end;

var
; Form1: TForm1;

implementation

{$R *.DFM}
//处理消息过程
procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
; if (Msg.LparamLo = Mod_Alt) And (Msg.LParamHi = VK_F4) then
; begin
; ; showmessage('OK');
; end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
; total:real;
; temp_title:string;
; title:array [0..127] of char;
; found: HWND;
; reghotkey:boolean;
begin
//注册alt+f4热键
; HotKeyId := GlobalAddAtom('HotKey') - $C000;
; if RegisterHotKey(Handle, hotkeyid, Mod_Alt, VK_F4) then
; ; showmessage('reg suc'); ;
//防止多次运行
; StrPCopy(title,Application.Title);
; temp_title:=Application.Title;
; Application.Title:='temp';
; found:=findwindow(nil,title);
; Application.Title:=temp_title;
; if found<>0 then begin
; ; ShowWindow(Found, SW_RESTORE);
; ; Application.Terminate
; end;
//屏蔽其它系统热键和开始菜单
; SystemParametersInfo(Spi_screensaverrunning,1,nil,0);
; SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
; EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),
; ; ; ; ; ; ; ;0,'Button',nil),false);
; RadioGroup1.ItemIndex:=0;
//取C盘容量,并在combobox里显示出来
; total:=DiskSize(3)/1024/1024;
; ComboBox1.Text:=format('%.1f',[total])+' Mb';
; ComboBox1.Items.Add(ComboBox1.Text);
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
{ ;if RadioGroup1.ItemIndex<>1 then
; CanClose:=false; ;}
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//恢复被屏蔽的热键
; SystemParametersInfo(Spi_screensaverrunning,0,nil,0);
; EnableWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil),
; ; ; ; ; ; ; ;0,'Button',nil),true);
; unregisterhotkey(handle,hotkeyid);
; DeleteAtom(HotKeyid);
end;

end.
 
你的程序确实不行,不过你最开始贴的那段程序肯定没问题,我帮你好好对照一下。
 
哈哈,问题出来了,是
SystemParametersInfo(Spi_screensaverrunning,1,nil,0);
和注册热键
RegisterHotKey(Handle, hotkeyid, Mod_Alt, VK_F4)
两个冲突。

不好办呀,除非你使用全屏的方式将桌面抓图,然后显示成假的作为桌面,自己的程序再
好好的“格式化”硬盘
 
昏掉~~~真的是这样啊!!谢谢啦!yzhshi
 
接受答案了.
 

Similar threads

后退
顶部