def Run(self, hwnd, *flags, **kwargs): self._dlgs_lastImageIndex = None self._dlgs_fHook = False shb=BROWSEINFO() for i in flags: if i=='hook': self._dlgs_fHook = True try: shb.ulFlags |= BF_FLAGS[i] except: raise "invalid flag: %s" % i shb.hwndOwner=hwnd and hwnd or 0 shb.lpszTitle = kwargs.get('title', '') shb.pidlRoot= kwargs.get('root', PIDL()) shb.lpfn=self._dlgs_pBffCallBack ## not very usefull. Holds the displayname of the ## folder selected on return p = create_string_buffer(260) # MAX_PATH shb.pszDisplayName = addressof(p) result=shell32.SHBrowseForFolder(byref(shb)) self.Hwnd=0 if result: self._dlgs_lastImageIndex = shb.iImage pIdl=pointer(ITEMIDLIST.from_address(result)) return pIdl return None
def Run(self, show="normal"): try: show = ["hidden", "normal", "minimized", "maximized"].index(show) except: try: range(4)[show] except: raise ValueError, "invalid flag: %s" % show # run the messageloop self._base_fIsopen = True self.onMSG(self.Hwnd, "create", 0, 0) # looks like take it out user32.ShowWindow(self.Hwnd, show) user32.UpdateWindow(self.Hwnd) GM, TM, DM, TACC = ( user32.GetMessageA, user32.TranslateMessage, user32.DispatchMessageA, user32.TranslateAcceleratorA, ) msg = MSG() pMsg = pointer(msg) if self.GetStyleL("basestyle") & self.Style.WS_BASE_DIALOGLIKE: IsDialogMessage = user32.IsDialogMessageA # # TODO # # would be better to call when all childwindows have been created # but thats a thing we don't know # needs some heavier testing, we'll see # self.onMSG(self.Hwnd, "open", 0, 0) _exit.Unregister(self.Hwnd) while GM(pMsg, 0, 0, 0) > 0: if not IsDialogMessage(self._base_hwndDlgMsg, pMsg): if self._base_hAccelerator: if not TACC(self.Hwnd, self._base_hAccelerator, pMsg): TM(pMsg) else: TM(pMsg) DM(pMsg) else: self.onMSG(self.Hwnd, "open", 0, 0) _exit.Unregister(self.Hwnd) while GM(pMsg, 0, 0, 0) > 0: if self._base_hAccelerator: if not TACC(self.Hwnd, self._base_hAccelerator, pMsg): TM(pMsg) else: TM(pMsg) DM(pMsg)
def Run(self, show='normal'): try: show=['hidden','normal', 'minimized','maximized'].index(show) except: try: range(4)[show] except: raise ValueError, "invalid flag: %s" % show # run the messageloop self._base_fIsopen= True self.onMSG(self.Hwnd, "create", 0, 0) # looks like take it out user32.ShowWindow(self.Hwnd, show) user32.UpdateWindow(self.Hwnd) GM, TM, DM, TACC=(user32.GetMessageA, user32.TranslateMessage, user32.DispatchMessageA, user32.TranslateAcceleratorA) msg = MSG() pMsg = pointer(msg) if self.GetStyleL('basestyle') & self.Style.WS_BASE_DIALOGLIKE: IsDialogMessage=user32.IsDialogMessageA # # TODO # # would be better to call when all childwindows have been created # but thats a thing we don't know # needs some heavier testing, we'll see # self.onMSG(self.Hwnd, "open", 0, 0) _exit.Unregister(self.Hwnd) while GM( pMsg, 0, 0, 0) > 0: if not IsDialogMessage(self._base_hwndDlgMsg, pMsg): if self._base_hAccelerator: if not TACC(self.Hwnd, self._base_hAccelerator, pMsg): TM(pMsg) else: TM(pMsg) DM(pMsg) else: self.onMSG(self.Hwnd, "open", 0, 0) _exit.Unregister(self.Hwnd) while GM( pMsg, 0, 0, 0) > 0: if self._base_hAccelerator: if not TACC(self.Hwnd, self._base_hAccelerator, pMsg): TM(pMsg) else: TM(pMsg) DM(pMsg)
def _BffCallBack(self, hwnd, msg, wp, lp): if msg==BFFM_INITIALIZED: self.Hwnd = hwnd if self._dlgs_fHook: self._dlgs_pOldProc = user32.SetWindowLongA(hwnd, -4, self.GetDlgProc()) self.onINIT(hwnd, msg, wp, lp) elif msg==BFFM_SELCHANGED: pIdl= pointer(ITEMIDLIST.from_address(wp)) ## passes IDL in wp try: self.onMSG(hwnd, "bff_selchanged", pIdl, 0) finally: Malloc.Free(pIdl) elif msg==BFFM_VALIDATEFAILEDA: result=self.onMSG(hwnd, "bff_validatefailed", c_char_p(wp).value, 0) if result==False: return 1 return 0 return 0
def Run(self): if self.Hwnd: raise RuntimeError, "property sheet is alreaddy created" if not self._client_pages: raise RuntimeError, "property sheet must have at least one page" self._client_p.nPages = len(self._client_pages) arr = (PROPSHEETPAGE * self._client_p.nPages)(*self._client_pages) self._client_p.u3.ppsp = pointer(arr[0]) result = comctl32.PropertySheetA(byref(self._client_p)) if self._client_mode == 'modeless': if result == ID_PSRESTARTWINDOWS: return 'restart' elif result == ID_PSREBOOTSYSTEM: return 'reboot' elif result: return 'ok' return 'cancel' else: if result: return result
def Run(self): if self.Hwnd: raise RuntimeError, "property sheet is alreaddy created" if not self._client_pages: raise RuntimeError, "property sheet must have at least one page" self._client_p.nPages = len(self._client_pages) arr= (PROPSHEETPAGE*self._client_p.nPages)(*self._client_pages) self._client_p.u3.ppsp= pointer(arr[0]) result= comctl32.PropertySheetA(byref(self._client_p)) if self._client_mode=='modeless': if result==ID_PSRESTARTWINDOWS: return 'restart' elif result==ID_PSREBOOTSYSTEM: return 'reboot' elif result: return 'ok' return 'cancel' else: if result: return result
def GetLayout(self, Rect): wp= WINDOWPOS() lo= HDLAYOUT(pointer(Rect), pointer(wp)) if self.SendMessage(self.Hwnd, self.Msg.HDM_LAYOUT, 0, byref(lo)): return RECT(wp.x, wp.y, wp.cx, wp.cy) raise RuntimeError("could not retrieve header layout")