コード例 #1
0
def UnpackDEV_BROADCAST(lparam):
    # guard for 0 here, otherwise PyMakeBuffer will create a new buffer.
    if lparam == 0:
        return None
    hdr_size = struct.calcsize("iii")
    hdr_buf = win32gui.PyMakeBuffer(hdr_size, lparam)
    size, devtype, reserved = struct.unpack("iii", hdr_buf)
    rest = win32gui.PyMakeBuffer(size - hdr_size, lparam + hdr_size)

    extra = x = {}
    if devtype == win32con.DBT_DEVTYP_HANDLE:
        # 2 handles, a GUID, a LONG and possibly an array following...
        fmt = "PP16sl"
        x['handle'], x['hdevnotify'], guid_bytes, x['nameoffset'] = \
            struct.unpack(fmt, rest[:struct.calcsize(fmt)])
        x['eventguid'] = pywintypes.IID(guid_bytes, True)
    elif devtype == win32con.DBT_DEVTYP_DEVICEINTERFACE:
        # guid, null-terminated name
        x['classguid'] = pywintypes.IID(rest[:16], 1)
        name = rest[16:]
        if '\0' in name:
            name = name.split('\0', 1)[0]
        x['name'] = name
    elif devtype == win32con.DBT_DEVTYP_VOLUME:
        # int mask and flags
        x['unitmask'], x['flags'] = struct.unpack("II",
                                                  rest[:struct.calcsize("II")])
    else:
        raise NotImplementedError("unknown device type %d" % (devtype, ))
    return DEV_BROADCAST_INFO(devtype, **extra)
コード例 #2
0
def getText(hwnd):
    if hwnd == 0:
        return 'hwnd is not used return 0'
    length = 10000
    buf = gui.PyMakeBuffer(length)
    length2 = gui.SendMessage(hwnd, con.WM_GETTEXT, length, buf) + 1
    buf = gui.PyMakeBuffer(length2)
    gui.SendMessage(hwnd, con.WM_GETTEXT, length2, buf)
    address, length = gui.PyGetBufferAddressAndLen(buf)
    text = gui.PyGetString(address, length)
    return text
コード例 #3
0
ファイル: helpers.py プロジェクト: goddess5321/easytrader
def get_text_by_hwnd(hwnd, buffer_len=64, cast=None):
    """
    根据 hwnd 获取窗口中的字符串
    :param hwnd: 
    :param buffer_len: 
    :param cast: 是否进行类型转换,默认None不进行转换,float, int 可以继续对应类型转换
    :return: 
    """
    buffer = win32gui.PyMakeBuffer(buffer_len)
    # buffer = win32gui.PyGetMemory(*array.array('b',bytearray(buffer_len)).buffer_info())
    length = win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buffer_len,
                                  buffer)
    char_list_len = length * 2 if length * 2 < buffer_len else buffer_len
    # aaa = [chr(buf) for buf in buffer[:char_list_len] if buf != 0]
    char_list = []
    for n_buf, a_byte in enumerate(buffer[:char_list_len]):
        if n_buf % 2 != 0:
            continue
        if a_byte == 0:
            break
        char_list.append(chr(a_byte))
        # print(buf, chr(buf))
    ret_str = ''.join(char_list)
    if cast is not None:
        if ret_str == '-':
            ret_data = np.nan
        else:
            ret_data = cast(ret_str)
    else:
        ret_data = ret_str
    return ret_data
コード例 #4
0
 def UpdateValue_FromControl(self):
     buf_size = 256
     buf = win32gui.PyMakeBuffer(buf_size)
     nchars = win32gui.SendMessage(self.GetControl(), win32con.WM_GETTEXT,
                                   buf_size, buf)
     str_val = buf[:nchars]
     self.SetOptionValue(str_val)
コード例 #5
0
def readMOHAA():
    try:
        print("Looking for MOHAA.")
        # Find the MOH console window
        hwnd = win32gui.FindWindow("MOHTA WinConsole", None)
        win32gui.ShowWindow(hwnd, win32con.SW_SHOW)
        clearBtn = win32gui.FindWindowEx(hwnd, None, "Button", "clear")
        # Click the clear button
        win32gui.SendMessage(hwnd, win32con.WM_COMMAND, 1, clearBtn)

        #Set cmdline with serverinfo
        cmdline = win32gui.GetDlgItem(hwnd, 101)
        win32gui.SendMessage(cmdline, win32con.WM_SETTEXT, None, "clientinfo")
        win32gui.PostMessage(cmdline, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

        #Get console info
        console = win32gui.GetDlgItem(hwnd, 100)
        buffer = win32gui.PyMakeBuffer(25555)
        length = win32gui.SendMessage(console, win32con.WM_GETTEXT, 25555, buffer)
        result = buffer[0:length * 2].tobytes().decode("UTF-16")
        time.sleep(2)
        # Click the clear button
        win32gui.SendMessage(hwnd, win32con.WM_COMMAND, 1, clearBtn)

        # split on newline
        splitted = result.splitlines()

        for index, value in enumerate(splitted):
            if "Server: " in value:
                print("Found server! " + value[8:])
                return value[8:]

    except Exception as e:
        print("Error[MOHSH]: " + str(e))
コード例 #6
0
def 窗口_取窗口文本内容(窗口句柄):
    bufSize = win32api.SendMessage(窗口句柄, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
    strBuf = win32gui.PyMakeBuffer(bufSize)
    length = win32gui.SendMessage(窗口句柄, win32con.WM_GETTEXT, bufSize, strBuf)
    address, length = win32gui.PyGetBufferAddressAndLen(strBuf)
    text = win32gui.PyGetString(address, length)
    return text[:-1]
コード例 #7
0
ファイル: probe.py プロジェクト: xgDebug/GameAISDK
    def __get_text(self, hwnd):
        buf_size = 0
        try:
            textlength = ctypes.c_long(0)
            hr = ctypes.windll.user32.SendMessageTimeoutA(
                hwnd, win32con.WM_GETTEXTLENGTH, 0, 0, 0, 200,
                ctypes.byref(textlength))
            if hr == 0 or textlength.value < 0:
                return ""

            buf_size = textlength.value * 2 + 1
        except win32gui.error:
            return ""

        if buf_size <= 0:
            return ""

        pybuffer = win32gui.PyMakeBuffer(buf_size)
        ret = win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size,
                                   pybuffer)
        if ret:
            address, _ = win32gui.PyGetBufferAddressAndLen(pybuffer)
            text = win32gui.PyGetString(address, ret)
            return text

        return ""
コード例 #8
0
def UnpackLVNOTIFY(lparam):
    format = "3i8i"
    buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
    hwndFrom, id, code, item, subitem, newstate, oldstate, \
        changed, pt_x, pt_y, lparam = struct.unpack(format, buf)
    return hwndFrom, id, code, item, subitem, newstate, oldstate, \
        changed, (pt_x, pt_y), lparam
コード例 #9
0
def _getMultipleWindowValues(hwnd, getCountMessage, getValueMessage):
    '''A common pattern in the Win32 API is that in order to retrieve a
    series of values, you use one message to get a count of available
    items, and another to retrieve them. This internal utility function
    performs the common processing for this pattern.

    Arguments:
    hwnd                Window handle for the window for which items should be
                        retrieved.
    getCountMessage     Item count message.
    getValueMessage     Value retrieval message.

    Returns:            Retrieved items.'''
    result = []

    BUFFER_SIZE = 256
    buf = win32gui.PyMakeBuffer(BUFFER_SIZE)

    valuecount = win32gui.SendMessage(hwnd, getCountMessage, 0, 0)
    for itemIndex in range(valuecount):
        buf_len = win32gui.SendMessage(hwnd, getValueMessage, itemIndex, buf)
        result.append(
            win32gui.PyGetString(
                win32gui.PyGetBufferAddressAndLen(buf)[0], buf_len))

    return result
コード例 #10
0
ファイル: YesMan.py プロジェクト: 124W4N/Ending-EULA-Roulette
def contentExtractor(hwnd):
    for i in childHandle:
        bufferSize = 1 + win32gui.SendMessage(i, win32con.WM_GETTEXTLENGTH, 0,
                                              0)
        buffer = win32gui.PyMakeBuffer(bufferSize)
        win32gui.SendMessage(i, win32con.WM_GETTEXT, bufferSize, buffer)
        if bufferSize > 500:
            agreement = (buffer[:bufferSize])
            # Normalize
            import re
            from nltk.corpus import stopwords
            letters_only = re.sub("[^a-zA-Z0-9]", " ", agreement)
            words = letters_only.lower().split()
            stops = set(stopwords.words("english"))
            meaningful_words = [w for w in words if not w in stops]
            KK = (" ".join(meaningful_words))
            # print the agreement to a file
            if not os.path.isdir(EULAdir):
                os.mkdir(EULAdir)

            if os.path.isfile(EULAdir + filename + '.txt'):
                print "duplicated names"

            MyFile = open(EULAdir + filename + '.txt', 'w')
            MyFile.write(KK)
            MyFile.close()
            EULAHandle.append(True)
            return True
    return False
コード例 #11
0
ファイル: TabView.py プロジェクト: tomihasa/pygui
    def _insert_item_at(self, v, i, title = None):
        _tab_ctrl = self._win
        
        if not title:
            title = 'Page %d' % (i)
        
        lbuf = gui.PyMakeBuffer(len(title)+1)
        address,l = gui.PyGetBufferAddressAndLen(lbuf)
        gui.PySetMemory(address, title)

        _format = "iiiPiii"
        buf = struct.pack(_format,
            cc.TCIF_TEXT, # mask
            0, # state
            0, # state mask
            address,
            0, #unused
            0, #image
            i #data
            )
        
        gui.SendMessage(_tab_ctrl.GetSafeHwnd(),
                        cc.TCM_INSERTITEM,
                        i,
                        buf)

        self._resize_children(v)
コード例 #12
0
 def OnNotify(self, hwnd, msg, wparam, lparam):
     format = "PPiiiiiiiiP"
     buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
     hwndFrom, idFrom, code, iItem, iSubItem, uNewState, uOldState, uChanged, actionx, actiony, lParam \
               = struct.unpack(format, buf)
     if code == commctrl.NM_DBLCLK:
         print "Double click on item", iItem + 1
     return 1
コード例 #13
0
ファイル: huatai_client.py プロジェクト: zhou-yuxin/puppies
 def __GetText(cls, hwnd):
     length = cls.__SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, None,
                                None) + 1
     buf = win32gui.PyMakeBuffer(length)
     cls.__SendMessage(hwnd, win32con.WM_GETTEXT, length, buf)
     address, length = win32gui.PyGetBufferAddressAndLen(buf)
     text = win32gui.PyGetString(address, length - 1)
     return cls.__ConvertEncoding(text, False)
