wxPython and windows 7 taskbar
Question: For brevity's sake: I'm trying to implement
[this](http://stackoverflow.com/questions/1736394/using-windows-7-taskbar-
features-in-pyqt/1744503#1744503) with wxPython, but I'm struggling to fit
that code into a script based on wxPython.

My simple PyQt test code works fine. Here it is:

    
    
    from PyQt4 import QtGui
    from threading import Thread
    import time
    import sys
    import comtypes.client as cc
    import comtypes.gen.TaskbarLib as tbl
    
    TBPF_NOPROGRESS = 0
    TBPF_INDETERMINATE = 0x1
    TBPF_NORMAL = 0x2
    TBPF_ERROR = 0x4
    TBPF_PAUSED = 0x8
    
    cc.GetModule("taskbar.tlb")
    taskbar = cc.CreateObject("{56FDF344-FD6D-11d0-958A-006097C9A090}", interface=tbl.ITaskbarList3)
    
    class MainWindow(QtGui.QMainWindow):
        def __init__(self, parent=None):
            QtGui.QMainWindow.__init__(self, parent)
            self.setWindowTitle("Test")
    
            self.progress_bar = QtGui.QProgressBar(self)
            self.setCentralWidget(self.progress_bar)
            self.progress_bar.setRange(0, 100)
    
            self.progress = 0
    
            self.show()
    
            thread = Thread(target=self.counter)
            thread.setDaemon(True)
            thread.start()
    
        def counter(self):
            while True:
                self.progress += 1
                if self.progress > 100:
                    self.progress = 0
    
                time.sleep(.2)
    
                self.progress_bar.setValue(self.progress)
    
                taskbar.HrInit()
                hWnd = self.winId()
                taskbar.SetProgressState(hWnd, TBPF_ERROR)        
                taskbar.SetProgressValue(hWnd, self.progress, 100)
    
    app = QtGui.QApplication(sys.argv)
    ui = MainWindow()
    sys.exit(app.exec_())
    

But, when I try to execute the wxPython counterpart, the taskbar doesn't work
as expected. Here's the wxPython code:

    
    
    import wx
    import time
    import comtypes.client as cc
    import comtypes.gen.TaskbarLib as tbl
    from threading import Thread
    
    TBPF_NOPROGRESS = 0
    TBPF_INDETERMINATE = 0x1
    TBPF_NORMAL = 0x2
    TBPF_ERROR = 0x4
    TBPF_PAUSED = 0x8
    
    cc.GetModule("taskbar.tlb")
    taskbar = cc.CreateObject("{56FDF344-FD6D-11d0-958A-006097C9A090}", interface=tbl.ITaskbarList3)
    
    class MainWindow(wx.Frame):
        def __init__(self, parent, ID, title):
            wx.Frame.__init__(self, parent, ID, title)
    
            self.panel = wx.Panel(self)
            self.gauge = wx.Gauge(self.panel)
            self.gauge.SetValue(0)
    
            self.progress = 0
    
            self.Show()
    
            thread = Thread(target=self.counter)
            thread.setDaemon(True)
            thread.start()
    
        def counter(self):
            while True:
                self.progress += 1
                if self.progress > 100:
                    self.progress = 0
    
                time.sleep(.2)
    
                self.gauge.SetValue(self.progress)
    
                taskbar.HrInit()
                hWnd = self.GetHandle()
    
                taskbar.SetProgressState(hWnd, TBPF_ERROR)
                taskbar.SetProgressValue(hWnd, self.progress, 100)
    
    app = wx.PySimpleApp()
    frame = MainWindow(None, wx.ID_ANY, "Test")
    app.SetTopWindow(frame)
    app.MainLoop()
    

In particular I think the issue is due to the wxWindow window handle (hWnd)
method, that differ from its Qt equivalent, the former returning an integer
and the latter a "sip.voidptr object".

The problem is that I already wrote the whole code (1200+ lines) with
wxPython, thus i can't re-write it to use Qt (not to talk about the different
licenses).

What do you think about it? Should I give up?  
Thanks a lot in advance :)

**EDIT**

Thanks to Robert O'Connor, now it works. However, I still can't get why
`GetHandle` returns an integer while `winId` returns an object. In the .idl
file the argument hwnd is declared as `long` in all the function definitions.
Maybe this is a simple question too ;) Any Ideas?


Answer: On the following line:

    
    
    hWnd = self.panel.GetId()
    

You want to use `GetHandle()` instead of `GetId()`.

**Edit:** This was originally posted as a comment, but I suppose it would be
more appropriate for me to repost as an answer.

Regarding the edit to your question: If it now works I guess there isn't a
problem anymore ;) Okay, seriously though..

Ints and Longs are unified in Python and if I had to guess comtypes might be
doing some coercion in the background. I don't know if it's necessary to worry
about such details when dealing with comtypes in general, but it doesn't seem
to matter much in this case.

Now I have no experience with PyQT, but in Python you can define special
methods on objects such as `__int__` and `__long__` to emulate, well, Ints and
Longs. If I had to guess, the object you're getting in PyQT defines one of
those methods.

