AutoHotkey使用Excel的Com对象可能导致进程残留问题的原因及解决方案

在AutoHotkey脚本中,对Excel的应用体验很不错,xl := ComObjActive("Excel.Application")就和当前Excel表连接了,

通过xl变量就能调用VBA代码操作Excel,也能监视Excel事件,这种事件能对所有工作表都能效,通用性很好。

本人就是因为偷懒,声明了Global xl,这样在任何函数内都能直接使用,非常方便,

否则要么是每个函数都需要多传入xl参数,或者每个函数声明为Global,这样也能使用外面的变量,都不太理想。

直到近期,才发现声明全局变量后,如果使用完没有释放xl,会导致Excel进程残留。

解决方案:

  • 继续使用全局变量xl,每次使用后释放xl。
  • 规范代码,每个函数都增加一个参数xl。
  • 把Excel的函数都写到Class内,每个函数都通过This.xl调用。

附上AutoHotkey监控Excel工作表事件代码

st := ComObjActive("Excel.Application").Activesheet ;工作表必须赋值到变量
ComObjConnect(st, "st_")
Return

st_SelectionChange(Target)
{
    ;事件函数内获取Application可用 Target.Worksheet.Application
    ToolTip,% Target.Address
}

  

原文地址:https://www.cnblogs.com/hyaray/p/10599303.html

时间: 2024-08-28 01:25:41

AutoHotkey使用Excel的Com对象可能导致进程残留问题的原因及解决方案的相关文章

导致网站打开慢的原因及解决方案?

近 期有客户反应服务器网站打开速度慢,检查服务器网络和硬件都是没有问题的,特此找来这篇文章来学习下!研究表明:打开网页,用户最满意的时间是2-5秒, 如果用户等待超过10秒,99%的用户会关闭这个网页.那么,是什么原因会导致网站打开慢?又有什么办法解决呢?一般来说,http请求过多.网页过大. 服务器性能过差等等都可能导致网站打开慢.这里我们从技术层面来分享一些参考解决方法: 1.减少HTTP请求数打开一个网页的时候,后台程序的响应并不所需太多时间,等待的时间主要花费在下载网页元素上了,即HTM

Excel的Range对象(C#)

原文:Excel的Range对象(C#) Range 对象是 Excel 应用程序中最经常使用的对象:在操作 Excel 内的任何区域之前,都需要将其表示为一个 Range 对象,然后使用该 Range 对象的方法和属性.一个 Range 对象代表一个单元格.一行.一列.包含一个或者更多单元块(可以是连续的单元格,也可以式不连续的单元格)的选定单元格,甚至是多个工作表上的一组单元格. 在代码中引用范围. Address 属性:这个属性返回范围坐标的字符串,坐标以下面几种格式之一表示,包括:“$A

验证当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。

结果:当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行.

网页中的内容拷贝到EXCEL之后,有些对象无法删除

大家经常会遇到从某个系统的web页面上Copy内容到Excel中,之后,会发现有一些对象,像多选框,单选框无法删除. 看A1 位置的单选框 选中之后点delete也无法删除,很是急人啊. 不过,想要删除它也非常简单, 首先,点击ctrl+G 打开定位对话框,然后定位所有的对象,点击special  然后选择objects 这样,就选中了所有的对象.然后直接点delete就可以了 网页中的内容拷贝到EXCEL之后,有些对象无法删除

函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。

原文:函数调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配. 在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)] 要注意C++与NET中数据类型的对应: //c++:char * ---- c#:string //传入参数 //c++:char * ---- c#

C# DllImport“调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ”

调用外部dll时,出现如下问题 C# DllImport“调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配.请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配 ” 后来经过仔细检查发现,误把vb中的longx型当成64位,实际上它相当于C#中的32位int型.

【转】Windows10下80端口被PID为4的System占用导致Apache无法启动的分析与解决方案

昨天刚更新了Windows10,总体上来说效果还是蛮不错的,然而今天在开启Apache服务器的时候却发现,Apache莫名其妙的打不开了,起初以为是权限的问题,于是使用管理员身份的控制台去调用命令net start Apache2.4,结果依然是无法打开.手动启动服务报错“Windows不能再本地计算机启动Apache,有关更多信息,查阅系统时间日志.如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1.”如下图所示: Windows不能再本地计算机启动Apache,有关

Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析

原文:Dispatcher.BeginInvoke()方法使用不当导致UI界面卡死的原因分析 前段时间,公司同事开发了一个小工具,在工具执行过程中,UI界面一直处于卡死状态. 通过阅读代码发现,主要是由于Dispatcher.BeginInvoke()方法使用不当导致的. 本文将通过一个WPF模拟程序来演示一下界面卡死的现象,并通过修改代码来解决界面卡死的问题. 希望通过对本文的学习,大家能对Dispatcher.BeginInvoke()方法有一个新的认识. 文章开篇直接给出界面卡死的示例代码

C# 调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配

原文:C# 调用导致堆栈不对称.原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配 在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]