Winapi Excel-Windows 7任务栏进度

Winapi Excel-Windows 7任务栏进度,winapi,vba,excel,taskbar,Winapi,Vba,Excel,Taskbar,运行Excel2010,我可以肯定地一直在这个版本上运行这些工作表,因为它只能在我工作的终端计算机上本地访问 我通过excel运行了许多导入过程和大文件夹过滤/打印批处理功能。我想利用Windows7任务栏的进度条视觉,而我的功能过程中,给一个想法,他们有多远。考虑使用其他视觉效果来显示进度,但这(如果可能)似乎是最明显和最专业的风格 我一直在仔细研究,试图使这项工作,但没有结果。到目前为止,我的理解是,我需要实现ITaskbarList3接口,这在Windows API中很常见。从我发现的显示

运行Excel2010,我可以肯定地一直在这个版本上运行这些工作表,因为它只能在我工作的终端计算机上本地访问

我通过excel运行了许多导入过程和大文件夹过滤/打印批处理功能。我想利用Windows7任务栏的进度条视觉,而我的功能过程中,给一个想法,他们有多远。考虑使用其他视觉效果来显示进度,但这(如果可能)似乎是最明显和最专业的风格

我一直在仔细研究,试图使这项工作,但没有结果。到目前为止,我的理解是,我需要实现ITaskbarList3接口,这在Windows API中很常见。从我发现的显示如何使其工作的代码来看,一旦实现,其余的代码似乎相当简单且不言自明


我完全限制使用Excel作为代码的基础,没有在工作计算机上安装的权限。我可以在家里安装,以获取任何必要的文件,然后传输它们。很高兴使用任何广泛的或真正向后的方法来结束,因为目的证明了它所采取的任何手段。

使用Excel状态栏会更容易:

Application.StatusBar=“向用户显示进度…”


对于Windows和任务栏进度条,您需要下载

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

在开发过程中,通过检查IDE中的“注册COM互操作”选项,IDE将在目标程序集上与/codebase选项一起调用regasm

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

HKEY\U CLASSES\U ROOT\CLSID{xxxxxxxx-xxxx-xxxx-xxxxxxxx-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)

使用Excel状态栏会容易得多:

Application.StatusBar=“向用户显示进度…”


对于Windows和任务栏进度条,您需要下载

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

在开发过程中,通过检查IDE中的“注册COM互操作”选项,IDE将在目标程序集上与/codebase选项一起调用regasm

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

HKEY\U CLASSES\U ROOT\CLSID{xxxxxxxx-xxxx-xxxx-xxxxxxxx-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)

不,您没有实现
ITaskbarList3
。这是由系统实现的。你需要消耗它。您需要调用
CoCreateInstance
来创建
ITaskbarList3
的实例。您还需要访问主Excel窗体的窗口句柄。听起来您只能使用VBA进行此操作。祝你好运。事实上,我甚至不相信从VBA中消费
ITaskbarList3
。我觉得你只能使用自动化接口。在这种情况下,游戏就结束了。@DavidHeffernan好吧,那么现在看来在Excel的范围内就不可能了?悲哀的一天。不,您没有实现
ITaskbarList3
。这是由系统实现的。你需要消耗它。您需要调用
CoCreateInstance
来创建
ITaskbarList3
的实例。您还需要访问主Excel窗体的窗口句柄。听起来您只能使用VBA进行此操作。祝你好运。事实上,我甚至不相信从VBA中消费
ITaskbarList3
。我觉得你只能使用自动化接口。在这种情况下,游戏就结束了。@DavidHeffernan好吧,那么现在看来在Excel的范围内就不可能了?Sad day.OP仅限于