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
- 一个简短的字符串,包含图标的“工具提示”。当鼠标悬停在图标上时,将显示工具提示。如果你不希望显示工具提示,请将其留空。