winapi - Excel - Windows 7 任务栏进度

标签 winapi vba excel taskbar

运行 Excel 2010,我始终可以在此版本上运行这些工作表,因为它只能在我工作的终端计算机上进行本地访问。

我通过 Excel 运行了许多导入过程和大文件夹过滤/打印批处理功能。我想在我的函数处理时使用 Windows 7 任务栏进度条视觉效果,以了解它们的进度。考虑使用其他视觉效果来显示进度,但这(如果可能的话)似乎是最明显和最专业的风格。

我一直在彻底研究如何使这项工作成功,但无济于事。到目前为止,我的理解是我需要实现 ITaskbarList3 接口(interface),该接口(interface)常见于 Windows API 中。从我发现的显示如何使其工作的代码来看,一旦实现,其余的似乎相当简单且不言自明。

我完全只能使用 Excel 作为代码的基础,在工作计算机上没有安装权限。我可以在家安装以获取所需的任何文件,然后传输它们。乐于使用任何广泛或非常落后的方式来达到目的,因为目的证明了无论采取什么手段都是合理的。

最佳答案

使用 Excel 状态栏会更容易:

Application.StatusBar = "向用户显示进度...";


对于 Windows 和任务栏进度条,您需要下载 Windows 7 taskbar: Developer Resources

您需要打开示例解决方案,右键单击 Windows7.DesktopIntegration 项目 > 属性 > 生成 > 勾选“注册 COM”。

通过在开发过程中选中 IDE 中的“Register for COM interop”选项,IDE 将在目标程序集上调用 regasm 以及/codebase 选项。

这将导致 regasm.exe 为从程序集中导出的 COM 可见类添加以下注册表项:

HKEY_CLASSES_ROOT\CLSID{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\InprocServer32\CodeBase=

这将使 CLR 通过遵循程序集的路径来定位您的程序集。 如果没有代码库路径,CLR 将必须使用标准搜索算法来定位您的程序集(及其依赖项)。

下一步构建解决方案> 转到 Windows7.DesktopIntegration 项目的 bin 文件夹,并将 Windows7.DesktopIntegration.DLL 和 Windows7.DesktopIntegration.TLB 复制到 System32 文件夹,或者更好地注册到 GAC。

帮助 CLR 查找所需程序集的一项相关技术是将所有程序集(及其依赖项)复制到与客户端应用程序本身相同的文件夹中。但是,您的案例中的客户端应用程序将是 Excel。这意味着您必须将程序集复制到与 Excel 应用程序相同的文件夹中(这不是一个好主意)。

一旦您能够实例化 Windows7.DesktopIntegration DLL,您就应该能够调用 Windows7Taskbar.SetProgressValue 方法,例如 VBA 代码:

Set Windows7Taskbar = CreateObject("Windows7.DesktopIntegration")

Windows7Taskbar.SetProgressState(form.Handle, Windows7Taskbar.ThumbnailProgressState.Normal)

Windows7Taskbar.SetProgressValue(form.Handle, progress, maximum)

关于winapi - Excel - Windows 7 任务栏进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682749/

相关文章:

vba - excel:运行宏后取消选择范围

c++ - 隐藏全局光标

arrays - VBA计算数组的非空元素

excel - 根据当前日期在单元格中输入内容

sql-server - 仅使用正确的参数顺序在 Access VBA 中调用存储过程,为什么?

arrays - 我正在尝试返回 Excel UDF 的值数组。我最终只得到第一个值,没有其他值,为什么?

javascript - Jquery FullCalendar 导出到 Excel

winapi - 如何播放标准的 Windows 声音?

c++ - 无法打开包含文件 : 'VersionHelpers.h' : No such file or directory

winapi - 快速访问大文件 - fseek ftell fsetpos fgetpos