找回密码
 加入
搜索
查看: 1835|回复: 3

关于COM使用问题。

[复制链接]
发表于 2009-8-18 12:19:19 | 显示全部楼层 |阅读模式
下面是VBS的写法
Set objWIM = WScript.CreateObject("GImageX.GImageXCtrl", "objWIM_")
objWIM.Source = "c:\test"
objWIM.Destination = "test.wim"
objWIM.ImageName = "Test WIM"
objWIM.Description = "Test Description"
objWIM.DisplayName = ""
objWIM.DisplayDescription = ""
objWIM.Flags = "Ultimate"
objWIM.Check = TRUE
objWIM.Verify = TRUE
objWIM.Bootable = FALSE

objWIM.CaptureImage

WScript.DisconnectObject objWIM   
Set objWIM = Nothing


Sub objWIM_Progress(Percent, TimeRemaining)
    WScript.Echo Percent & "% - " & TimeRemaining & " sec(s)"
    ' Abort the operation by using the line below
    'objWim.Abort = TRUE
End Sub

Sub objWIM_ProgressInfo(Info)
    WScript.Echo Info
End Sub

我查了下VBS的用法objWIM_好象是前缀什么的,不知道au3有前缀的是不是这样
$objWIM = ObjCreate("GImageX.GImageXCtrl")
$EventObject=ObjEvent($objWIM,"objWIM_")
当然最后结果没有达到我的目的
VBS运行的结果是通过COM的事件监视到进度。有高手能不能说下在au3中如何做或转换。
 楼主| 发表于 2009-8-18 18:43:32 | 显示全部楼层
$objWIM=ObjCreate("GImageX.GImageXCtrl")
$SinkObject=ObjEvent($objWIM,"objWIM_")
$objWIM.Source = "i:"
$objWIM.Destination = "xp.wim"
$objWIM.ImageName = "Test WIM"
$objWIM.Description = "Test Description"
$objWIM.DisplayName = ""
$objWIM.DisplayDescription = ""
$objWIM.Flags = "Ultimate"
$objWIM.Check = TRUE
$objWIM.Verify = TRUE
$objWIM.Bootable = FALSE

$objWIM.CaptureImage

exit

Func objWIM_Progress($Percent, $TimeRemaining)
    Msgbox (0,"AutoItCOM 测试",$Percent & $TimeRemaining)
    ;$objWim.Abort = TRUE
EndFunc

哪位了解的朋友帮看下,我使用AUTOIT写成这样,始终无法自动调用函数抛出消息框,是不是后缀问题。但是VBS就没有问题。
 楼主| 发表于 2009-8-18 21:06:19 | 显示全部楼层
找了一下别人的代码
#cs ----------------------------------------------------------------------------
       
        AutoIt Version: 3.2.10.0
        Author:         Bj鰎n Kaiser
       
        Script Function:
       
       
#ce ----------------------------------------------------------------------------

Opt("MustDeclareVars", 1)
#include <gimagex_com.au3>
Dim $iRC, $oWIM, $oEvent
;$oWIM = _gimagex_object()
$oWIM = ObjCreate("GImageX.GImageXCtrl")
$oEvent = ObjEvent($oWIM, "objWIM_")
ProgressOn("ImageX", "Please wait ...")
$iRC = _gimagex_capture($oWIM, "I:\", "D:\xp.wim", "test")
ConsoleWrite("RC:" & @TAB & $iRC & @CRLF & "@error:" & @TAB & @error & @CRLF)

$oEvent = 0
$oWIM = 0

ProgressOff()

Func objWIM_Progress($iPercent, $iSeconds)
        ProgressSet($iPercent, "ETA: " & $iSeconds & " seconds")
        ConsoleWrite("ETA:" & @TAB & @TAB & $iSeconds & @CRLF & "Progress:" & @TAB & $iPercent & @CRLF)
EndFunc   ;==>ImageXEvent_Progress

最后发现,运行结果跟我的一样,还是无法获取进度。我现在开始怀疑是不是DLL版本问题或者是编译器3.3有问题。
 楼主| 发表于 2009-8-19 01:46:56 | 显示全部楼层
还是没有答案,怎么没有人呢?
在使用 ObjEvent($oWIM, "objWIM_") 后
函数 Func objWIM_Progress($iPercent, $iSeconds) 根本就没有被调用和工作
求解中。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-21 23:29 , Processed in 0.089417 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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