Hi. I am an A-level student studying computer science. I have taken it upon myself to learn python. It is now my weapon of choice. I have had a problem trying to creating a clipboard monitor in Windows(XP,Vista) that is linked to a tkinter GUI. I have a perfectly good code for clipboard monitoring, but as soon as it is linked to a tkinter gui, the gui locks when a WM.DRAWCLIPBOARD message is recieved. I am at the point of giving up. If anyone can help or offer an alternative....that is not polling....I would be very happy. Thanks. Peter
import win32ui, win32clipboard, win32con, win32api, win32gui from Tkinter import * def paste(): win32clipboard.OpenClipboard(0) data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() return data class ClipRecord(object): def __init__(self): self.gui = Tk() self.hPrev = 0 self.first = True self.win = win32ui.CreateFrame() self.win.CreateWindow(None,'',win32con.WS_OVERLAPPEDWINDOW) self.win.HookMessage(self.OnDrawClipboard,win32con.WM_DRAWCLIPBOARD) self.win.HookMessage(self.OnChangeCBChain,win32con.WM_CHANGECBCHAIN) self.win.HookMessage(self.OnDestroy,win32con.WM_DESTROY) try: self.hPrev=win32clipboard.SetClipboardViewer(self.win.GetSafeHwnd()) except win32api.error, err: if win32api.GetLastError () == 0: # information that there is no other window in chain pass else: raise self.l = Label(self.gui,text="I have losted the will to live") self.l.pack() self.gui.mainloop() def OnChangeCBChain(self, *args): msg, wParam, lParam = args[-1][1:4] if self.hPrev == wParam: # repair the chain self.hPrev = lParam if self.hPrev: # pass the message to the next window in chain win32api.SendMessage (self.hPrev, msg, wParam, lParam) def OnDrawClipboard(self, *args): msg, wParam, lParam = args[-1][1:4] if self.first: self.first = False else: self.l["text"] = "Lord be Praised" print paste() if self.hPrev: # pass the message to the next window in chain win32api.SendMessage (self.hPrev, msg, wParam, lParam) def OnDestroy(self): if self.hPrev: win32clipboard.ChangeClipboardChain(self.win.GetSafeHwnd(),self.hPrev) else: win32clipboard.ChangeClipboardChain(self.win.GetSafeHwnd(),0) if __name__ == "__main__": cr = ClipRecord() ___________________________________________________________ Yahoo! Answers - Got a question? Someone out there knows the answer. Try it now. http://uk.answers.yahoo.com/
-- http://mail.python.org/mailman/listinfo/python-list