我们从Python开源项目中,提取了以下31个代码示例,用于说明如何使用win32api.GetSystemMetrics()。
def prep_menu_icon(self, icon): # First load the icon. ico_x = win32api.GetSystemMetrics(win32con.SM_CXSMICON) ico_y = win32api.GetSystemMetrics(win32con.SM_CYSMICON) hicon = win32gui.LoadImage(0, icon, win32con.IMAGE_ICON, ico_x, ico_y, win32con.LR_LOADFROMFILE) hdcBitmap = win32gui.CreateCompatibleDC(0) hdcScreen = win32gui.GetDC(0) hbm = win32gui.CreateCompatibleBitmap(hdcScreen, ico_x, ico_y) hbmOld = win32gui.SelectObject(hdcBitmap, hbm) # Fill the background. brush = win32gui.GetSysColorBrush(win32con.COLOR_MENU) win32gui.FillRect(hdcBitmap, (0, 0, 16, 16), brush) # unclear if brush needs to be feed. Best clue I can find is: # "GetSysColorBrush returns a cached brush instead of allocating a new # one." - implies no DeleteObject # draw the icon win32gui.DrawIconEx(hdcBitmap, 0, 0, hicon, ico_x, ico_y, 0, 0, win32con.DI_NORMAL) win32gui.SelectObject(hdcBitmap, hbmOld) win32gui.DeleteDC(hdcBitmap) return hbm
def FillList(self): index = 0 size = self.GetWindowRect() width = size[2] - size[0] - (10) - win32api.GetSystemMetrics(win32con.SM_CXVSCROLL) numCols = len(self.colHeadings) for col in self.colHeadings: itemDetails = (commctrl.LVCFMT_LEFT, width/numCols, col, 0) self.itemsControl.InsertColumn(index, itemDetails) index = index + 1 index = 0 for items in self.items: index = self.itemsControl.InsertItem(index+1, str(items[0]), 0) for itemno in range(1,numCols): item = items[itemno] self.itemsControl.SetItemText(index, itemno, str(item))
def __init__(self, obj=None): if obj is None: obj = win32ui.CreateControlBar() window.Wnd.__init__(self, obj) self.dialog = None self.nDockBarID = 0 self.sizeMin = 32, 32 self.sizeHorz = 200, 200 self.sizeVert = 200, 200 self.sizeFloat = 200, 200 self.bTracking = 0 self.bInRecalcNC = 0 self.cxEdge = 6 self.cxBorder = 3 self.cxGripper = 20 self.brushBkgd = win32ui.CreateBrush() self.brushBkgd.CreateSolidBrush(win32api.GetSysColor(win32con.COLOR_BTNFACE)) # Support for diagonal resizing self.cyBorder = 3 self.cCaptionSize = win32api.GetSystemMetrics(win32con.SM_CYSMCAPTION) self.cMinWidth = win32api.GetSystemMetrics(win32con.SM_CXMIN) self.cMinHeight = win32api.GetSystemMetrics(win32con.SM_CYMIN) self.rectUndock = (0,0,0,0)
def grab_screen(region=None): hwin = win32gui.GetDesktopWindow() if region: left,top,x2,y2 = region width = x2 - left + 1 height = y2 - top + 1 else: width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN) top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN) hwindc = win32gui.GetWindowDC(hwin) srcdc = win32ui.CreateDCFromHandle(hwindc) memdc = srcdc.CreateCompatibleDC() bmp = win32ui.CreateBitmap() bmp.CreateCompatibleBitmap(srcdc, width, height) memdc.SelectObject(bmp) memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) signedIntsArray = bmp.GetBitmapBits(True) img = np.fromstring(signedIntsArray, dtype='uint8') img.shape = (height,width,4) srcdc.DeleteDC() memdc.DeleteDC() win32gui.ReleaseDC(hwin, hwindc) win32gui.DeleteObject(bmp.GetHandle()) return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
def grab_screen(region=None, title=None): hwin = win32gui.GetDesktopWindow() if region: left,top,x2,y2 = region width = x2 - left + 1 height = y2 - top + 1 elif title: gtawin = win32gui.FindWindow(None, title) if not gtawin: raise Exception('window title not found') #get the bounding box of the window left, top, x2, y2 = win32gui.GetWindowRect(gtawin) width = x2 - left +1 height = y2 - top +1 else: width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN) height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN) left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN) top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN) hwindc = win32gui.GetWindowDC(hwin) srcdc = win32ui.CreateDCFromHandle(hwindc) memdc = srcdc.CreateCompatibleDC() bmp = win32ui.CreateBitmap() bmp.CreateCompatibleBitmap(srcdc, width, height) memdc.SelectObject(bmp) memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY) signedIntsArray = bmp.GetBitmapBits(True) img = np.fromstring(signedIntsArray, dtype='uint8') img.shape = (height,width,4) srcdc.DeleteDC() memdc.DeleteDC() win32gui.ReleaseDC(hwin, hwindc) win32gui.DeleteObject(bmp.GetHandle()) return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
def get_screen_size(self): if os.name == 'posix': return Point(gtk.gdk.screen_width(), gtk.gdk.screen_height()) if os.name == 'nt': return Point(win32api.GetSystemMetrics(0), win32api.GetSystemMetrics(1))
def get_screen_size(self): if os.name == 'posix': self.rootwin = \ self.local_dpy.get_input_focus().focus.query_tree().root if self.rootwin == 0: self.rootwin = self.local_dpy.get_input_focus() return Point(self.rootwin.get_geometry().width, self.rootwin.get_geometry().height) if os.name == 'nt': return Point(win32api.GetSystemMetrics(0), win32api.GetSystemMetrics(1))
def _SetupList(self): child_style = win32con.WS_CHILD | win32con.WS_VISIBLE | win32con.WS_BORDER | win32con.WS_HSCROLL | win32con.WS_VSCROLL child_style |= commctrl.LVS_SINGLESEL | commctrl.LVS_SHOWSELALWAYS | commctrl.LVS_REPORT self.hwndList = win32gui.CreateWindow("SysListView32", None, child_style, 0, 0, 100, 100, self.hwnd, IDC_LISTBOX, self.hinst, None) child_ex_style = win32gui.SendMessage(self.hwndList, commctrl.LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0) child_ex_style |= commctrl.LVS_EX_FULLROWSELECT win32gui.SendMessage(self.hwndList, commctrl.LVM_SETEXTENDEDLISTVIEWSTYLE, 0, child_ex_style) # Add an image list - use the builtin shell folder icon - this # demonstrates the problem with alpha-blending of icons on XP if # winxpgui is not used in place of win32gui. il = win32gui.ImageList_Create( win32api.GetSystemMetrics(win32con.SM_CXSMICON), win32api.GetSystemMetrics(win32con.SM_CYSMICON), commctrl.ILC_COLOR32 | commctrl.ILC_MASK, 1, # initial size 0) # cGrow shell_dll = os.path.join(win32api.GetSystemDirectory(), "shell32.dll") large, small = win32gui.ExtractIconEx(shell_dll, 4, 1) win32gui.ImageList_ReplaceIcon(il, -1, small[0]) win32gui.DestroyIcon(small[0]) win32gui.DestroyIcon(large[0]) win32gui.SendMessage(self.hwndList, commctrl.LVM_SETIMAGELIST, commctrl.LVSIL_SMALL, il) # Setup the list control columns. lvc = LVCOLUMN(mask = commctrl.LVCF_FMT | commctrl.LVCF_WIDTH | commctrl.LVCF_TEXT | commctrl.LVCF_SUBITEM) lvc.fmt = commctrl.LVCFMT_LEFT lvc.iSubItem = 1 lvc.text = "Title" lvc.cx = 200 win32gui.SendMessage(self.hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam()) lvc.iSubItem = 0 lvc.text = "Order" lvc.cx = 50 win32gui.SendMessage(self.hwndList, commctrl.LVM_INSERTCOLUMN, 0, lvc.toparam()) win32gui.UpdateWindow(self.hwnd)
def OnInitDialog(self): self.editMenuCommand = self.GetDlgItem(win32ui.IDC_EDIT2) self.butNew = self.GetDlgItem(win32ui.IDC_BUTTON3) # Now hook the change notification messages for the edit controls. self.HookCommand(self.OnCommandEditControls, win32ui.IDC_EDIT1) self.HookCommand(self.OnCommandEditControls, win32ui.IDC_EDIT2) self.HookNotify(self.OnNotifyListControl, commctrl.LVN_ITEMCHANGED) self.HookNotify(self.OnNotifyListControlEndLabelEdit, commctrl.LVN_ENDLABELEDIT) # Hook the button clicks. self.HookCommand(self.OnButtonNew, win32ui.IDC_BUTTON3) # New Item self.HookCommand(self.OnButtonDelete, win32ui.IDC_BUTTON4) # Delete item self.HookCommand(self.OnButtonMove, win32ui.IDC_BUTTON1) # Move up self.HookCommand(self.OnButtonMove, win32ui.IDC_BUTTON2) # Move down # Setup the columns in the list control lc = self.GetDlgItem(win32ui.IDC_LIST1) rect = lc.GetWindowRect() cx = rect[2] - rect[0] colSize = cx/2 - win32api.GetSystemMetrics(win32con.SM_CXBORDER) - 1 item = commctrl.LVCFMT_LEFT, colSize, "Menu Text" lc.InsertColumn(0, item) item = commctrl.LVCFMT_LEFT, colSize, "Python Command" lc.InsertColumn(1, item) # Insert the existing tools menu itemNo = 0 for desc, cmd in LoadToolMenuItems(): lc.InsertItem(itemNo, desc) lc.SetItemText(itemNo, 1, cmd) itemNo = itemNo + 1 self.listControl = lc return dialog.PropertyPage.OnInitDialog(self)
def OnCreateClient( self, createparams, context ): borderX = win32api.GetSystemMetrics(win32con.SM_CXFRAME) borderY = win32api.GetSystemMetrics(win32con.SM_CYFRAME) titleY = win32api.GetSystemMetrics(win32con.SM_CYCAPTION) # includes border # try and maintain default window pos, else adjust if cant fit # get the main client window dimensions. mdiClient = win32ui.GetMainFrame().GetWindow(win32con.GW_CHILD) clientWindowRect=mdiClient.ScreenToClient(mdiClient.GetWindowRect()) clientWindowSize=(clientWindowRect[2]-clientWindowRect[0],clientWindowRect[3]-clientWindowRect[1]) left, top, right, bottom=mdiClient.ScreenToClient(self.GetWindowRect()) # width, height=context.doc.size[0], context.doc.size[1] # width = width+borderX*2 # height= height+titleY+borderY*2-1 # if (left+width)>clientWindowSize[0]: # left = clientWindowSize[0] - width # if left<0: # left = 0 # width = clientWindowSize[0] # if (top+height)>clientWindowSize[1]: # top = clientWindowSize[1] - height # if top<0: # top = 0 # height = clientWindowSize[1] # self.frame.MoveWindow((left, top, left+width, top+height),0) window.MDIChildWnd.OnCreateClient(self, createparams, context) return 1
def OnPaint(self): if not self.IsIconic(): return self._obj_.OnPaint() self.DefWindowProc(win32con.WM_ICONERASEBKGND, dc.GetHandleOutput(), 0) left, top, right, bottom = self.GetClientRect() left = (right - win32api.GetSystemMetrics(win32con.SM_CXICON)) >> 1 top = (bottom - win32api.GetSystemMetrics(win32con.SM_CYICON)) >> 1 hIcon = win32ui.GetApp().LoadIcon(self.iconId) self.GetDC().DrawIcon((left, top), hIcon) # Only needed to provide a minimized icon (and this seems # less important under win95/NT4
def get_screen_resolution(): """ Fetches the screen resolution in pixels. Returns: (int, int): (width, height) in pixels of screen size. """ return wa.GetSystemMetrics(0), wa.GetSystemMetrics(1)
def SetWinCenter(cls, whd): rect = WinUtil.GetCompRect(whd) left = (win32api.GetSystemMetrics(win32con.SM_CXFULLSCREEN)-(rect.right-rect.left))/2; top = (win32api.GetSystemMetrics(win32con.SM_CYFULLSCREEN)-(rect.bottom-rect.top))/2; #Move the window to the correct coordinates with SetWindowPos() cls.SetAsForegroundWindow(whd) win32gui.SetWindowPos(whd, win32con.HWND_TOPMOST, left, top,-1,-1, win32con.SWP_NOSIZE | win32con.SWP_NOZORDER); win32gui.SetWindowPos(whd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0, win32con.SWP_NOSIZE | win32con.SWP_NOMOVE);
def MouseMove(cls, x, y): sw = win32api.GetSystemMetrics(win32con.SM_CXSCREEN) sh = win32api.GetSystemMetrics(win32con.SM_CYSCREEN) nx = int(x * 65535 / sw) ny = int(y * 65535 / sh) win32api.mouse_event(win32con.MOUSEEVENTF_ABSOLUTE|win32con.MOUSEEVENTF_MOVE, nx, ny, 0, 0) time.sleep(GLB_SLEEP_TIME)
def enumHandler(hwnd, lParam): if win32gui.IsWindowVisible(hwnd): if 'WinGuake - Guake For Windows' in win32gui.GetWindowText(hwnd): m_width = win32api.GetSystemMetrics(0) m_length = win32api.GetSystemMetrics(1) w_width = int(m_width) w_length = int(m_length/2) win32gui.MoveWindow(hwnd, 0, 0, w_width, w_length, True)
def enumHandler(hwnd, lParam): if win32gui.IsWindowVisible(hwnd): if 'WinGuake' in win32gui.GetWindowText(hwnd): m_width = win32api.GetSystemMetrics(0) m_length = win32api.GetSystemMetrics(1) w_width = int(m_width) w_length = int(m_length/2) win32gui.MoveWindow(hwnd, 0, 0, w_width, w_length, True)
def enumHandler(hwnd, lParam): if win32gui.IsWindowVisible(hwnd): if 'WinGuake - Guake For Windows' in win32gui.GetWindowText(hwnd): m_width = GetSystemMetrics(0) m_length = GetSystemMetrics(1) w_width = int(m_width) w_length = int(m_length/2) win32gui.MoveWindow(hwnd, 0, 0, w_width, w_length, True)
def get_workarea_rect(): '''Get workarea RECT on primary disply''' rect = None for monitor in win32api.EnumDisplayMonitors(): monitor_info = win32api.GetMonitorInfo(monitor[0].handle) if monitor_info['Flags'] == win32con.MONITORINFOF_PRIMARY: rect = monitor_info['Work'] break if rect is None: # http://msdn.microsoft.com/en-us/library/windows/desktop/ms632680(v=vs.85).aspx w = win32api.GetSystemMetrics(win32con.SM_CXSCREEN) h = win32api.GetSystemMetrics(win32con.SM_CYSCREEN) return 0, 0, w, h return rect[0], rect[1], rect[2] - rect[0], rect[3] - rect[1]
def FX_GetScreenWidth(): return win32api.GetSystemMetrics(0)
def FX_GetScreenHeight(): return win32api.GetSystemMetrics(1)
def run(self, edit): global websocketHandler #return if websocketHandler.ready is False: sublime.error_message("InstaGoogling: No connection ready! " + DEFAULT_ERROR_ADVICE) return selected_text = "" for region in self.view.sel(): if not region.empty(): # Get the selected text selected_text = self.view.substr(region) lang = re.search('(?<=source\.)[^. ]+', self.view.scope_name(region.a)) if lang != None: selected_text += " " + lang.group(0) x, y = self.view.text_to_layout(self.view.visible_region().a) offsetx, offsety = self.view.window_to_layout((0,0)) view_width, view_height = self.view.viewport_extent() x -= offsetx y -= offsety w = int(round(view_width * 0.5)) h = view_height + 10 if w > 540: w = 540 x += view_width - w # y += 3 hwnd = self.view.window().hwnd() style = win32api.GetWindowLong(hwnd , win32con.GWL_STYLE) if style & win32con.WS_CAPTION != 0: y += 22 if self.view.window().is_menu_visible(): y += 20 # Lets just offset from the right edge of the screen instead if isWindows: from win32api import GetSystemMetrics screenWidth = GetSystemMetrics(0) # 20 so scroll bar is still visible x = screenWidth - w - 15 msg = { "request": "open", "position": {"x": x, "y": y}, "size": {"width": w, "height": h}, "search": selected_text } jsonmsg = json.dumps(msg) websocketHandler.sendMessage(jsonmsg) print("Sending JSON message") setSettingIsOpen(True)