如何让程序在任务栏里不显示,而且通过快捷键来激活(显示)程序!全部分数送上!今天晚上结贴

我是老姚 2003-12-06 04:45:31
RT
...全文
669 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是老姚 2003-12-08
  • 打赏
  • 举报
回复
为什么把VK_F11换成VK_CANCEL或者VK_X不行呢?
smalltalk 2003-12-07
  • 打赏
  • 举报
回复
完整例子,比你想要的功能还多。注意,hidedll.dll需要到
http://yaksa.3322.org/leadbbs/Announce/Announce.asp?BoardID=306&ID=633
下载。
至于hidedll.dll的原码,偶暂时不打算公开。

//unit1.dfm
object Form1: TForm1
Left = 354
Top = 369
Width = 628
Height = 450
Caption = 'Test Hide Process, CreateToolhelp32Snapshot() can'#39't find it.'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poDesktopCenter
OnClose = FormClose
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 24
Top = 56
Width = 569
Height = 57
Caption =
'Before you press this button, you can see process id in task man' +
'ger(not application), IF you press, It disappears.'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 24
Top = 152
Width = 569
Height = 49
Caption = 'Press here to close this window'
TabOrder = 1
OnClick = Button2Click
end
object Button3: TButton
Left = 24
Top = 224
Width = 569
Height = 57
Caption = 'Hide Window from Taskbar, Press '#39'CTRL + F10'#39' to restore back'
TabOrder = 2
OnClick = Button3Click
end
object Button4: TButton
Left = 24
Top = 304
Width = 569
Height = 57
Caption =
'hide windows from desktop and taskbar, Press "CTRL + F11" to res' +
'tore back'
TabOrder = 3
OnClick = Button4Click
end
end

//unit1.pas
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button4Click(Sender: TObject);

Protected
procedure hotykey(var msg:TMessage); message WM_HOTKEY;

private
{ Private declarations }
public
{ Public declarations }
bUserClose : boolean;

end;

var
Form1: TForm1;
idkey10 : Integer;
idkey11 : Integer;

const
HIDEDLL = 'hidedll.dll';

function HideProcessAtAll(): integer; stdcall; external HIDEDLL;
function GetVersionMessage(): PChar;stdcall; external HIDEDLL;

implementation

{$R *.dfm}

procedure TForm1.hotykey(var msg:TMessage);
begin
if (msg.LParamLo=MOD_CONTROL) then
begin
if (msg.LParamHi=VK_F10) then
begin
ShowWindow(Application.handle, SW_SHOWNORMAL);
end;
if (msg.LParamHi=VK_F11) then
begin
ShowWindow(Application.handle, SW_SHOWNORMAL);
ShowWindow(handle, SW_SHOWNORMAL);
end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
strmsg : PChar;
begin
strmsg := GetVersionMessage();
MessageBox(Application.handle, strmsg, 'Hello', MB_OK);
HideProcessAtAll();

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
bUserClose := true;
close();
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
idkey10:=GlobalAddAtom('hotkey10');
RegisterHotKey(handle,idkey10,mod_control,VK_F10);
idkey11:=GlobalAddAtom('hotkey11');
RegisterHotKey(handle,idkey11,mod_control,VK_F11);

bUserClose := false;
end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := bUserClose;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ShowWindow(Application.handle, SW_HIDE);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle,idkey10);
GlobalDeleteAtom(idkey10);
UnRegisterHotKey(handle,idkey11);
GlobalDeleteAtom(idkey11);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
ShowWindow(Application.handle, SW_HIDE);
ShowWindow(handle, SW_HIDE);
end;

end.

angelface 2003-12-07
  • 打赏
  • 举报
回复
hook吧
我是老姚 2003-12-06
  • 打赏
  • 举报
回复
能否给出一段程序呢?我不知道这些语句应该放在什么地方,还有注册快捷键怎么注册,我看有几个参数,那 几个参数怎么设置呢?
zyq_123 2003-12-06
  • 打赏
  • 举报
回复
显示的时候这样:
ShowWindow(Application.Handle,SW_NORMAL);
Form1.Show;
zyq_123 2003-12-06
  • 打赏
  • 举报
回复
用RegisterHotKey注册的快捷键,不论你的程序是否激活,是否隐藏,都会收到相应的WM_HOTKEY消息,处理这个消息就行了。
我是老姚 2003-12-06
  • 打赏
  • 举报
回复
那如何实现程序隐藏后按下快捷键显示窗体呢?
zyq_123 2003-12-06
  • 打赏
  • 举报
回复
隐藏主窗体的代码:
Form1.Hide;
就可以了。
隐藏任务栏里的图标的方法:
ShowWindow(Application.Handle,SW_HIDE);
就可以了。

但是你程序全部隐藏后,如果连任务栏都没有显示的话,那么你的快捷键就必须到系统中注册,否则程序隐藏后就不能接受到快捷键消息了。这就要使用下面两个API函数:
RegisterHotKey :程序运行时调用注册快捷键
UnregisterHotKey :程序结束时取消注册快捷键

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