?? 給cdrom安個軟開關 (2001年1月7日).txt
字號:
給CDROM安個軟開關 (2001年1月7日)
網友更新 分類:系統 作者: 飄(推薦) 推薦:飄 閱讀次數:336
(http://www.codesky.net)
--------------------------------------------------------------------------------
---- 現在,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);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -