win32com: Setting ByRef parameters in an event
Paul Moore
paul.moore at uk.origin-it.com
Thu Aug 16 11:05:19 EDT 2001
I never got any response to this. I could really do with knowing whether this
is possible. Can anyone help? Mark?
Thanks,
Paul.
On Tue, 24 Jul 2001 15:24:01 +0200, Paul Moore <paul.moore at uk.origin-it.com>
wrote:
>I'm trying to do some event handling code using win32com. I'm using a
>component called WScriptEx as my test case, which has a Sleep method which
>fires a regular OnTick event. The IDL for the OnTick event is
>
> HRESULT OnTick(
> [in] VARIANT RemainingTime,
> [in, out] VARIANT* WakeUp);
>
>The WakeUp parameter should be set if the event code wants to stop the sleep
>at this point. I've tried this, and it works fine in VBScript:
>
> Set WScriptEx = WScript.CreateObject("WshToolbox.WScriptEx", "WScriptEx_")
>
> ' Sleep for 10 seconds, raising an OnTick event every 1 second
> WScriptEx.Sleep 10000, 1000
>
> Sub WScriptEx_OnTick (ByVal Remaining, ByRef Wakeup)
> WScript.Echo "Tick.... " & Remaining
> Wakeup = True ' Wake the sleep up
> End Sub
>
>
>Now, based on a post from Mark Hammond ("Re: Handling Com Events in Python
>(was Python and Windows Scripting Host)" from Fri, 11 Aug 2000) I can do this
>by just returning the necessary value:
>
> import win32com.client
>
> class wexEvents:
> def OnTick(self, Remaining, WakeUp):
> print "Tick...", Remaining
> return -1
>
> wex = win32com.client.DispatchWithEvents("WshToolbox.WScriptEx",
> wexEvents)
>
> wex.Sleep(10000,1000)
>
>But this doesn't seem to work! The thing just keeps ticking remorselessly
>until the 10 seconds are up. (And, BTW, if I hit Ctrl-C, I get an error
>"Unhandled exception detected before entering Python." - shouldn't I get a
>KeybordInterrupt error?)
>
>Am I doing something wrong? Is there a subtle bug here?
>
>Any help would be appreciated - this sort of construct is important to me, and
>I'd hate to be reduced to VBScript or (shudder...) Perl.
>
>Thanks,
>Paul
More information about the Python-list
mailing list