作非常规程序菜单掌握delphi高级秘籍
2008-04-09 04:18:38来源:互联网 阅读 ()
预备知识:
1:向系统托盘中加入图标控制菜单:
向系统托盘中加入图标控制菜单须用到函数Shell_NotifyIconA,而这个函数又有两个参数:'TnotifyIconDataA'结构的参数和一个消息参数即:Shell_NotifyIconA(dwMessage:DWORD;lpData:PNotifyIconDataA),第一个参数dwMessage可以是以下值:NIM_ADD:增加一个图标 ;NIM_MODIFY:修改一个已有的图标 ;NIM_DELETE:删除一个已有的图标 ;
第二个参数的TnotifyIconDataA结构如下:
TnotifyIconDataA=record
cbSize:DWORD; {表示该结构的长度}
Wnd:HWND; {是调用Shell_NotifyIconA函数的窗口的句柄即Handle}
iID:UINT; {是在下面的uCallbackMessage参数指定的消息中使用的一个自定义数值}
uFlags:UINT; {决定该结构中的有效部分,如有NIF_MESSAGE则 uCallbackMessage参数有 效 ;若有NIF_ICON 则hIcon有效;有 NIF_TIP则 szTip参数有效,当然你可 以让这三个参数都有效只须要在这个参数中写成NIF_MESSAGE NIF_ICON NIF_TIP即可}
uCallbackMessage:UNIT; {当添加的图标上有鼠标事件如右击等等时系统向Wnd参数所指定的窗口发 送消息,这个消息的Msg参数是uCallbackMessage,这个消息的wParam参数是 uID,这个消息的lParam参数是鼠标事件的 Msg值}
Icon:HICON; {是出现在系统托盘中的图标的句柄即handle}
szTip:array[0..63] of AnsiChar; {即delphi是常用的hint即当鼠标停留在托盘图标上时的提示,例如你可用 ‘这是我的第一个托盘图标菜单’}
end;
2:在状态栏上隐藏程序;
在一般情况下我们在打开一个窗口或是一个程序时都会在任务条上出现按钮如在IE中每打开一个新的窗口 在任务条上就有一个新的按钮,在这里我们的程序是用在系统托盘中图标控制菜单,程序在后台运行,即 希望我们的程序不在任务条上出现按钮;这个可用函数SetWindowLong来实现,在我们这个程序中的代码如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Width:=1;
form1.Height:=1; {让窗口在运行时表现为一个像素长宽的点}
form1.Left:=screen.Width-1; {让窗口在运行时在屏幕的右上角而不影响我们的桌面的操作}
form1.top:=1;
form1.Brush.Style:=bsclear; {让窗口在运行时在表现为透明}
setwindowlong(application.handle,gwl_exstyle,ws_ex_toolwindow); {让窗口在运行时不在任务栏 上出现按钮}
end;
3:在程序中控制光驱的打开和关闭;
当我们不再用手动的打开关闭光驱门时,我们的光驱寿命也就会相应延长,我们在程序中可用函数
function mciSendString(lpstrCommand,lpstrReturnString:
PChar;uReturnLength :UINT;hWndCallback:HWND):MCIERROR;stdcall;
其中lpstrComman参数表示一个MCI命令行,如:’set cdaudio door open wait‘,‘set cdaudio door closed wait’等等你可以delphi中的mmSystem.pas中查看详细说明;而参数'lpstrReturnString'表示接收返回信息的缓冲区指针,如果不需要返回值这里可写为'nil',参数'uReturnLength'表示接收返回信息的缓冲区的长度,若上面为'nil'这里为'0','hWndCallback'参数表示回调窗口的句柄,在这里可写为'handle';
在我们的程序中原代码如下:
打开光驱门:
procedure TForm1.N1Click(Sender: TObject);
begin
mcisendstring('set cdaudio door open wait',nil,0,handle);
end;
关闭关驱门:
procedure TForm1.N2Click(Sender: TObject);
begin
mcisendstring('set cdaudio door closed wait',nil,0,handle);
end;
4:在程序中控制重启电脑和关闭计算机;退出WINDOWS可用的函数有ExitWindows()和ExitWindowsEx()在本程序中的代码如下:
重启:
procedure TForm1.N8Click(Sender: TObject);
begin
showmessage('请先关闭并保存正在运行的程序');
exitwindowsex(ewx_force or ewx_reboot,0);
end;
关闭计算机:
procedure TForm1.N9Click(Sender: TObject);
begin
showmessage('请先关闭并保存正在运行的程序');
exitwindowsex(ewx_shutdown or ewx_poweroff,0);
end;
5:实现光驱的自动播放和更改光驱图标都需要更改注册表;要实现注册表的读写我们用以下代码:
例如有
var reg:tregistry;
reg:=tregistry.Create;
reg.RootKey:=hkey_local_machine; {这里是注册表的主键}
reg.OpenKey('software\microsoft\windows\currentversion\explorer\shell icons',true); {这里是注册表的子键}
reg.WriteString('11',mn); {这里对注册表进行写操作}
{关于注册表的相关知识大家可参考‘电脑爱好者’出版的<<注册表完全精通>>一书}
还有一点应特别注意的是在更改光驱图标时不仅要在注册表中更改,还要把'c:\windows\shelliconcache'文件删除,这相关的关于文件操作的知识以及后面一些有关程序中加入声音等等大家一定都会,这里也就不再多说,如不明白可给我写信:go_000000@163.com,或phray@263.net;}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash