python win32api sendmessage_Python win32api SendMesage

记事本的主要窗口内还有另一个窗口,您需要将消息发送给它.您可以使用Microsoft Spy工具查看此“隐藏”窗口,或者您可以获取所有子窗口,如下所示:

def callback(hwnd, hwnds):

if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):

hwnds[win32gui.GetClassName(hwnd)] = hwnd

return True

hwnds = {}

win32gui.EnumChildWindows(whndl, callback, hwnds)

我们正在寻找的窗口具有“编辑”类名,它是记事本唯一启用且可见的子窗口.所以你的代码将以这种方式工作:

import win32api, win32con, win32gui, win32ui, win32service, os, time

def f_click(pycwnd):

x=300

y=300

lParam = y <<15 | x

pycwnd.SendMessage(win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, lParam);

pycwnd.SendMessage(win32con.WM_LBUTTONUP, 0, lParam);

def get_whndl():

whndl = win32gui.FindWindowEx(0, 0, None, 'NB.txt - Notepad')

return whndl

def make_pycwnd(hwnd):

PyCWnd = win32ui.CreateWindowFromHandle(hwnd)

return PyCWnd

def send_input_hax(pycwnd, msg):

f_click(pycwnd)

for c in msg:

if c == "\n":

pycwnd.SendMessage(win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

pycwnd.SendMessage(win32con.WM_KEYUP, win32con.VK_RETURN, 0)

else:

pycwnd.SendMessage(win32con.WM_CHAR, ord(c), 0)

pycwnd.UpdateWindow()

whndl = get_whndl()

def callback(hwnd, hwnds):

if win32gui.IsWindowVisible(hwnd) and win32gui.IsWindowEnabled(hwnd):

hwnds[win32gui.GetClassName(hwnd)] = hwnd

return True

hwnds = {}

win32gui.EnumChildWindows(whndl, callback, hwnds)

whndl = hwnds['Edit']

pycwnd = make_pycwnd(whndl)

msg = "It works !\n"

send_input_hax(pycwnd,msg)

lParam是int,你在这里看到的是一些技巧,允许你通过一个参数传递多个值.假设我们需要将两位数传递给只接受一个参数的函数.我们可以将它们作为双位数发送并将其拆分为功能.同样,在您的情

>>> x = 300

>>> y = 300

>>> lParam = y << 15 | x

>>> lParam & 0x7FFF # x

0: 300

>>> lParam >> 15 # y

1: 300

您可以在Wikipedia和Python Wiki中阅读有关按位操作的更多信息.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值