Example #1
0
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
Example #2
0
    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")
            mid = win32gui.GetMenu(rid)
            buf, extras = win32gui_struct.EmptyMENUITEMINFO()
            win32gui.GetMenuItemInfo(mid, 1, True, buf)
            eid = win32gui_struct.UnpackMENUITEMINFO(buf).hSubMenu
            buf, extras = win32gui_struct.EmptyMENUITEMINFO()
            win32gui.GetMenuItemInfo(eid, 1, True, buf)
            pid = win32gui_struct.UnpackMENUITEMINFO(buf).wID
            win32api.PostMessage(rid, win32con.WM_SETFOCUS, pid, 0)
            sublime.set_timeout(
                lambda: win32api.PostMessage(rid, win32con.WM_COMMAND, pid, 0),
                50)
            clipboard.reset_clipboard()
Example #3
0
 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!")
Example #4
0
    def send_to_r(cmd):

        rid = win32gui.FindWindow("Rgui Workspace", None)
        if rid:
            # mdi
            win32gui.EnumChildWindows(rid, child_window_callback, None)
        else:
            # sdi
            rid = win32gui.FindWindow("Rgui", "R Console (64-bit)")
            if not rid:
                rid = win32gui.FindWindow("Rgui", "R Console (32-bit)")
            if rid:
                win32gui.BringWindowToTop(rid)

        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()
Example #5
0
    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
Example #7
0
 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))
Example #8
0
 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)
Example #9
0
 def _testPackUnpack(self, text):
     vals = dict(fType=win32con.MFT_MENUBARBREAK,
                 fState=win32con.MFS_CHECKED,
                 wID=123,
                 hSubMenu=1234,
                 hbmpChecked=12345,
                 hbmpUnchecked=123456,
                 dwItemData=1234567,
                 text=text,
                 hbmpItem=321)
     mii, extras = win32gui_struct.PackMENUITEMINFO(**vals)
     fType, fState, wID, hSubMenu, hbmpChecked, hbmpUnchecked, \
     dwItemData, text, hbmpItem = win32gui_struct.UnpackMENUITEMINFO(mii)
     self.assertDictEquals(vals,
                           fType=fType,
                           fState=fState,
                           wID=wID,
                           hSubMenu=hSubMenu,
                           hbmpChecked=hbmpChecked,
                           hbmpUnchecked=hbmpUnchecked,
                           dwItemData=dwItemData,
                           text=text,
                           hbmpItem=hbmpItem)
Example #10
0
    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
Example #11
0
    #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)
            #print( rect )
            if win32gui.PtInRect( rect, pt ):
                print(win32gui_struct.UnpackMENUITEMINFO(buf))

    except pywintypes.error :
        pass
    win32gui.DrawMenuBar(hwnd)
    #time.sleep(1)
    
    #print("menu count : ", win32gui.GetMenuItemCount(menu))
    
    #print("layout:", win32gui.GetLayout())
    #print("Message:", win32gui.GetMessage(hwnd, 0, 10))
    
    time.sleep(2)