def wnd_proc(self, hwnd, message, wParam, lParam): # wmca MFC 콜백 처리 # if wParam == CA_DISCONNECTED: # print("Goodbye")/ # win32gui.PostQuitMessage(0) # win32gui.DestroyWindow(self.hwnd) # el if wParam == CA_CONNECTED: # 로그인 성공 print("로그인 성공") # self.response.append({"login": "******"}) win32gui.PostQuitMessage( 0) # mfc 메시지 루프 종료 (메시지를 받고 종료 처리 뒷 프로세스 실행을 위함) elif wParam == CA_SOCKETERROR: # 통신 오류 발생 print("통신 오류 발생") elif wParam == CA_RECEIVEDATA: # 서비스 응답 수신(TR) print("서비스 응답 수신(TR)") sz_block_name, sz_block_data = self.on_wm_receivedata(lParam) self.response[sz_block_name] = sz_block_data elif wParam == CA_RECEIVESISE: # 실시간 데이터 수신(BC) print("실시간 데이터 수신(BC)") self.response['realtime'] = self.on_wm_receivesise(lParam) elif wParam == CA_RECEIVEMESSAGE: # 상태 메시지 수신 (입력값이 잘못되었을 경우 문자열형태로 설명이 수신됨) msg_cd, user_msg = self.on_wm_receivemessage(lParam) self.response[msg_cd] = user_msg win32gui.PostQuitMessage(0) elif wParam == CA_RECEIVECOMPLETE: # 서비스 처리 완료 print("서비스 처리 완료") win32gui.PostQuitMessage( 0) # mfc 메시지 루프 종료 (메시지를 받고 종료 처리 뒷 프로세스 실행을 위함) elif wParam == CA_RECEIVEERROR: # 서비스 처리중 오류 발생 (입력값 오류등) print("서비스 처리중 오류 발생 (입력값 오류등)") return win32gui.DefWindowProc(hwnd, message, wParam, lParam)
def BGWndProc(self,hwnd,msg,wParam,lParam): if msg == win32con.WM_PAINT: #print('BG painting...%d...'%wParam) hdc,ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) # win32gui.Rectangle(hdc,min(xc),min(yc),max(xc),max(yc)) # win32gui.Ellipse(hdc,300+wParam,550,400+wParam,650) DFW.OnChange(mode='RandomMove') #self.hdcbuffer = win32gui.CreateCompatibleDC(hdc) #hBitMap = win32gui.CreateCompatibleBitmap(hdc, 1920, 1080) ###win32gui.ReleaseDC(hwnd, hdc) #win32gui.SelectObject(self.hdcbuffer, hBitMap) #win32gui.PatBlt(self.hdcbuffer, 0, 0, 1920, 1080, win32con.WHITENESS) #win32gui.SetBkMode(hdc,win32con.TRANSPARENT) for index in range(len(DFW.Words)): rect = (int(DFW.Coors[index][0]),int(DFW.Coors[index][1]),1920,1080) win32gui.DrawText(hdc,'%s,%d'%(DFW.Words[index],wParam), len('%s'%(DFW.Words[index])),rect,win32con.DT_SINGLELINE|win32con.DT_TOP|win32con.DT_LEFT) #win32gui.BitBlt(hdc, 0, 0, 1920, 1080, self.hdcbuffer, 0, 0, win32con.SRCCOPY ) win32gui.EndPaint(hwnd,ps) elif msg == win32con.WM_DESTROY: win32gui.PostQuitMessage(0) elif msg == win32con.WM_TIMER: #print("BG TIMER TRIGGERED",wParam) win32gui.InvalidateRect(hwnd,None,True) win32gui.UpdateWindow(hwnd) else: pass #print('BG:其他信息:',msg) return win32gui.DefWindowProc(hwnd,msg,wParam,lParam)
def onDeviceChange(self, hwnd, msg, wparam, lparam): # # WM_DEVICECHANGE: # wParam - type of change: arrival, removal etc. # lParam - what's changed? # if it's a volume then... # lParam - what's changed more exactly # global DRIVE dev_broadcast_hdr = DEV_BROADCAST_HDR.from_address(lparam) if wparam == DBT_DEVICEARRIVAL: #print("Something's arrived") if dev_broadcast_hdr.dbch_devicetype == DBT_DEVTYP_VOLUME: #print("It's a volume!") dev_broadcast_volume = DEV_BROADCAST_VOLUME.from_address(lparam) #if dev_broadcast_volume.dbcv_flags & DBTF_MEDIA: if DBTF_MEDIA: #print("with some media") drive_letter = drive_from_mask(dev_broadcast_volume.dbcv_unitmask) DRIVE = os.path.normpath(chr(ord("A") + drive_letter) + ':/') print("Drive", DRIVE, "inserted") Notification.yesDevice.set() if wparam == DBT_DEVICEREMOVECOMPLETE: DRIVE = None print("Safe to remove drive") if (Notification.stopThread.is_set()): win32gui.PostQuitMessage(0) return #print ("Drive ", chr(ord("A") + drive_letter, " being ejected!")); return 1
def wndProc(hWnd, message, wParam, lParam): if message == win32con.WM_PAINT: hDC, paintStruct = win32gui.BeginPaint(hWnd) rect = win32gui.GetClientRect(hWnd) win32gui.DrawText( hDC, 'Hello send by Python via Win32!', -1, rect, win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER) win32gui.EndPaint(hWnd, paintStruct) return 0 elif message == win32con.WM_DESTROY: print('Being destroyed') win32gui.PostQuitMessage(0) return 0 elif message == FullGenMessage: print("Founded new message from FullGen") print(wParam) print(lParam) return 0 else: return win32gui.DefWindowProc(hWnd, message, wParam, lParam)
def _win_message(self, hWnd, message, wParam, lParam): if message == win32_contants.WM_PAINT: device_context_handle, paintStruct = win32gui.BeginPaint(hWnd) dpiScale = ctypes.windll.gdi32.GetDeviceCaps( device_context_handle, win32_contants.LOGPIXELSX) / 60.0 fontSize = 14 # http://msdn.microsoft.com/en-us/library/windows/desktop/dd145037(v=vs.85).aspx lf = win32gui.LOGFONT() lf.lfFaceName = "Times New Roman" # lf.lfHeight = int(round(dpiScale * fontSize)) lf.lfHeight = 20 lf.lfWeight = 0 # Use nonantialiased to remove the white edges around the text. lf.lfQuality = win32con.NONANTIALIASED_QUALITY hf = win32gui.CreateFontIndirect(lf) win32gui.SetTextColor(device_context_handle, win32_color(self.font_color)) win32gui.SelectObject(device_context_handle, hf) self._draw(device_context_handle) win32gui.EndPaint(hWnd, paintStruct) return 0 elif message == win32_contants.WM_DESTROY: win32gui.PostQuitMessage(0) return 0 else: return ctypes.windll.user32.DefWindowProcW(hWnd, message, wParam, lParam)
def close(self): if not self._hwnd: return win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, (self._hwnd, 0)) win32gui.DestroyWindow(self._hwnd) win32gui.PostQuitMessage(0) self._hwnd = None
def OnDestroy(self, hwnd, msg, wparam, lparam): print("tearing down ExplorerBrowser...") self.eb.Unadvise(self.event_cookie) self.eb.Destroy() self.eb = None print("shutting down app...") win32gui.PostQuitMessage(0)
def WndProc(hwnd, msg, wParam, lParam): if msg == WM_PAINT: hdc, ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) _str = u'请把【星任务】文件拖拽到这!' win32gui.DrawText(hdc, _str, len(_str) * 2, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) win32gui.EndPaint(hwnd, ps) win32gui.DragAcceptFiles(hwnd, 1) elif msg == WM_DESTROY: win32gui.PostQuitMessage(0) elif msg == WM_DROPFILES: hDropInfo = wParam filescount = win32api.DragQueryFile(hDropInfo) for i in range(filescount): filename = win32api.DragQueryFile(hDropInfo, i) if os.path.isdir(filename): _files = scan_files(filename) else: _files = [filename] if len(_files) > 0: for _f in _files: fileHandler(_f) win32api.DragFinish(hDropInfo) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
def wndProc(self, hwnd, msg, wParam, lParam): """ 消息处理 :param hwnd: :param msg: :param wParam: :param lParam: :return: """ if msg == win32con.WM_PAINT: hdc, ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) win32gui.DrawText( hdc, 'GUI Python', len('GUI Python'), rect, win32con.DT_SINGLELINE | win32con.DT_CENTER | win32con.DT_VCENTER) win32gui.EndPaint(hwnd, ps) if msg == win32con.WM_CREATE: print('message: WM_CREATE') if msg == win32con.WM_SIZE: print('message: WM_SIZE') if msg == win32con.WM_PAINT: print('message: WM_PAINT') if msg == 1280: print("message: 1280") if msg == win32con.WM_CLOSE: print('message: WM_CLOSE') if msg == win32con.WM_DESTROY: print('message: WM_DESTROY') win32gui.PostQuitMessage(0) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
def OnDestroy(self, hwnd, msg, wparam, lparam): nid = (self.hwnd, 0) #tuple of our window's handle and zero(?) # implements our settings and deletes (win32gui.NIM_DELETE) # our window (nid) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app. self.CLstate = -1
def WndProc(hwnd, msg, wParam, lParam): """ 视窗处理 :param hwnd: 句柄 :param msg: 消息 :param wParam: 参数1 :param lParam: 参数2 :return: 下一个消息处理器 """ if msg == WM_PAINT: hdc, ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) _str = u'请把【项目经理:日报】文件拖拽到这!' win32gui.DrawText(hdc, _str, len(_str) * 2 - 4, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) win32gui.EndPaint(hwnd, ps) win32gui.DragAcceptFiles(hwnd, 1) elif msg == WM_DESTROY: win32gui.PostQuitMessage(0) elif msg == WM_DROPFILES: """文件拖拉消息 """ hDropInfo = wParam filescount = win32api.DragQueryFile(hDropInfo) for i in range(filescount): """获取文件名""" filename = win32api.DragQueryFile(hDropInfo, i) """处理文件""" fileHandler(hwnd, filename) win32api.DragFinish(hDropInfo) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
def OnDestroy(self, hwnd, msg, wparam, lparam): nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app.
def WndProc(hwnd, msg, wParam, lParam): if msg == WM_PAINT: hdc, ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) _str = u'请把【工作日志】目录拖拽到这!' win32gui.DrawText(hdc, _str, len(_str) * 2, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) win32gui.EndPaint(hwnd, ps) win32gui.DragAcceptFiles(hwnd, 1) elif msg == WM_DESTROY: win32gui.PostQuitMessage(0) elif msg == WM_DROPFILES: hDropInfo = wParam filescount = win32api.DragQueryFile(hDropInfo) for i in range(filescount): filename = win32api.DragQueryFile(hDropInfo, i) files = get_files_list(filename) for _f in files: if not isSpecialDir(_f): fileHandler(_f) win32api.DragFinish(hDropInfo) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
def wndProc(hWnd, message, wParam, lParam): if message == win32con.WM_PAINT: hdc, paintStruct = win32gui.BeginPaint(hWnd) dpiScale = win32ui.GetDeviceCaps(hdc, win32con.LOGPIXELSX) / 60.0 fontSize = 18 lf = win32gui.LOGFONT() lf.lfFaceName = "Comic Sans" lf.lfHeight = int(round(dpiScale * fontSize)) hf = win32gui.CreateFontIndirect(lf) win32gui.SelectObject(hdc, hf) rect = win32gui.GetClientRect(hWnd) win32gui.DrawText( hdc, windowText, -1, rect, win32con.DT_LEFT | win32con.DT_BOTTOM | win32con.DT_SINGLELINE) win32gui.EndPaint(hWnd, paintStruct) return 0 elif message == win32con.WM_DESTROY: print('Being destroyed') win32gui.PostQuitMessage(0) return 0 else: return win32gui.DefWindowProc(hWnd, message, wParam, lParam) calrect = win32gui.DrawText(hdc, text, -1, rect, textformat | win32con.DT_CALCRECT) rect.top = rect.bottom - calcrect.bottom win32gui.DrawText(hDC, text, -1, rect, textformat)
def OnDestroy(self, hwnd, msg, wparam, lparam): if DEBUG: print(sys._getframe(0).f_code.co_name) nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app.
def onTimer(self, hwnd, msg, wparam, lparam): #print (msg, wparam, lparam) if wparam == self.ID_TIMER or wparam == self.ID_TIMER_FIRST_ONCE: user32.KillTimer(hwnd, wparam) try: if not self.tray_ctrl_Q.empty(): ctrl_msg = self.tray_ctrl_Q.get_nowait() if ctrl_msg[0] == 'QUIT': if self.on_quit: self.on_quit(self) win32gui.PostQuitMessage(0) # Terminate the app. return if wparam == self.ID_TIMER_EXTERN: if self.__extern_timer_callback: self.__extern_timer_cnt = self.__extern_timer_callback( lparam, self.__extern_timer_cnt) elif wparam == self.ID_TIMER_FIRST_ONCE: self._ports_change_count = 0 self._ipaddr_change_count = 0 self._on_ports_change('IPADDR') self._on_ports_change('ARRIVAL') elif wparam == self.ID_TIMER: if self._ports_change_count > 0: self._ports_change_count = 0 self._on_ports_change(self._ports_change_type) if self._ipaddr_change_count > 0: self._ipaddr_change_count = 0 self._on_ports_change('IPADDR') except Exception as e: print('get ctrl_msg exception %s' % e) pass
def wndProc_edge(self, hWnd, message, wParam, lParam): if message == win32con.WM_PAINT: hdc, paintStruct = win32gui.BeginPaint(hWnd) dpiScale = win32ui.GetDeviceCaps(hdc, win32con.LOGPIXELSX) / 60.0 fontSize = self.fontSize + 12 win32gui.SetTextColor(hdc, self.color_edge) # https://msdn.microsoft.com/en-us/library/windows/desktop/dd145037(v=vs.85).aspx lf = win32gui.LOGFONT() lf.lfFaceName = "微軟正黑體" lf.lfHeight = int(round(dpiScale * fontSize)) lf.lfWeight = 700 # Use nonantialiased to remove the white edges around the text. lf.lfQuality = win32con.NONANTIALIASED_QUALITY hf = win32gui.CreateFontIndirect(lf) win32gui.SelectObject(hdc, hf) rect = win32gui.GetClientRect(hWnd) # https://msdn.microsoft.com/en-us/library/windows/desktop/dd162498(v=vs.85).aspx win32gui.DrawTextW( hdc, self.text, -1, rect, win32con.DT_CENTER | win32con.DT_NOCLIP | win32con.DT_SINGLELINE | win32con.DT_VCENTER) win32gui.EndPaint(hWnd, paintStruct) return 0 elif message == win32con.WM_DESTROY: # print('Closing the window.') win32gui.PostQuitMessage(0) return 0 else: return win32gui.DefWindowProc(hWnd, message, wParam, lParam)
def wndProc(hWnd, message, wParam, lParam): if not hasattr(wndProc, 'cxClient'): wndProc.cxClient = 0 wndProc.cyClient = 0 if message == win32con.WM_SIZE: wndProc.cxClient = win32gui.LOWORD(lParam) # 附加参数的低位字保存窗口的宽度 wndProc.cyClient = win32gui.HIWORD(lParam) # 附加参数的高位字保存窗口的高度 if message == win32con.WM_PAINT: hdc, paintStruct = win32gui.BeginPaint(hWnd) # 获取窗口的dc和窗口客户区所需要的信息的结构 win32gui.MoveToEx(hdc, 0, int(wndProc.cyClient / 2)) # 移动到直线的起始点,这里比win32 API少了最后一个参数 win32gui.LineTo(hdc, wndProc.cxClient, int(wndProc.cyClient / 2)) # 画出直线 vertices = list() # 定义一个列表用来存储点,形式为[x,y]的形式 point = list() # 定义一个列表用来存储一系列作图的点 for i in range(NUM): vertices = [] vertices.append(int(i * wndProc.cxClient / NUM)) # 计算出x坐标 vertices.append( int(wndProc.cyClient / 2 * (1 - math.sin(2 * math.pi * i / NUM)))) # 计算出y坐标 point.append(tuple(vertices)) # 将点添加到列表当中 win32gui.Polyline(hdc, point) # 画出正弦图像 win32gui.EndPaint(hWnd, paintStruct) # 关闭dc return 0 if message == win32con.WM_DESTROY: win32gui.PostQuitMessage(0) # 发送消息,退出窗口的进程 return 0 else: return win32gui.DefWindowProc(hWnd, message, wParam, lParam) # 其他消息路由给操作系统处理
def end(self): self.hm.UnhookKeyboard() self.GUI_q.put(0, block=False) self.WC.end() # It is important that this is only called by KbH's thread. win32gui.PostQuitMessage(1)
def window_callback(self, hwnd, nMsg, wParam, lParam): if nMsg == win32con.WM_CLOSE: log.debug('WM_CLOSE') win32gui.DestroyWindow(hwnd) elif nMsg == win32con.WM_DESTROY: log.debug('WM_DESTROY') win32gui.PostQuitMessage(0) elif nMsg == win32con.WM_DEVICECHANGE: log.debug('WM_DEVICECHANGE') if wParam in [ win32con.DBT_DEVICEARRIVAL, win32con.DBT_DEVICEREMOVECOMPLETE ]: # Unpack the 'lp' into the appropriate DEV_BROADCAST_* structure, # using the self-identifying data inside the DEV_BROADCAST_HDR. try: info = win32gui_struct.UnpackDEV_BROADCAST(lParam) except NotImplementedError: info = None log.debug( "Device change notification: nMsg=%s, wParam=%s, info=%s:" % (nMsg, wParam, str(info))) inserted = True if wParam == win32con.DBT_DEVICEARRIVAL else False self._cbk(inserted, info) return True else: log.debug('other message nMsg = %d' % nMsg) return win32gui.DefWindowProc(hwnd, nMsg, wParam, lParam)
def test_js_run_py(**kwargs): es = kwargs['es'] param = kwargs['param'] arg_count = jsrunpy.mb.jsArgCount(es) val_ls = jsrunpy.get_js_args_val(es, arg_count) print(val_ls, 'test_js_run_py') hwnd = param if val_ls[0] == 'move': user32.ReleaseCapture() user32.SendMessageW(hwnd, 161, 2, 0) elif val_ls[0] == 'close': win32gui.PostQuitMessage(0) elif val_ls[0] == 'max': ismax = user32.IsZoomed(hwnd) if ismax == 0: user32.ShowWindow(hwnd, 3) elif ismax == 1: user32.ShowWindow(hwnd, 1) elif val_ls[0] == 'min': user32.ShowWindow(hwnd, 2) elif val_ls[0] == 'menu': return jsrunpy.to_js_args_val(es, 'click-menu') elif val_ls[0] == 'loadurl': pyrunjs.run_js(webview, 'alert("create new window")') wke2 = mbpython(mb) j_webview = wke2.window.wkeCreateWebWindow(0, 0, 0, 0, 360, 480) wke2.network.wkeLoadURLW(j_webview, 'https://www.baidu.com/') wke2.window.wkeShowWindow(j_webview) return 0
def destroy(self, hwnd, msg, wparam, lparam): print("destroy--->") if self.on_quit: self.on_quit(self) nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app. print("<----destroy")
def OnDestroy(self, hwnd, msg, wparam, lparam): nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) self._Terminate() win32event.ReleaseMutex(self._hActiveMutex) win32api.CloseHandle(self._hActiveMutex) # Terminate the app. win32gui.PostQuitMessage(0)
def exit(self): self.hm.UnhookKeyboard() #stop listening to keypresses print("exiting, storing information\n") print("Moved: ", self.iSession, " times") with open(r'./test.txt', 'w+') as store: store.write(f"{self.iTotal}") win32gui.PostQuitMessage(0) #breaks loop self.master.destroy()
def destroy(self, hwnd, msg, wparam, lparam): if DEBUG: print(sys._getframe(0).f_code.co_name) if self.on_quit: self.on_quit(self) #运行传递的on_quit nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # 退出托盘图标
def destroy(self, hwnd, msg, wparam, lparam): # 运行传递的on_quit if self.on_quit: self.on_quit(self) # 退出托盘图标 nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0)
def destroy(self, hwnd, msg, wparam, lparam): nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) if self.on_quit: self.on_quit(self) os._exit(0) sys.exit(0)
def destroy(s, hwnd=None, msg=None, wparam=None, lparam=None, exit=1): nid = (s.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # 终止应用程序。 if exit and s.on_quit: s.on_quit() # 需要传递自身过去时用 s.on_quit(s) else: s.root.deiconify() # 显示tk窗口
def WndProc(self, hWnd, message, wParam, lParam): if message == WM_WTSSESSION_CHANGE: self.OnSession(wParam, lParam) elif message == con.WM_CLOSE: gui.DestroyWindow(hWnd) elif message == con.WM_DESTROY: gui.PostQuitMessage(0) elif message == con.WM_QUERYENDSESSION: return True
def WndProc(hwnd, msg, wParam, lParam): if msg == WM_PAINT: hdc, ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) win32gui.DrawText(hdc, 'GUI Python', len('GUI Python'), rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) win32gui.EndPaint(hwnd, ps) if msg == WM_DESTROY: win32gui.PostQuitMessage(0) return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)