Python Win32Gui自动发送WM_COPYDATA以从BSPlay获取数据

2024-09-30 05:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正拼命地从我的脚本中自动执行BSPlayer。 我成功地向BSPlayer窗口发送了简单的命令id(音量增大/减小、播放/暂停等),但是我无法恢复文件名。在

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返回“”。。。在

我要模仿的是:

^{pr2}$

更详细地说,我试图从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; 

提前谢谢!在


Tags: 代码命令self脚本文件名statusbspwm
1条回答
网友
1楼 · 发布于 2024-09-30 05:25:27

不能在Python代码中复制WM_COPYDATA。它只能在proc中使用,例如插件。在

示例Delphi代码是在假设对WM_COPYDATA的调用与接收消息的窗口来自同一进程的情况下编写的。这是因为WM_COPYDATA用于复制指针,而指针只在分配内存的进程内有效。不能跨进程边界发送指针。在

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

相关问题 更多 >

    热门问题