コード例 #14
0
def get_dlg_txt(handle_):
    buf_size = win32gui.SendMessage(handle_, win32con.WM_GETTEXTLENGTH, 0,
                                    0) + 1  # 要加上截尾的字节
    str_buffer = win32gui.PyMakeBuffer(buf_size)  # 生成buffer对象
    win32api.SendMessage(handle_, win32con.WM_GETTEXT, buf_size,
                         str_buffer)  # 获取buffer
    address, length = win32gui.PyGetBufferAddressAndLen(str_buffer)
    return win32gui.PyGetString(address, length)
コード例 #15
0
ファイル: single_guet.py プロジェクト: xixiU/crawerSet
def get_message(hwnd):
    buf_size = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH) + 1  # 要加上截尾的字节  
    str_buffer = win32gui.PyMakeBuffer(buf_size)  # 生成buffer对象  
    win32api.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, str_buffer)  # 获取buffer  
#     str_buffer = str(str_buffer[:-1])  # 转为字符串
    address, length = win32gui.PyGetBufferAddressAndLen(str_buffer)
    text = win32gui.PyGetString(address, length) 
    return text
コード例 #16
0
def UnpackTVNOTIFY(lparam):
    format = "iiii40s40s"
    buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
    hwndFrom, id, code, action, buf_old, buf_new \
          = struct.unpack(format, buf)
    item_old = UnpackTVItem(buf_old)
    item_new = UnpackTVItem(buf_new)
    return hwndFrom, id, code, action, item_old, item_new
