我思故我在

歌德说,人的一辈子其实只能做一件事,做了,就要扎扎实实地把它做好。我也只能通过一种行业来认定我自己的人生价值。我选择了写程序,我希望我能写好。
随笔 - 55, 评论 - 457, 引用 - 159

导航

每月存档

最新留言

广告

 

按照winamp的nsdn的资料,在c++中可以用

int index = SendMessage(hwnd_winamp, WM_USER, 0, IPC_GETLISTPOS);
char *name = SendMessage(hwnd_winamp, WM_USER, index, IPC_GETPLAYLISTFILE);
的方法返回文件名,但是在vb中如何得到我没有找到办法,因此自己尝试写一下,发现IPC_GETPLAYLISTFILE返回的是相对winamp进程的地址,所以想读出字符串必须通过跨进程内存存取的方法取回字符串,幸好只是读取一个字符串,仔细琢磨一下还是不难的。大概向下面这样就可以了。


Private Const MAX_PATH As Long = 255
Private hWndWinamp As Long

Private Function GetWinampWindow() As Long
GetWinampWindow = FindWindow( "Winamp v1.x", vbNullString)
End Function
Public Function GetPlayingFileName() As String
Dim strFileName As String
Dim lp As Long, lpWinamp As Long
Dim iIndex As Long
Dim PID As Long
Dim bRet As Long
Dim dwRead As Long
Dim strTMP As String
Dim Temp As String

'得到winamp窗口的句柄
hWndWinamp = GetWinampWindow
If hWndWinamp = 0 Then
GetPlayingFileName = ""
Exit Function
End If

'返回正在播放文件的在playlist中的索引
iIndex = SendMessage(hWndWinamp, WM_USER, 0, IPC_GETLISTPOS)

'得到此文件入口指针
lp = SendMessage(hWndWinamp, WM_USER, iIndex, IPC_GETPLAYLISTFILE)
If lp = 0 Then
GetPlayingFileName = ""
Exit Function
End If

'下面几步就是跨进程读取刚才返回地址的数据
Call GetWindowThreadProcessId(hWndWinamp, PID)
lpWinamp = OpenProcess(PROCESS_VM_READ, 0, PID)
If lpWinamp = 0 Then
GetPlayingFileName = ""
Exit Function
End If
strTMP = String(MAX_PATH, vbNullChar)
bRet = ReadProcessMemory(lpWinamp, lp, ByVal strTMP, MAX_PATH, dwRead)
Call CloseHandle(lpWinamp)
strFileName = Left$(strTMP, InStr(strTMP, Chr$(0)) - 1)
GetPlayingFileName = strFileName
End Function

API 声明略!

打印 | 张贴于 2004-02-26 17:11:00 | Tag:暂无标签

留言反馈

#回复: 取得当前winamp正在播放的文件名 编辑
Good...
2008-02-07 13:40:00 | [匿名:yezie]
#回复: 取得当前winamp正在播放的文件名 编辑
Very Good.............
2008-02-07 13:40:00 | [匿名:yezie]
#re: 取得当前winamp正在播放的文件名 编辑
我的QQ:38956002
2004-12-29 18:16:00 | [匿名:飘渺]
#re: 取得当前winamp正在播放的文件名 编辑
bRet = ReadProcessMemory(lpWinamp, lp, ByVal strTMP, MAX_PATH, dwRead)

在这步之前的都能执行,并且正确。但这步没有返回正确的值不知为什么
2004-12-29 18:14:00 | [匿名:飘渺]
#re: 取得当前winamp正在播放的文件名 编辑
请问在Delphi中如何实现??呵呵,我是一Delphi初手.
2004-07-30 22:58:00 | [匿名:liuyang]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.2.0