我正在拼命地尝试从我的脚本中自动化 BSPlayer。我成功地将简单的命令 ID 发送到 BSPlayer 窗口(音量增大/减小、播放/暂停等),但是我无法取回文件名。
这是 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;
提前致谢!