コード例 #17
0
ファイル: 读写控件内文本.py プロジェクト: zcxboy/basic
def getno():
    #查询句柄
    #第一个参数为父窗口类名,不知道类名时取None,在不同的系统环境下,r12可能变化
    #第二个参数为窗口标题名,不知道标题时取None,FindWindow函数不能模糊查找
    hld = win32gui.FindWindow( "#32770", "ArturDents CrackMe #2")
    HwndEx=None
    rect=None
    if hld>0:
        try:
            while rect!=(51, 39):
                #获取hld子窗口内的控件句柄,类名为edit,该函数只能查收下一级子窗口内控件的句柄,查询孙子窗口的句柄需要进行嵌套查询
                #参数1:父窗口句柄
                #参数2:子窗口句柄,从该子窗口开始向后查找,如果取None,则全部遍历一次
                #参数3:查找窗口的类名,不知道类名时取None
                #参数4:查找窗口的的标题,不知道类名时取None,FindWindowEx函数不能模糊查找
                HwndEx=win32gui.FindWindowEx(hld,HwndEx,"Edit",None)
                print("控件句柄:",HwndEx)

                #获取该句柄对应控件的左上角和右下角的坐标,获取的坐标为屏幕坐标
                rect = win32gui.GetWindowRect(HwndEx)
                

                #将屏幕坐标转换为相对于父窗口的坐标
                rect=win32gui.ScreenToClient(hld,(rect[0],rect[1]))
                print("控件左上角在父窗口内的坐标:",rect)

                #获取该句柄对应控件的长度和高度
                ck = win32gui.GetClientRect(HwndEx)
                print("控件的长度和高度:",ck)
                print("\n")



            # 向控件内写入文本,第三个参数不使用,取0
            win32gui.SendMessage(HwndEx, win32con.WM_SETTEXT, 0, "hello world")

            # 向控件内写入回车
            win32gui.PostMessage(HwndEx, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
            win32gui.PostMessage(HwndEx, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

            # 获取控件内文本的长度,要加上截尾的字节
            buf_size = win32gui.SendMessage(HwndEx, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
            print(buf_size)

            # 生成buffer对象
            str_buffer = win32gui.PyMakeBuffer(buf_size*2)

    
            # 获取buffer,得到类似于16进制的东西,将结果传输给str_buffer,参数3控制获取长度
            win32api.SendMessage(HwndEx, win32con.WM_GETTEXT, buf_size, str_buffer)
            # 将buffer转为字符串
            string = bytes(str_buffer).decode('utf-16')
            print("目标控件内的文本为:",string)
        except BaseException as e:
            print('错误信息:',e)
    
    else:
        print("错误!!程序未启动")
コード例 #18
0
    def get_msg(self, hwd_n):

        hwd_edit = self.found_hwnd(hwd_n)
        bufLen = 1024
        buf = win32gui.PyMakeBuffer(bufLen)
        n = win32gui.SendMessage(hwd_edit, win32con.WM_GETTEXT, bufLen, buf)
        #print 'Get the message:',buf[0:n]

        return buf[0:n]
コード例 #19
0
ファイル: fetchclass.py プロジェクト: 418011010/2020
def getcont(HW):
    length = win32gui.SendMessage(HW, win32con.WM_GETTEXTLENGTH) + 1
    buf = win32gui.PyMakeBuffer(length)
    # 发送获取文本请求
    win32api.SendMessage(HW, win32con.WM_GETTEXT, length, buf)
    # 下面应该是将内存读取文本
    address, length = win32gui.PyGetBufferAddressAndLen(buf[:-1])
    text = win32gui.PyGetString(address, length)
    return text
コード例 #20
0
ファイル: myguet0.py プロジェクト: xixiU/crawerSet
def get_message(hwnd):
    buf_size = win32gui.SendMessage(hwnd,
                                    win32con.WM_GETTEXTLENGTH) + 1  # 要加上截尾的字节
    str_buffer = win32gui.PyMakeBuffer(buf_size)  # 生成buffer对象
    kk = win32api.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size,
                              str_buffer)  # 获取buffer
    print(kk)
    str_buffer = str(str_buffer[:-1])  # 转为字符串
    return str_buffer
コード例 #21
0
ファイル: get_edit_value.py プロジェクト: aeo153/python
def GetWinValue(h_win):
    length = win32gui .SendMessage(h_win, win32con.WM_GETTEXTLENGTH) + 1
    # print('Length: ', length)
    
    buf = win32gui.PyMakeBuffer(length)
    win32gui .SendMessage(h_win, win32con.WM_GETTEXT, length, buf)

    address, result_length = win32gui.PyGetBufferAddressAndLen(buf)
    text = win32gui.PyGetString(address, result_length)
    return text[:-1]
コード例 #22
0
ファイル: winguiauto.py プロジェクト: taolaptop/pytrade
def getEditText(hwnd):
    bufLen = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) + 1
    print(bufLen)
    buffer = win32gui.PyMakeBuffer(bufLen)
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, bufLen, buffer)
    print(buffer)

    text = str(buffer[:bufLen])
    #str = str(buffer[:-1])
    return text
