关于超想
本站导航
邮件列表
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 系统相关 ->详细
相关内容  
 
 
在Delphi程序中应用IE浏览器控件
 
【新品推荐】

  详细内容
 

给CDROM安个软开关
作者: 评价: 上站日期: 2001-09-05
内容说明:
来源:


---- 现在,CDROM已成为个人PC机的标准配置了。平常使用CDROM软件盘片较多的朋友,经常开关CDROM,开关次数一多,容易使开关磨损,造成接触不良。根据这种情况,最近我用Delphi编写了一个软件,功能就是开关CDROM,下面我给大家介绍:此程序一运行,就会以小图标驻留在系统的Tray小图标区。当鼠标经过小图标时,程序提示这是一个“CDROM软开关”程序,在小图标上单击鼠标右键,弹出菜单,点击Eject即可打开CDROM门,点击Close关闭CDROM门,点击Exit则退出应用程序。 

---- 要实现此程序,有四个技术要点。 

---- 1、如何控制CDROM开关? 

---- 这可以利用MCI(Media Control Interface)函数中的mciSendString()来实现,MCI可以简单地看作是一组用来控制多媒体设备的函数,这些函数包含在动态连接库MMSYSTEM.DLL中,该库文件位于Windows3.x、Windows 95/98或Windows NT的SYSTEM子目录中。 

打开CDROM门: 
mciSendString('Set cdaudio door 
open wait', nil, 0, handle); 
关闭CDROM门: 
mciSendString('Set cdaudio door 
closed wait', nil, 0, handle); 

---- 为了使用这个函数,记住在单元的USES子句中,一定要包含MMSystem单元。 
---- 2、如何以小图标形式显示在系统的Tray小图标区? 

---- Windows 95/98是基于事件驱动机制的操作系统。任何一个控件都是通过发消息或对系统消息的处理来实现功能的。系统的Tray小图标区实际上也是一个标准控件。对它的控制和操纵,与其他的标准控件一样,也是通过发送消息和处理消息进行的。应用程序通过系统功能调用Shell_NotifyIcon向Tray小图标区发送消息,即可达到我们的目的。 

Shell_NotifyIcon函数包含在单元ShellApi中,说明如下: 
function Shell_NotifyIcon(dwMessage: DWORD; 
lpData: PNotifyIconData): BOOL; stdcall; 
其中: 
dwMessage:要发给Tray小图标区的消息, 
可以取以下三个值: 
NIM_ADD 在Tray小图标区上增加一个图标 
NIM_MODIFY 修改一个Tray小图标区的图标 
   NIM_DELETE 删除Tray小图标区的一个图标 
lpData:指向TNotifyIconDataA结构的指针, 
此结构是要增加的图标的信息。 
PNotifyIconData = ^TNotifyIconDataA 
TNotifyIconDataA = record 
   cbSize : DWORD; 
   Wnd : HWND; 
   uID : UINT; 
   uFlags : UINT; 
   uCallbackMessage : UINT; 
   hIcon : HICON; 
   szTip : array [0..63] of AnsiChar; 
end; 

---- 各字段的含义如下所述: 
cbSize:记录TNotifyIconDataA的大小, 
设置为SizeOf( TNotifyIconDataA); 
Wnd:接收Tray小图标区鼠标事件的窗口 
的句柄,例如:MainForm.Handle; 
uID:图标的ID(Tray小图标区鼠标 
事件的wPara参数的值); 
uFlags:此条消息的有效范围(低三位有效) 
NIF_MESSAGE 0x1 // uCallbackMessage参数有效 
NIF_ICON 0x2 // hIcon is valid参数有效 
NIF_TIP 0x4 // szTip is valid参数有效 
uCallbackMessage:系统回送消息的ID; 
hIcon:显示在Tray小图标区上的图标的句柄; 
szTip:鼠标移动到图标上时系统显示的提示信息。 

增加小图标程序如下: 
procedure TMainForm.InstallIcon; 
var IconData: TNotifyIconData; 
begin 
CdRomIcon := TIcon.Create; 
CdRomIcon.LoadFromFile( 'cddrive.ico' ); 
IconData.cbSize := SizeOf( IconData ); 
IconData.Wnd := Handle; 
IconData.uID := 1; 
IconData.uFlags := NIF_ICON 
or NIF_MESSAGE or NIF_TIP; 
IconData.uCallBackMessage := WM_USER+1; 
IconData.hIcon := CdRomIcon.Handle; 
IconData.szTip := 'CDROM软开关'; 
Shell_NotifyIcon( NIM_ADD, @IconData ); 
end; 

---- 记住,在单元的USES子句中,别忘了要加上ShellApi单元。 
---- 3、如何响应Tray小图标区上图标的鼠标事件? 

---- 当用户在你的图标上移动、点击时,Tray小图标区会向应用程序发送如下的消息: 

  messageID = uCallbackMessage 
  wParam = uID 
  lParam = mouse event (如:WM_LBUTTONDOWN) 

---- 我们只需在主窗口的定义中,声明一个过程,来响应这个消息,在它的实现部分就可以对消息进行处理了。 消息处理函数声明: 
procedure IconOnClick(var message: 
TMessage); message WM_USER+1; 
实现过程: 
procedure TMainForm.IconOnClick 
( var message: Tmessage); 
var p : TPoint; 
begin 
if (message.lParam = WM_LBUTTONDOWN) then 
ShowWindow(Handle, SW_SHOW ); 
if (message.lParam = WM_RBUTTONDOWN) then 
begin 
GetCursorPos(p); 
pop1.Popup( p.x ,p.y ); 
end; 
end; 
---- 其中,pop1为在主窗口中定义的弹出式菜单。 
---- 4、如何控制系统任务栏上不显示应用程序? 

---- 通常的Windows程序在启动后,会在系统任务栏上显示一个小窗口,我们既然已有了小图标,就没必要再显示一个小窗口了。 

---- 这可以通过下列函数实现 

SetWindowLong(Application.Handle, 
GWL_EXSTYLE,WS_EX_TOOLWINDOW); 
ShowWindow(Handle, SW_HIDE); 


---- 把上述这些技术要点结合起来,就可以达到我们预想的目的了。本程序在中文Windows98、Delphi4.0下通过。运行效果良好。 

 

 
你所在的位置 -> 主页 -> 超想软件 -> 编程资料 -> delphi -> 开发技巧 -> 系统相关 ->详细
  首页 | 本站产品 | Delphi资料 | 免费资源 | 程序人生 | 软件工程 | 网站设计 | 推荐网站
声明:本站内容除注明原创以外均从网上摘抄,如有侵权请指明。
  如果您对我们的网站有什么意见或者建议,请与我们联系
powered by 建站易上手- V2.0