gpt4 book ai didi

Python Win32Gui 自动化 - 发送 WM_COPYDATA 从 BSPlayer 获取数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:10:03 25 4
gpt4 key购买 nike

我正在拼命尝试从我的脚本中实现 BSPlayer 的自动化。我成功地将简单的命令 ID 发送到 BSPlayer 窗口(音量增大/减小、播放/暂停等),但是我无法取回文件名。

Here是 BSPlayer API。我能够在 python 中模拟第一部分,但是 WM_COPYDATA 不起作用。

这是我的 Python 代码:

copyDataCmd = COPYDATASTRUCT()
copyDataCmd.dwData = self.BSP_GetFileName
copyDataCmd.lpData = ""
copyDataCmd.cbData = 4
win32gui.SendMessage(self.playerWindowHandler, win32con.WM_COPYDATA,
ownHandler, copyDataCmd);

显然.lpData返回“”...

我正在尝试模仿:

cds:TCOPYDATASTRUCT; 
buf:array[0..MAX_PATH-1] of char;
adr:pointer; //
adr:=@buf;
cds.dwData:=BSP_GetFileName;
cds.lpData:=@adr;
cds.cbData:=4;
SendMessage(bsp_hand,WM_COPYDATA,appHWND,lParam(@cds));
// available in BSPlayer version 0.84.484+ //
// appHWND is calling application window handle
// File name will be copied to buf //
// Get open file name
BSP_GetFileName = $1010B;

更详细地说,我正在尝试从 BSPlayer 窗口获取文件名。为此,我尝试模拟上面的代码。我希望某种缓冲区充满我想要的字符串,但它是空的。因此,我再次需要上面代码的 Python 等效项。

例如,此代码已成功模拟:

status := SendMessage(bsp_hand,WM_BSP_CMD,BSP_GetStatus,0); 
// available in BSPlayer version 0.84.484+ //
// Return player status // 0 - STOP // 1 - PAUSE
// 2 - PLAY // 4 - No movie open
BSP_GetStatus = $10102;

提前致谢!

最佳答案

您无法在 Python 代码中复制该 WM_COPYDATA。它只能在进程中使用,例如用于插件。

示例 Delphi 代码是在假设调用 WM_COPYDATA 是从与接收消息的窗口相同的进程中进行编写的。这是因为 WM_COPYDATA 用于复制指针,而指针仅在分配内存的进程内有效。您不能跨进程边界发送指针。

在我看来,界面设计者滥用了WM_COPYDATA。它旨在用于解决进程之间传输数据的确切问题。它是可用的最简单、最轻量级的进程间通信。然后使用它来传输指针而不是破坏该过程。

关于Python Win32Gui 自动化 - 发送 WM_COPYDATA 从 BSPlayer 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291818/

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