ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: baomaboy

[原创] COM加载宏封装自定义函数并全自动安装最简实例

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 07:09 | 显示全部楼层

回复 161楼 fecmen 的帖子

本帖已被收录到知识树中,索引项:插件开发
谢谢分项,相信你一定能把注册、注销,这两个功能继续优化到最完美。

TA的精华主题

TA的得分主题

发表于 2011-6-3 10:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

一次关闭所有Excel窗口的代码

以下是一次关闭所有的Excel窗口代码,希望起到抛砖引玉的效果吧。

Private Type PROCESSENTRY32
     dwSize As Long
    cntUsage As Long
    th32ProcessID As Long
    th32DefaultHeapID As Long
    th32ModuleID As Long
    cntThreads As Long
    th32ParentProcessID As Long
    pcPriClassBase As Long
    dwFlags As Long
    szExeFile As String * 260
End Type
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Const TH32CS_SNAPPROCESS = &H2&

'关闭指定名称的进程
Public Sub KillProcess(sProcess As String)
    Dim lSnapShot As Long
     Dim lNextProcess As Long
     Dim tPE As PROCESSENTRY32
     lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
    If lSnapShot <> -1 Then
        tPE.dwSize = Len(tPE)
         lNextProcess = Process32First(lSnapShot, tPE)
        Do While lNextProcess
            If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1)) Then '比较进程名
                Dim lProcess As Long
                 Dim lExitCode As Long
                lProcess = OpenProcess(1, False, tPE.th32ProcessID)
                 TerminateProcess lProcess, lExitCode
                 CloseHandle lProcess
            End If
            lNextProcess = Process32Next(lSnapShot, tPE)
        Loop
        CloseHandle (lSnapShot)
    End If
End Sub

sub a()
KillProcess "excel.exe"
end sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 12:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 164楼 fecmen 的帖子

我也推荐用api的方法,最主要的原因是api适应性强。
不过单在这个例子里还没发现过wmi的局限性(没出现过未安装wmi组件的电脑,即使有也应该是极少)
所以如果单指此功能的话我还是会用wmi。

谢谢fecmen 提供这么好的资料。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 12:56 | 显示全部楼层
原帖由 wxhnr 于 2011-6-3 05:22 发表
我看高手们有时间的话不如把注册程序做成通用型的不是更好!


通用 主要指哪方面通用?1楼的附件好像也具备了部分通用性了,具体还需要哪些通用请给些建议。

谢谢 wxhnr

TA的精华主题

TA的得分主题

发表于 2011-6-3 19:07 | 显示全部楼层
就是不管是谁写的DLL,都能使用同一个注册程序。

具体来讲要让注册程序自动识别DLL里的类并注册到加载宏列表里,无需再修改注册程序,即不管DLL的ProgID是“AAA.YYY”,还是“ABC.Class1”,或者是“工程试验.GSGY”之类,都能自动提取出来。

不知以上提议妥否

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 20:06 | 显示全部楼层

回复 167楼 wxhnr 的帖子

谢谢  wxhnr 的建议,非常好,其实最早的目的就是如此,最早的一个附件已经具备你提的这个功能。
可以把dll换成你的dll试试。
只是后来我公开的源码不是通用的,后续的优化版能不能通用不清楚。

[ 本帖最后由 baomaboy 于 2011-6-4 15:03 编辑 ]
QQ截图未命名.jpg
QQ截图未命名.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 20:54 | 显示全部楼层

回复 167楼 wxhnr 的帖子

正在做一个功能相似的程序,在1楼第一个附件的基础上增加了一些功能,
但是这并不属于对1楼附件的更新,也不能代替1楼的附件,因为两个程序侧重点不同,1楼的附件主要功能是提供对dll的安装、卸载。而且如你所说(就是不管是谁写的DLL,都能使用同一个注册程序。)
新做的程序主要是提供对excle所有加载项的管理(包含dll的安装卸载),已有雏形。
QQ截图未命名.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-6-3 21:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
还是先发个测试版吧,未完成版,既然提到了,就忍不住先放出来。
如fecmen所说 过程是需要不断完善的。
已在新帖发布:
http://club.excelhome.net/thread-727017-1-1.html

[ 本帖最后由 baomaboy 于 2011-6-4 12:42 编辑 ]

TA的精华主题

TA的得分主题

发表于 2011-6-3 21:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-6-3 21:24 | 显示全部楼层
原帖由 baomaboy 于 2011-6-3 21:06 发表
还是先发个测试版吧,未完成版,既然提到了,就忍不住先放出来。
如fecmen所说 过程是需要不断完善的。



程序需要调试后再发布出来嘛。出错啦!
未命名.JPG
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-23 22:42 , Processed in 0.032515 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表