我正拼命地从我的脚本中自动执行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;
提前谢谢!在
不能在Python代码中复制
WM_COPYDATA
。它只能在proc中使用,例如插件。在示例Delphi代码是在假设对
WM_COPYDATA
的调用与接收消息的窗口来自同一进程的情况下编写的。这是因为WM_COPYDATA
用于复制指针,而指针只在分配内存的进程内有效。不能跨进程边界发送指针。在在我看来,界面的设计者在滥用
WM_COPYDATA
。它旨在解决进程间数据传输的精确问题。它是可用的最简单、最轻量级的进程间通信。然后使用它来传输指针会破坏整个过程。在相关问题 更多 >
编程相关推荐