从 dll 调用 COM 方法
Invoke a COM Method from a dll
问题是:我一直在检查卡巴斯基小工具,发现它使用了一个 COM 对象,正如我在小工具的主 html 文件中看到的那样,所以我通过 CLSID 查看了注册表并到达位于卡巴斯基安装文件夹中的 "gadget.dll"。
我的兴趣是像他们一样调用特定的卡巴斯基应用程序选项卡。检查小工具文件夹中的 .js 文件,我可以看到我需要使用的方法的语法,即 "OpenWindow(WindowID)" 并且 WindowID 也在另一个文件中指定。
我一直在用一个简单的 VisualBasic 脚本尝试这个:
Set kavCOM = WScript.CreateObject("KISGadgetCOM.COMClass.1")
kavCOM.OpenWindow(1)
应该调用 Main Window,还尝试了 AutoHotKey 脚本:
^!k::
{
kavCOM := ComObjCreate("{ED6E691B-E662-4aae-AECC-705C9B014C75}")
kavCOM.OpenWindow(1)
}
它们都导致错误:80004004(操作中止)在带有“kavCOM.OpenWindow(1)
的行
怎么了?
好的,问题是对象实例化延迟,我通过添加解决了它
WScript.Sleep 1000
就在调用 "OpenWindow" 方法之前。
我的最终(更好)解决方案,它不会等待超过需要的时间:
Dim kavCOM, Cnt
Cnt = 0
Set kavCOM = CreateObject("KISGadgetCOM.COMClass.1")
On Error Resume Next
Do
Cnt = Cnt + 1
kavCOM.OpenWindow(1)
If Err = 0 Then
Exit Do
Else
Err.Clear
End If
WScript.Sleep 10
Loop
On Error Goto 0
MsgBox "It took " & 10*Cnt & " miliseconds."
Set kavCOM = Nothing
问题是:我一直在检查卡巴斯基小工具,发现它使用了一个 COM 对象,正如我在小工具的主 html 文件中看到的那样,所以我通过 CLSID 查看了注册表并到达位于卡巴斯基安装文件夹中的 "gadget.dll"。 我的兴趣是像他们一样调用特定的卡巴斯基应用程序选项卡。检查小工具文件夹中的 .js 文件,我可以看到我需要使用的方法的语法,即 "OpenWindow(WindowID)" 并且 WindowID 也在另一个文件中指定。 我一直在用一个简单的 VisualBasic 脚本尝试这个:
Set kavCOM = WScript.CreateObject("KISGadgetCOM.COMClass.1")
kavCOM.OpenWindow(1)
应该调用 Main Window,还尝试了 AutoHotKey 脚本:
^!k::
{
kavCOM := ComObjCreate("{ED6E691B-E662-4aae-AECC-705C9B014C75}")
kavCOM.OpenWindow(1)
}
它们都导致错误:80004004(操作中止)在带有“kavCOM.OpenWindow(1)
的行怎么了?
好的,问题是对象实例化延迟,我通过添加解决了它 WScript.Sleep 1000 就在调用 "OpenWindow" 方法之前。
我的最终(更好)解决方案,它不会等待超过需要的时间:
Dim kavCOM, Cnt
Cnt = 0
Set kavCOM = CreateObject("KISGadgetCOM.COMClass.1")
On Error Resume Next
Do
Cnt = Cnt + 1
kavCOM.OpenWindow(1)
If Err = 0 Then
Exit Do
Else
Err.Clear
End If
WScript.Sleep 10
Loop
On Error Goto 0
MsgBox "It took " & 10*Cnt & " miliseconds."
Set kavCOM = Nothing