コード例 #23
0
ファイル: gtools.py プロジェクト: demon16/demon16.github.io
def GetWindowText(handle, encoding='utf16'):
    if encoding:
        buf_size = 2 * win32gui.SendMessage(handle, win32con.WM_GETTEXTLENGTH, 0, 0)
        if buf_size:
            buffer = win32gui.PyMakeBuffer(buf_size)
            win32gui.SendMessage(handle, win32con.WM_GETTEXT, buf_size, buffer)
            text = bytes(buffer[0: buf_size]).decode(encoding, errors="ignore")
            text = re.sub('''[^\w!@#$%^&().]''', "", text)
            return text
    return win32gui.GetWindowText(handle)
コード例 #24
0
def getBufferContent(hwnd):
    buf_size = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0)
    # print('buf_size: ', buf_size)
    buf = win32gui.PyMakeBuffer(buf_size)
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, buf)
    # print('_buf_str: ', str(buf))
    address, length = win32gui.PyGetBufferAddressAndLen(buf)
    text = win32gui.PyGetString(address, length)
    buf.release()
    return text
コード例 #25
0
def 提取句柄文本(句柄):
    # 获取识别结果中输入框文本
    length = win32gui.SendMessage(句柄, win32con.WM_GETTEXTLENGTH)+1
    buf = win32gui.PyMakeBuffer(length)
    #发送获取文本请求
    win32api.SendMessage(句柄, win32con.WM_GETTEXT, length, buf)
    #下面应该是将内存读取文本
    address, length = win32gui.PyGetBufferAddressAndLen(buf[:-1])
    text = win32gui.PyGetString(address, length)
    return text
コード例 #26
0
ファイル: winwin_lib0.py プロジェクト: HeathKang/ziyan_dam
    def get_value3(self, hwnd):
        
        buf_size = 1 + win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0)

        #print("buf_size ", buf_size)

        if buf_size:
            buffer = win32gui.PyMakeBuffer(buf_size)
            win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, buffer)
            txt = buffer[:buf_size-1]            
            return txt
コード例 #27
0
 def UpdateValue_FromControl(self):
     buf_size = 100
     buf = win32gui.PyMakeBuffer(buf_size)
     nchars = win32gui.SendMessage(self.GetControl(), win32con.WM_GETTEXT,
                                   buf_size, buf)
     str_val = buf[:nchars]
     val = float(str_val)
     if val < self.min_val or val > self.max_edit_val:
         raise ValueError, "Value must be between %d and %d" % (
             self.min_val, self.max_val)
     self.SetOptionValue(val)
コード例 #28
0
ファイル: dlgcore.py プロジェクト: odoousers2014/odoo-extra-1
 def OnHelp(self, hwnd, msg, wparam, lparam):
     format = "iiiiiii"
     buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
     cbSize, iContextType, iCtrlId, hItemHandle, dwContextID, x, y = \
             struct.unpack(format, buf)
     tt_text = self.GetPopupHelpText(iCtrlId)
     if tt_text:
         self.tt.ShowTooltipForControl(iCtrlId, tt_text)
     else:
         self.tt.HideTooltip()
     return 1
コード例 #29
0
ファイル: examjudge.py プロジェクト: tqscjrty/StudyPython
def GetTextData(hwnd, ID):
    #传入父句柄,控件ID
    hwnd = win32gui.GetDlgItem(hwnd, ID)
    buf_size = win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0,
                                    0) + 1  # 要加上截尾的字节
    str_buffer = win32gui.PyMakeBuffer(buf_size)  # 生成buffer对象
    win32api.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size,
                         str_buffer)  # 获取buffer
    address, length = win32gui.PyGetBufferAddressAndLen(str_buffer)
    text = win32gui.PyGetString(address, length - 1)
    return text
コード例 #30
0
ファイル: win32gui_struct.py プロジェクト: R0ckNRolla/byob
def UnpackNMITEMACTIVATE(lparam):
    format = _nmhdr_fmt + _nmhdr_align_padding
    if is64bit:
        # the struct module doesn't handle this correctly as some of the items
        # are actually structs in structs, which get individually aligned.
        format = format + "iiiiiiixxxxP"
    else:
        format = format + "iiiiiiiP"
    buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
    return _MakeResult(
        "NMITEMACTIVATE hwndFrom idFrom code iItem iSubItem uNewState uOldState uChanged actionx actiony lParam",
        struct.unpack(format, buf))