?? delp002.html
字號(hào):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>給CDROM安個(gè)軟開關(guān) </title>
<!--***********-->
<link rel="stylesheet" href="../../../fwolf_style.css"></head>
<body bgcolor="#FFFFFF" >
<table width="75%" border="0">
<tr>
<td>
<center>
<font color="#0000c0">
<h2>給CDROM安個(gè)軟開關(guān) </h2>
</font>
<h3> 湖北襄樊神龍汽車公司組織系統(tǒng)部 <br>
黎云華 </h3>
</center>
<p><font color="#ffffff">----</font> 現(xiàn)在,CDROM已成為個(gè)人PC機(jī)的標(biāo)準(zhǔn)配置了。平常使用CDROM軟件盤片較多的朋友,經(jīng)常開關(guān)CDROM,開關(guān)次數(shù)一多,容易使開關(guān)磨損,造成接觸不良。根據(jù)這種情況,最近我用Delphi編寫了一個(gè)軟件,功能就是開關(guān)CDROM,下面我給大家介紹:此程序一運(yùn)行,就會(huì)以小圖標(biāo)駐留在系統(tǒng)的Tray小圖標(biāo)區(qū)。當(dāng)鼠標(biāo)經(jīng)過(guò)小圖標(biāo)時(shí),程序提示這是一個(gè)“CDROM軟開關(guān)”程序,在小圖標(biāo)上單擊鼠標(biāo)右鍵,彈出菜單,點(diǎn)擊Eject即可打開CDROM門,點(diǎn)擊Close關(guān)閉CDROM門,點(diǎn)擊Exit則退出應(yīng)用程序。
<p><font color="#ffffff">----</font> 要實(shí)現(xiàn)此程序,有四個(gè)技術(shù)要點(diǎn)。
<p><font color="#ffffff">----</font> 1、如何控制CDROM開關(guān)?
<p><font color="#ffffff">----</font> 這可以利用MCI(Media Control Interface)函數(shù)中的mciSendString()來(lái)實(shí)現(xiàn),MCI可以簡(jiǎn)單地看作是一組用來(lái)控制多媒體設(shè)備的函數(shù),這些函數(shù)包含在動(dòng)態(tài)連接庫(kù)MMSYSTEM.DLL中,該庫(kù)文件位于Windows3.x、Windows
95/98或Windows NT的SYSTEM子目錄中。
<pre>
打開CDROM門:
mciSendString('Set cdaudio door
open wait', nil, 0, handle);
關(guān)閉CDROM門:
mciSendString('Set cdaudio door
closed wait', nil, 0, handle);
</pre>
<font color="#ffffff">----</font> 為了使用這個(gè)函數(shù),記住在單元的USES子句中,一定要包含MMSystem單元。
<p><font color="#ffffff">----</font> 2、如何以小圖標(biāo)形式顯示在系統(tǒng)的Tray小圖標(biāo)區(qū)?
<p><font color="#ffffff">----</font> Windows 95/98是基于事件驅(qū)動(dòng)機(jī)制的操作系統(tǒng)。任何一個(gè)控件都是通過(guò)發(fā)消息或?qū)ο到y(tǒng)消息的處理來(lái)實(shí)現(xiàn)功能的。系統(tǒng)的Tray小圖標(biāo)區(qū)實(shí)際上也是一個(gè)標(biāo)準(zhǔn)控件。對(duì)它的控制和操縱,與其他的標(biāo)準(zhǔn)控件一樣,也是通過(guò)發(fā)送消息和處理消息進(jìn)行的。應(yīng)用程序通過(guò)系統(tǒng)功能調(diào)用Shell_NotifyIcon向Tray小圖標(biāo)區(qū)發(fā)送消息,即可達(dá)到我們的目的。
<pre>
Shell_NotifyIcon函數(shù)包含在單元ShellApi中,說(shuō)明如下:
function Shell_NotifyIcon(dwMessage: DWORD;
lpData: PNotifyIconData): BOOL; stdcall;
其中:
dwMessage:要發(fā)給Tray小圖標(biāo)區(qū)的消息,
可以取以下三個(gè)值:
NIM_ADD 在Tray小圖標(biāo)區(qū)上增加一個(gè)圖標(biāo)
NIM_MODIFY 修改一個(gè)Tray小圖標(biāo)區(qū)的圖標(biāo)
NIM_DELETE 刪除Tray小圖標(biāo)區(qū)的一個(gè)圖標(biāo)
lpData:指向TNotifyIconDataA結(jié)構(gòu)的指針,
此結(jié)構(gòu)是要增加的圖標(biāo)的信息。
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的大小,
設(shè)置為SizeOf( TNotifyIconDataA);
Wnd:接收Tray小圖標(biāo)區(qū)鼠標(biāo)事件的窗口
的句柄,例如:MainForm.Handle;
uID:圖標(biāo)的ID(Tray小圖標(biāo)區(qū)鼠標(biāo)
事件的wPara參數(shù)的值);
uFlags:此條消息的有效范圍(低三位有效)
NIF_MESSAGE 0x1 // uCallbackMessage參數(shù)有效
NIF_ICON 0x2 // hIcon is valid參數(shù)有效
NIF_TIP 0x4 // szTip is valid參數(shù)有效
uCallbackMessage:系統(tǒng)回送消息的ID;
hIcon:顯示在Tray小圖標(biāo)區(qū)上的圖標(biāo)的句柄;
szTip:鼠標(biāo)移動(dòng)到圖標(biāo)上時(shí)系統(tǒng)顯示的提示信息。
增加小圖標(biāo)程序如下:
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軟開關(guān)';
Shell_NotifyIcon( NIM_ADD, @IconData );
end;
</pre>
<font color="#ffffff">----</font> 記住,在單元的USES子句中,別忘了要加上ShellApi單元。
<p><font color="#ffffff">----</font> 3、如何響應(yīng)Tray小圖標(biāo)區(qū)上圖標(biāo)的鼠標(biāo)事件?
<p><font color="#ffffff">----</font> 當(dāng)用戶在你的圖標(biāo)上移動(dòng)、點(diǎn)擊時(shí),Tray小圖標(biāo)區(qū)會(huì)向應(yīng)用程序發(fā)送如下的消息:
<pre>
messageID = uCallbackMessage
wParam = uID
lParam = mouse event (如:WM_LBUTTONDOWN)
</pre>
<font color="#ffffff">----</font> 我們只需在主窗口的定義中,聲明一個(gè)過(guò)程,來(lái)響應(yīng)這個(gè)消息,在它的實(shí)現(xiàn)部分就可以對(duì)消息進(jìn)行處理了。
消息處理函數(shù)聲明:
<pre>
procedure IconOnClick(var message:
TMessage); message WM_USER+1;
實(shí)現(xiàn)過(guò)程:
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、如何控制系統(tǒng)任務(wù)欄上不顯示應(yīng)用程序?
<p><font color="#ffffff">----</font> 通常的Windows程序在啟動(dòng)后,會(huì)在系統(tǒng)任務(wù)欄上顯示一個(gè)小窗口,我們既然已有了小圖標(biāo),就沒(méi)必要再顯示一個(gè)小窗口了。
<p><font color="#ffffff">----</font> 這可以通過(guò)下列函數(shù)實(shí)現(xiàn)
<pre>
SetWindowLong(Application.Handle,
GWL_EXSTYLE,WS_EX_TOOLWINDOW);
ShowWindow(Handle, SW_HIDE);
</pre>
<font color="#ffffff">----</font> 把上述這些技術(shù)要點(diǎn)結(jié)合起來(lái),就可以達(dá)到我們預(yù)想的目的了。本程序在中文Windows98、Delphi4.0下通過(guò)。運(yùn)行效果良好。
</td>
</tr>
</table>
<p> </p>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -