如何使我的程序在windows的托盘中,而不在任务栏中??......(1...,2...,3...)(100分)

  • 主题发起人 主题发起人 joky1981
  • 开始时间 开始时间
J

joky1981

Unregistered / Unconfirmed
GUEST, unregistred user!
1.如何使我的程序在windows的托盘中,而不在任务栏中??......
2.如果程序已在运行,在点击该程序图标时,不出现新的任务,而是将已运行的程序的窗口弹出,这种情况如何实现?
3.win2000系统中关机(通过API函数)怎么实现??
 
前两个:
const
wm_trayicon=wm_user+200;
public:
procedure wmsyscommand(var msg:tmessage);message wm_syscommand;
procedure wmtrayicon(var msg:tmessage);message wm_trayicon;
//最小化为系统托盘图标
procedure tform1.wmsyscommand(var msg:tmessage);
var
myicon:tNotifyIconData;
begin
if msg.WParam=SC_MINIMIZE then
begin
with myicon do
begin
cbSize :=sizeof(tnotifyicondata);//纪录需要的内存大小
Wnd :=form1.handle; //最小化窗体的句柄
uID :=0; //托盘图标序号
uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP;//
uCallbackMessage:=wm_trayicon;
hIcon:=form1.Icon.Handle;
szTip :='系统托盘图标编程示例';
end;
shell_notifyicon(NIM_ADD,@myicon);
form1.Visible :=false;
end
else
begin
//如果是其它的SystemCommand 消息则调用系统缺省处理函数处理之。
DefWindowProc(Form1.Handle,msg.Msg,Msg.WParam,Msg.LParam);
end;
end;
//最小化为图标的回调
procedure tform1.wmtrayicon(var msg:tmessage);
var
myicon:tnotifyicondata;
begin
if msg.LParam=wm_lbuttondown then
begin
with myicon do
begin
cbSize :=sizeof(tnotifyicondata);
Wnd:=form1.Handle;
uID :=0;
uFlags :=NIF_ICON OR NIF_MESSAGE OR NIF_TIP;
uCallbackMessage :=wm_trayicon;
hIcon :=form1.Icon.Handle;
szTip :='系统托盘图标编程示例';
end;
shell_notifyicon(NIM_delete,@myicon);
form1.visible :=true;
showmessage('鼠标左键单击返回');
end;
end;
第三个:查一下sdk topic就可以了
 
关闭win2000系统:
case AFlag of
0: flagvalue:= EWX_FORCEIFHUNG or EWX_LOGOFF;
1: flagvalue:= EWX_FORCEIFHUNG or EWX_SHUTDOWN or EWX_POWEROFF;
2: flagvalue:= EWX_FORCEIFHUNG or EWX_REBOOT;
end;
ExitWindowsEx(flagvalue, 0);

程序在windows的托盘:
最简单的使用控件,TCoolTrayIcon,在网上下一个。。。

不出现新的任务,而是将已运行的程序的窗口弹出:
program ProjectCommunity;

uses
Forms,
windows,

{$R *.RES}
var
hw: Hwnd;
lTime :TDateTime;
begin
Application.Initialize;
Application.Title:= 'XXX系统';
Application.HelpFile := '';
hw:=createmutex(nil,false,'XXX系统');
if Getlasterror<>error_already_exists then
begin
SplashForm:=TSplashForm.Create(Application);
SplashForm.show;
SplashForm.Update;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
SplashForm.Free;
end
else
Application.MessageBox('本程序已经运行,'Open Error', MB_OK);
ReleaseMutex(hw);
end.

建议你多查一查历史贴子。都有讨论过。
培养这个好习惯。
 
用ABC控件直接有。
 
查一查以前的贴子,都有过回复的。
 
谢谢大家的帮忙,第一次进入论坛就有这么大的收获!!!!!!!
以后还望大家多赐教!!!
 
后退
顶部