Windows 程式設計/程式設計 Shell 擴充套件
外觀
Windows Shell 主要由 explorer.exe 組成,這是一個圖形使用者介面,用於顯示資料夾、圖示和桌面。Explorer.exe 主要用 C++ 編寫,因此編寫擴充套件模組將需要面向物件程式設計。但是,在 <windows.h> 中,有一些 C 程式可以使用來與 shell 互動以執行一些基本任務。首先,我們將描述 shell 的一些基本區域。
explorer.exe,Windows shell 程式,具有許多不同的功能,可以用來讓你的程式執行 shell 應該執行的任務。這裡我們將簡單介紹其中一些。
ShellExecute 函式以檔案和路徑名作為引數,它基本上執行 shell 在雙擊該檔案時所執行的任何任務。例如,對“MyFile.txt”呼叫 ShellExecute 將開啟記事本,並顯示 MyFile.txt。類似地,對超連結呼叫 ShellExecute 將自動開啟 Internet Explorer(或你的預設瀏覽器)並開啟指定的 URL。
HINSTANCE ShellExecute(HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd);
- hwnd
- 操作的父視窗的控制代碼
- lpOperation
- 操作的文字名稱。這些是當你右鍵單擊圖示時出現在選單中的字串。一些常見的數值是“edit”、“run”或“execute”。
- lpFile
- 目標檔案的名稱
- lpParameters
- 如果 lpFile 指定了一個可執行檔案,則 lpParameters 欄位包含可執行檔案的命令列引數(如果有)
- lpDirectory
- 指定在哪個目錄中執行操作
- nShowCmd
系統托盤是螢幕右下角的區域,包含時鐘和許多不同的圖示。可以使用簡單的 API 呼叫將圖示新增到系統托盤。要使用的函式呼叫是 Shell_NotifyIcon 函式,我們將在下面解釋它。
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid);
此函式接受 2 個引數。第一個引數是一個訊息,第二個引數包含有關該訊息的更多資訊。共有 3 種可能的郵件
NIM_ADD Add a new icon to the system tray NIM_DELETE Delete an icon from the system tray NIM_MODIFY Modify an existing icon in the system tray
我們可以看到第二個引數是指向 NOTIFYICONDATA 結構的指標。該結構包含以下欄位
typedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
WCHAR szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
- cbSize
- 這應該反映 NOTIFYICON 結構的大小。如果我們有一個名為“nid”的結構,我們通常按以下方式分配此成員
nid.cbSize = sizeof(NOTIFYICONDATA);
- hWnd
- 此欄位包含父視窗的控制代碼。當單擊通知圖示時,將向該視窗傳送相應的郵件。
- uID
- 這是所討論圖示的數字識別符號。一個程式最多可以同時擁有 12 個不同的圖示。
- uCallbackMessage
- 這是將傳送到你的視窗的郵件。此郵件應為 WM_USER 或更大。郵件的 WPARAM 欄位將包含所討論圖示的 uID。
- uFlags
- 此成員告訴 shell 哪些欄位是有效欄位。如果某個欄位不包含任何資訊,或者你不想使用某個欄位來設定或修改數值,請不要在 uFlags 成員中列出它們。可能的數值為 NIF_ICON、NIF_MESSAGE 和 NIF_TIP。
- hIcon
- 要顯示在系統托盤中的圖示的控制代碼。必須是 16x16 的圖示。
- szTip
- 一個簡短的字串,包含圖示的“工具提示”。當滑鼠懸停在圖示上時,將顯示工具提示。如果你不希望顯示工具提示,請將其留空。