跳转到内容

Windows 编程/编程 Shell 扩展

来自维基教科书,开放世界中的开放书籍

Windows Shell 主要由 explorer.exe 组成,这是一个图形用户界面,用于显示文件夹、图标和桌面。Explorer.exe 主要用 C++ 编写,因此编写扩展模块将需要面向对象编程。但是,在 <windows.h> 中,有一些 C 程序可以使用来与 shell 交互以执行一些基本任务。首先,我们将描述 shell 的一些基本区域。

explorer.exe,Windows shell 程序,具有许多不同的功能,可以用来让你的程序执行 shell 应该执行的任务。这里我们将简单介绍其中一些。

ShellExecute

[编辑 | 编辑源代码]

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

回收站

[编辑 | 编辑源代码]
华夏公益教科书