四海皆狂龙 发表于 2009-8-18 12:19:19

关于COM使用问题。

下面是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) 根本就没有被调用和工作
求解中。
页: [1]
查看完整版本: 关于COM使用问题。