def send_to_r(cmd): rid = win32gui.FindWindow("Rgui", None) if not rid: rid = win32gui.FindWindow("Rgui Workspace", None) if rid: clipboard.set_clipboard(cmd + "\n") menuitems = win32gui.GetMenu(rid) buf, extras = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(menuitems, 0, True, buf) if win32gui_struct.UnpackMENUITEMINFO(buf).text == "": editid = 2 else: editid = 1 buf, extras = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(menuitems, editid, True, buf) editmenu = win32gui_struct.UnpackMENUITEMINFO(buf).hSubMenu buf, extras = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(editmenu, 1, True, buf) pasteid = win32gui_struct.UnpackMENUITEMINFO(buf).wID win32api.PostMessage(rid, win32con.WM_SETFOCUS, pasteid, 0) sublime.set_timeout( lambda: win32api.PostMessage(rid, win32con.WM_COMMAND, pasteid, 0), 50) clipboard.reset_clipboard()
def testEmptyMenuItemInfo(self): mii, extra = win32gui_struct.EmptyMENUITEMINFO() ( fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked, dwItemData, text, hbmpItem, ) = win32gui_struct.UnpackMENUITEMINFO(mii) self.failUnlessEqual(fType, 0) self.failUnlessEqual(fState, 0) self.failUnlessEqual(wID, 0) self.failUnlessEqual(hSubMenu, 0) self.failUnlessEqual(hbmpChecked, 0) self.failUnlessEqual(hbmpUnchecked, 0) self.failUnlessEqual(dwItemData, 0) self.failUnlessEqual(hbmpItem, 0) # it's not clear if UnpackMENUITEMINFO() should ignore cch, instead # assuming it is a buffer size rather than 'current length' - but it # never has (and this gives us every \0 in the string), and actually # helps us test the unicode/str semantics. self.failUnlessEqual(text, "\0" * len(text))
def get_menu_item_txt(menu, idx): import win32gui_struct mii, extra = win32gui_struct.EmptyMENUITEMINFO() # 新建一个win32gui的空的结构体mii win32gui.GetMenuItemInfo(menu, idx, True, mii) ftype, fstate, wid, hsubmenu, hbmpchecked, hbmpunchecked,\ dwitemdata, text, hbmpitem = win32gui_struct.UnpackMENUITEMINFO(mii) # 解包mii return text
def _read_item(self): """Read the menu item info See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/resources/menus/menureference/menufunctions/getmenuiteminfo.asp for more information.""" item_info = MenuItemInfo() buf, extras = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(self.menu.handle, self.index, True, buf) item_info.fType, item_info.fState, item_info.wID, item_info.hSubMenu, item_info.hbmpChecked, \ item_info.hbmpUnchecked, item_info.dwItemData, item_info.text, item_info.hbmpItem = win32gui_struct.UnpackMENUITEMINFO(buf) if six.PY2: item_info.text = item_info.text.decode( locale.getpreferredencoding()) # OWNERDRAW case try to get string from BCMenu if item_info.fType & 256 and not item_info.text: mem = RemoteMemoryBlock(self.ctrl) address = item_info.dwItemData s = win32structures.LPWSTR() mem.Read(s, address) address = s s = ctypes.create_unicode_buffer(100) try: mem.Read(s, address) item_info.text = s.value except Exception: item_info.text = '!! non-supported owner drawn item !!' # TODO: look into Tkinter case del mem return item_info
def GetMenuItemString(idx): hwnd = win32gui.FindWindow("#32768", None) MN_GETHMENU = 0x01E1 hmenu = win32gui.SendMessage(hwnd, MN_GETHMENU, 0, 0) mii, extra = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(hmenu, idx, True, mii) fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked,\ dwItemData, text, hbmpItem = win32gui_struct.UnpackMENUITEMINFO(mii) print text return text
def _MergeMenus(self, activate_state): # Merge the operations we support into the top-level menus. # NOTE: This function it *not* called each time the selection changes. # SVUIA_ACTIVATE_FOCUS really means "have a selection?" have_sel = activate_state == shellcon.SVUIA_ACTIVATE_FOCUS # only do "file" menu here, and only 1 item on it! mid = shellcon.FCIDM_MENU_FILE # Get the hmenu for the menu buf, extras = win32gui_struct.EmptyMENUITEMINFO(win32con.MIIM_SUBMENU) win32gui.GetMenuItemInfo(self.hmenu, mid, False, buf) data = win32gui_struct.UnpackMENUITEMINFO(buf) submenu = data[3] print("Do someting with the file menu!")
def _read_item(self): """Read the menu item info See https://msdn.microsoft.com/en-us/library/windows/desktop/ms647980.aspx for more information. """ item_info = MenuItemInfo() buf, extras = win32gui_struct.EmptyMENUITEMINFO() win32gui.GetMenuItemInfo(self.menu.handle, self._index, True, buf) item_info.fType, item_info.fState, item_info.wID, item_info.hSubMenu, \ item_info.hbmpChecked, item_info.hbmpUnchecked, item_info.dwItemData, \ item_info.text, item_info.hbmpItem = win32gui_struct.UnpackMENUITEMINFO(buf) return item_info
def get_menu_item_txt(self, menu, idx): """ 获取当前句柄窗口所有子窗口的句柄与名字 :param menu: :param idx: :return: """ mii, extra = win32gui_struct.EmptyMENUITEMINFO( ) # 新建一个win32gui的空的结构体mii GetMenuItemInfo(menu, idx, True, mii) # 将子菜单内容获取到mii ftype, fstate, wid, hsubmenu, hbmpchecked, hbmpunchecked, \ dwitemdata, text, hbmpitem = win32gui_struct.UnpackMENUITEMINFO(mii) # 解包mii return text
def testEmptyMenuItemInfo(self): mii, extra = win32gui_struct.EmptyMENUITEMINFO() fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked, \ dwItemData, text, hbmpItem = win32gui_struct.UnpackMENUITEMINFO( mii) assert fType == 0 assert fState == 0 assert wID == 0 assert hSubMenu == 0 assert hbmpChecked == 0 assert hbmpUnchecked == 0 assert dwItemData == 0 assert hbmpItem == 0 # it's not clear if UnpackMENUITEMINFO() should ignore cch, instead # assuming it is a buffer size rather than 'current length' - but it # never has (and this gives us every \0 in the string), and actually # helps us test the unicode/str semantics. assert text == '\0' * len(text)
print("2. window text : ", win32gui.GetWindowText(window )) print("3. hwnd text : ", win32gui.GetWindowText(hwnd )) print("4. parent text : ", win32gui.GetWindowText(parent )) print("5. child text : ", win32gui.GetWindowText(childwindow )) print("6. active text : ", win32gui.GetWindowText(active )) print("7. focus text : ", win32gui.GetWindowText(focus )) print("8. getMenu text : ", win32gui.GetWindowText(menu )) #print("9. CursorIntext : ", win32gui.GetWindowText(cursorinfo )) print("10.foregro text : ", win32gui.GetWindowText(foreground )) print("11.hdc text : ", win32gui.GetWindowText(hdc )) print("12.obj text : ", win32gui.GetWindowText(obj )) print("13.stockobjtext : ", win32gui.GetWindowText(stockobj)) print("14.sysmenu text : ", win32gui.GetWindowText(sysmenu)) print("15.menu : ", win32gui.GetMenuItemRect(hwnd, menu, 2)) buf, extras = win32gui_struct.EmptyMENUITEMINFO() #print(type(buf)) #print("buf 0 : ", buf[0]) print("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") try: #print(type( menu )) for i in range( win32gui.GetMenuItemCount(menu) ): win32gui.GetMenuItemInfo( menu, i, True, buf) #win32gui.GetMenuInfo( menu, # buf ) #print( "menu :" , buf[0] ) _, rect = win32gui.GetMenuItemRect(hwnd, menu, i)