知道一程序窗口的句柄,如果隐藏其在任务栏上的图标。 如题: 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 var st:integer; st:= GetWindowLong(hd ,GWL_EXSTYLE); //hd为windows的handle st:=st or WS_EX_TOOLWINDOW; SetWindowLong(hd,GWL_EXSTYLE,st); ShowWindow(hd,SW_HIDE); 程序没有关闭,只是被隐藏了,你还是可以通过程序用ShowWindow(hd,SW_SHOW);将它显示出来-----很多hack程序都是通过这种方法隐藏的--------------- 这个类似于托盘的,把窗体置为visible:=false然后点击托盘时置为true,你可以在网上找一下关于托盘程序实现的,有很多。主要是调用了api。 给你粘一段代码: 实战演练: 一.新建一个应用程序:File->New Applicaton 在Interface部分定义一个消息常量:const WM_NID=WM_USER+1000; 系统规定从WM_USER开始为用户自定义消息。 二.定义一个全局变量: NotifyIcon:TNotifyIconData 三.双击主窗体,进入FormCreate的代码区域:TForm1.FormCreate(Sender:TObject);Begin//NotifyIcon为全局变量,在程序的开头已经定义了 with NotifyIcon dobegincbSize:=SizeOf(TNotifyIconData);Wnd:=Handle; //指向当前窗体Form1的句柄uID:=1;uFlags:=NIM_ICON or NIM_MESSAGE or NIM_TIP;uCallBackMessage:=WM_NID;hIcon:=Application.Icon.Handle;szTip:='dd';end;.//把设置好的变量NotifyIcon加入到系统中以便处理Shell_NotifyIcon(NIM_ADD,@NotifyIcon);End; 四.接下来就是定义一个消息处理函数:系统给窗体发来了一个消息,就由下面这个函数来处理。每个消息处理函数都是处理某一类消息的,大家仔细地看看下面函数体的定义和一般的函数定义有什么不一样:消息处理函数要在后面加上消息的名称,这样当系统发来WM_NID消息时,就是自动触发WMNID消息处理函数。procedure WMNID(var msg:TMessage);message WM_NID;begincase msg.LParam ofWM_LBUTTONUp; Form1.Visible:=not Form1.Visible;WM_RBUTTONUP: ShowMessage(‘您点击的是右键’);End;End; TForm1.FormDestroy(Sender:TObject);BeginShell_NotifyIcon(NIM_DELETE,@NotifyIcon);End; 这个简单,直须注册个热键控制程序的显示与否,首先在工程文件中这样写 Application.Initialize; Application.ShowMainForm:=False;//不显示主窗体 Application.Run;在主窗体中注册热键,如下一个模版。。unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } HKeyID:ATOM;//热键标识 procedure HotKeyMSG(var Msg:TMessage);message WM_HOTKEY;//捕捉热键消息 end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);begin HKeyID:=GlobalAddAtom(PChar(Application.ExeName));//获得唯一热键标识 RegisterHotKey(Handle,HKeyID,MOD_ALT or MOD_CONTROL,Ord('Y'));//注册热键标识 //Ctrl+Alt+Yend;procedure TForm1.HotKeyMSG(var Msg: TMessage);begin if Msg.WParam = HKeyID then begin if Self.Showing then//如果正显示则隐藏 Hide else Show; end;end;procedure TForm1.FormDestroy(Sender: TObject);begin //清理工作 UnregisterHotKey(Handle,HKeyID); GlobalDeleteAtom(HKeyID);end;end. 关于QReport打印的问题 已知外部程序一控件句柄,可否将其隐藏? 如何填写listview的相应的列?急 调查 80年出生的兄弟姐妹们 今年过的好吗? 在问一个数据库方面问题。 如何刷新数据?? 中国移动-摩托罗拉杯无线JAVA应用大赛获奖作品名单 将照相机图片90度立起来导出 DELPHI里面,从begin到相就的end,用什么快捷键?? 大讨论:程序员分多少种??欢迎各位程序员和各位朋友讨论! 我做好的ACTIVEFORM控件为啥在客户端没有自动更新下载新的版本 哪有神龙卡开发包.
st:integer;
st:= GetWindowLong(hd ,GWL_EXSTYLE); //hd为windows的handle
st:=st or WS_EX_TOOLWINDOW;
SetWindowLong(hd,GWL_EXSTYLE,st);
ShowWindow(hd,SW_HIDE);
ShowWindow(hd,SW_SHOW);将它显示出来
-----很多hack程序都是通过这种方法隐藏的---------------
然后点击托盘时置为true,你可以在网上找一下关于托盘程序实现的,有很多。
主要是调用了api。
实战演练: 一.新建一个应用程序:File->New Applicaton 在Interface部分定义一个消息常量:const WM_NID=WM_USER+1000; 系统规定从WM_USER开始为用户自定义消息。 二.定义一个全局变量: NotifyIcon:TNotifyIconData 三.双击主窗体,进入FormCreate的代码区域:TForm1.FormCreate(Sender:TObject);Begin//NotifyIcon为全局变量,在程序的开头已经定义了
with NotifyIcon dobegincbSize:=SizeOf(TNotifyIconData);Wnd:=Handle; //指向当前窗体Form1的句柄uID:=1;uFlags:=NIM_ICON or NIM_MESSAGE or NIM_TIP;uCallBackMessage:=WM_NID;hIcon:=Application.Icon.Handle;szTip:='dd';end;.//把设置好的变量NotifyIcon加入到系统中以便处理Shell_NotifyIcon(NIM_ADD,@NotifyIcon);End;
四.接下来就是定义一个消息处理函数:系统给窗体发来了一个消息,就由下面这个函数来处理。每个消息处理函数都是处理某一类消息的,大家仔细地看看下面函数体的定义和一般的函数定义有什么不一样:消息处理函数要在后面加上消息的名称,这样当系统发来WM_NID消息时,就是自动触发WMNID消息处理函数。procedure WMNID(var msg:TMessage);message WM_NID;begincase msg.LParam ofWM_LBUTTONUp; Form1.Visible:=not Form1.Visible;WM_RBUTTONUP: ShowMessage(‘您点击的是右键’);End;End;
TForm1.FormDestroy(Sender:TObject);BeginShell_NotifyIcon(NIM_DELETE,@NotifyIcon);End;
Application.Initialize;
Application.ShowMainForm:=False;//不显示主窗体
Application.Run;
在主窗体中注册热键,如下一个模版。。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
HKeyID:ATOM;//热键标识
procedure HotKeyMSG(var Msg:TMessage);message WM_HOTKEY;//捕捉热键消息
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
HKeyID:=GlobalAddAtom(PChar(Application.ExeName));//获得唯一热键标识
RegisterHotKey(Handle,HKeyID,MOD_ALT or MOD_CONTROL,Ord('Y'));//注册热键标识
//Ctrl+Alt+Y
end;procedure TForm1.HotKeyMSG(var Msg: TMessage);
begin
if Msg.WParam = HKeyID then
begin
if Self.Showing then//如果正显示则隐藏
Hide
else
Show;
end;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
//清理工作
UnregisterHotKey(Handle,HKeyID);
GlobalDeleteAtom(HKeyID);
end;end.