?? 120802_05.htm
字號:
<html>
<head>
<link REL="stylesheet" HREF="/style.css" TYPE="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>計算機世界日報:
給CDROM安個軟開關
</title>
<!--***********-->
</head>
<body bgcolor="#FFFFFF" >
<p><br>
<font color="#b904e8"><b><em><a href="class.htm">返回</a></em></b></font>
<center>
<font color="#0000c0"><h2>
給CDROM安個軟開關
</h2></font>
<h3>
湖北襄樊神龍汽車公司組織系統部
<br><a href="mailto:liyunhua@public.xf.hb.cn">黎云華</a>
</h3>
</center>
<p><font color="#ffffff">----</font>
現在,CDROM已成為個人PC機的標準配置了。平常使用CDROM軟件盤片較多的朋友,經常開關CDROM,開關次數一多,容易使開關磨損,造成接觸不良。根據這種情況,最近我用Delphi編寫了一個軟件,功能就是開關CDROM,下面我給大家介紹:此程序一運行,就會以小圖標駐留在系統的Tray小圖標區。當鼠標經過小圖標時,程序提示這是一個“CDROM軟開關”程序,在小圖標上單擊鼠標右鍵,彈出菜單,點擊Eject即可打開CDROM門,點擊Close關閉CDROM門,點擊Exit則退出應用程序。
<p><font color="#ffffff">----</font>
要實現此程序,有四個技術要點。
<p><font color="#ffffff">----</font>
1、如何控制CDROM開關?
<p><font color="#ffffff">----</font>
這可以利用MCI(Media Control Interface)函數中的mciSendString()來實現,MCI可以簡單地看作是一組用來控制多媒體設備的函數,這些函數包含在動態連接庫MMSYSTEM.DLL中,該庫文件位于Windows3.x、Windows 95/98或Windows NT的SYSTEM子目錄中。
<pre>
打開CDROM門:
mciSendString('Set cdaudio door
open wait', nil, 0, handle);
關閉CDROM門:
mciSendString('Set cdaudio door
closed wait', nil, 0, handle);
</pre>
<font color="#ffffff">----</font>
為了使用這個函數,記住在單元的USES子句中,一定要包含MMSystem單元。
<p><font color="#ffffff">----</font>
2、如何以小圖標形式顯示在系統的Tray小圖標區?
<p><font color="#ffffff">----</font>
Windows 95/98是基于事件驅動機制的操作系統。任何一個控件都是通過發消息或對系統消息的處理來實現功能的。系統的Tray小圖標區實際上也是一個標準控件。對它的控制和操縱,與其他的標準控件一樣,也是通過發送消息和處理消息進行的。應用程序通過系統功能調用Shell_NotifyIcon向Tray小圖標區發送消息,即可達到我們的目的。
<pre>
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;
</pre>
<font color="#ffffff">----</font>
各字段的含義如下所述:
<pre>
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;
</pre>
<font color="#ffffff">----</font>
記住,在單元的USES子句中,別忘了要加上ShellApi單元。
<p><font color="#ffffff">----</font>
3、如何響應Tray小圖標區上圖標的鼠標事件?
<p><font color="#ffffff">----</font>
當用戶在你的圖標上移動、點擊時,Tray小圖標區會向應用程序發送如下的消息:
<pre>
messageID = uCallbackMessage
wParam = uID
lParam = mouse event (如:WM_LBUTTONDOWN)
</pre>
<font color="#ffffff">----</font>
我們只需在主窗口的定義中,聲明一個過程,來響應這個消息,在它的實現部分就可以對消息進行處理了。
消息處理函數聲明:
<pre>
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;</pre>
<font color="#ffffff">----</font>
其中,pop1為在主窗口中定義的彈出式菜單。
<p><font color="#ffffff">----</font>
4、如何控制系統任務欄上不顯示應用程序?
<p><font color="#ffffff">----</font>
通常的Windows程序在啟動后,會在系統任務欄上顯示一個小窗口,我們既然已有了小圖標,就沒必要再顯示一個小窗口了。
<p><font color="#ffffff">----</font>
這可以通過下列函數實現
<pre>
SetWindowLong(Application.Handle,
GWL_EXSTYLE,WS_EX_TOOLWINDOW);
ShowWindow(Handle, SW_HIDE);
</pre>
<font color="#ffffff">----</font>
把上述這些技術要點結合起來,就可以達到我們預想的目的了。本程序在中文Windows98、Delphi4.0下通過。運行效果良好。
<p align="right"><small><em>中國計算機世界出版服務公司版權所有</em></small>
<br>
</p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -