私は必死にスクリプトから BSPlayer を自動化しようとしています。BSPlayer ウィンドウに単純なコマンド ID を送信することには成功しましたが (ボリュームのアップ/ダウン、再生/一時停止など)、ファイル名を取り戻すことはできません。
これが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;
前もって感謝します!