gpt4 book ai didi

python - 使用 Python 3 发送 WM_COPYDATA

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:18 27 4
gpt4 key购买 nike

我正在尝试编写一个 python 脚本,它将与我的 stickies 副本交互.我在 Python 如何与 WM_COPYDATA 结构交互方面遇到了问题,遗憾的是我无法在网上找到很多示例。

使用代码:

import struct
import win32con
import win32gui

import struct, array
int_buffer = array.array("L", [0])
char_buffer = array.array('b', 'do new sticky')
int_buffer_address = int_buffer.buffer_info()[0]
char_buffer_address, char_buffer_size = char_buffer.buffer_info

copy_struct = struct.pack("pLp",
int_buffer_address,
char_buffer_size, char_buffer_address)

hwnd = win32gui.FindWindow("ZhornSoftwareStickiesMain", None)

win32gui.SendMessage(w, WM_COPYDATA, hwnd, copy_struct)

我收到以下错误:

C:\Users\%userprofile%\Desktop>python sender.py
Traceback (most recent call last):
File "sender.py", line 7, in <module>
char_buffer = array.array('b', 'do new sticky')
TypeError: an integer is required

我似乎无法弄清楚为什么会出现这样的错误。有什么想法吗?

编辑:一些部分工作的代码

import struct
import win32con
import win32gui
import struct, array


int_buffer = array.array("L", [0])
char_buffer = array.array('b', b"do manage open")
int_buffer_address = int_buffer.buffer_info()[0]

# Add () to buffer_info to call it.
char_buffer_address, char_buffer_size = char_buffer.buffer_info()

# Need P type for the addresses.
copy_struct = struct.pack("PLP",int_buffer_address,char_buffer_size, char_buffer_address)

hwnd = win32gui.FindWindow(None, "ZhornSoftwareStickiesMain")
win32gui.SendMessage(hwnd, win32con.WM_COPYDATA, None, copy_struct)

最佳答案

在 Python 3 中,字符串是 Unicode。尝试使用字节串:

>>> import array
>>> array.array('b',b'do new sticky')
array('b', [100, 111, 32, 110, 101, 119, 32, 115, 116, 105, 99, 107, 121])

还有一些其他的变化:

import struct, array
int_buffer = array.array("L", [0])
char_buffer = array.array('b', b'do new sticky')
int_buffer_address = int_buffer.buffer_info()[0]

# Add () to buffer_info to call it.
char_buffer_address, char_buffer_size = char_buffer.buffer_info()

# Need P type for the addresses.
copy_struct = struct.pack("PLP",int_buffer_address,char_buffer_size, char_buffer_address)

我没有安装软件,但我认为接下来的几行应该是:

hwnd = win32gui.FindWindow(None, "ZhornSoftwareStickiesMain")
win32gui.SendMessage(hwnd, win32con.WM_COPYDATA, None, copy_struct)

编辑

我安装了软件。最初我无法使用任何命令,但 API 文档中没有明确说明每个字符串必须以 api:

开头
import struct
import win32con
import win32gui
import array

char_buffer = array.array('B', b'api do new sticky hello, world')
char_buffer_address, char_buffer_size = char_buffer.buffer_info()
copy_struct = struct.pack("PLP", 12345, char_buffer_size, char_buffer_address)
hwnd = win32gui.FindWindow(None, "ZhornSoftwareStickiesMain")
win32gui.SendMessage(hwnd, win32con.WM_COPYDATA, None, copy_struct)

Stickies sample

关于python - 使用 Python 3 发送 WM_COPYDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19886633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com