使用Windows消息控制Winamp(VB)

windows编程用WM_COPYDATA进行两进程间传输大量数据 现在有个需求需要在两进程间大量传递数据,而在windows程序下两个进程间进行通信 可以有多个方法: 1、管道(未命名管道、命名管道) 2、共享内存 3、消息队列 不过上述实现起来比较麻烦,现在我们来讲解如何使用sendMessage来传输大量数据。 LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, ... 阅读详情

第一部分:得到Winamp的窗口

Winamp是一个32位的Windows应用程序。也就是说,我们可以使用32位的Windows编程的一些基础技术来实现控制Winamp,即使用Windows的消息系统。在你给Winamp发送消息之前,你必须得到Winamp窗口的句柄。这里有个方法,使用外部应用程序(例如你自己编写的VB应用)就可以达到要求。

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim hwndWinamp as long
hwndWinamp = FindWindow("Winamp v1.x",vbNullString)

大家可能会注意到一点,为什么要使用类名"Winamp v1.x"来FindWindow呢?因为Winamp 1.x 和 2.x 的所有版本都是用"Winamp v1.x"这个class name的。


第二部分:使用消息

Winamp相应的三个消息:WM_USER,WM_COMMAND,和 WM_COPYDATA。WM_USER 和 WM_COPYDATA 允许你可以对Winamp进行一些高级的控制。而WM_COMMAND则可以做一些简单的操作,如暂停,播放,和跳到下一首音乐。

1.WM_COMMAND 消息:

  Previous track button                   40044
  Next track button                       40048
  Play button                             40045
  Pause/Unpause button                    40046
  Stop button                             40047
  Fadeout and stop                        40147
  Stop after current track                40157
  Fast-forward 5 seconds                  40148
  Fast-rewind 5 seconds                   40144
  Start of playlist                       40154
  Go to end of playlist                   40158
  Open file dialog                        40029
  Open URL dialog                         40155
  Open file info box                      40188
  Set time display mode to elapsed        40037
  Set time display mode to remaining      40038
  Toggle preferences screen               40012
  Open visualization options              40190
  Open visualization plug-in options      40191
  Execute current visualization plug-in   40192
  Toggle about box                        40041
  Toggle title Autoscrolling              40189
  Toggle always on top                    40019
  Toggle Windowshade                      40064
  Toggle Playlist Windowshade             40266
  Toggle doublesize mode                  40165
  Toggle EQ                               40036
  Toggle playlist editor                  40040
  Toggle main window visible              40258
  Toggle minibrowser                      40298
  Toggle easymove                         40186
  Raise volume by 1%                      40058
  Lower volume by 1%                      40059
  Toggle repeat                           40022
  Toggle shuffle                          40023
  Open jump to time dialog                40193
  Open jump to file dialog                40194
  Open skin selector                      40219
  Configure current visualization plug-in 40221
  Reload the current skin                 40291
  Close Winamp                            40001
  Moves back 10 tracks in playlist        40197
  Show the edit bookmarks                 40320
  Adds current track as a bookmark        40321
  Play audio CD                           40323
  Load a preset from EQ                   40253
  Save a preset to EQF                    40254
  Opens load presets dialog               40172
  Opens auto-load presets dialog          40173
  Load default preset                     40174
  Opens save preset dialog                40175
  Opens auto-load save preset             40176
  Opens delete preset dialog              40178
  Opens delete an auto load preset dialog 40180

例程:控制Winamp暂停,播放,和跳到下一首音乐
新建一个标准EXE工程,加入一个模块,在模块中加入代码----------

Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Const WM_COMMAND = &H111
Const IPC_WINAMP_NextTrackButton = 40048    '跳到下一首音乐
Const IPC_WINAMP_PlayButton = 40045         '播放
Const IPC_WINAMP_PauseUnpauseButton = 40046 '暂停
Public hwndWinamp As Long                   'Winamp的句柄

Public Sub WinampPlay() '播放
SendMessage hwndWinamp, WM_COMMAND, IPC_WINAMP_PlayButton, 0
End Sub

Public Sub WinampPause() '暂停
SendMessage hwndWinamp, WM_COMMAND, IPC_WINAMP_PauseUnpauseButton, 0
End Sub

Public Sub WinampNext() '跳到下一首音乐
SendMessage hwndWinamp, WM_COMMAND, IPC_WINAMP_NextTrackButton, 0
End Sub

在Form中加入的代码----------

Option Explicit

Private Sub cmdNext_Click()
WinampNext '跳到下一首音乐
End Sub

Private Sub cmdPause_Click()
WinampPause '暂停
End Sub

Private Sub cmdPlay_Click()
WinampPlay '播放
End Sub

Private Sub Form_Load()
hwndWinamp = FindWindow("Winamp v1.x", vbNullString) '得到Winamp的句柄
If hwndWinamp = 0 Then '判断Winamp是否运行
   MsgBox "请启动Winamp先!"
   Unload Me
End If
End Sub


2.WM_USER 消息:

例程:得到Winamp的版本
新建一个标准EXE工程,加入一个模块,在模块中加入代码----------

Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'这是VB的API声明,不会返回正确的结果
'Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'这是正确的SendMessage声明,才能返回版本信息,读者可以参考一下两者的不同
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const WM_USER = &H400
Const WA_GETVERSION = 0
Public hwndWinamp As Long                   'Winamp的句柄

Function WinampGetVersion() As String
Dim VersionNum As Long
Dim ReturnVersion As String
VersionNum = SendMessage(hwndWinamp, WM_USER, 0, WA_GETVERSION)

If Len(Hex(VersionNum)) > 3 Then
   ReturnVersion = Left(Hex(VersionNum), 1) & "."
   ReturnVersion = ReturnVersion & Mid(Hex(VersionNum), 2, 1)
   ReturnVersion = ReturnVersion & Right$(Hex(VersionNum), Len(Hex(VersionNum)) - 3)
   WinampGetVersion = ReturnVersion
Else
   WinampGetVersion = "UNKNOWN"
End If
End Function

在Form中加入的代码----------

Option Explicit

Private Sub Command1_Click()
MsgBox "你的Winamp的版本是:" & WinampGetVersion
End Sub

Private Sub Form_Load()
hwndWinamp = FindWindow("Winamp v1.x", vbNullString) '得到Winamp的句柄
If hwndWinamp = 0 Then '判断Winamp是否运行
   MsgBox "请启动Winamp先!"
   Unload Me
End If
End Sub


3.WM_COPYDATA 消息:

例程:Winamp的运行时刻在播放列表中加入一首Mp3的歌曲
新建一个标准EXE工程,加入一个模块,在模块中加入代码----------

Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function CopyDataSendMessage Lib "user32" Alias "SendMessageA" (ByVal WndID As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As COPYDATASTRUCT) As Long
Private Type COPYDATASTRUCT
    dwData As Long
    cbData As Long
    lpData As Long
End Type

Const IPC_PLAYFILE = 100
Const WM_COPYDATA = &H4A

Public hwndWinamp As Long

Public Sub WinampAddSong(SongName As String)
Dim CDS As COPYDATASTRUCT
With CDS
      .dwData = IPC_PLAYFILE
      .cbData = 100
      .lpData = lstrcpy(SongName, SongName)
End With
CopyDataSendMessage hwndWinamp, WM_COPYDATA, 0&, CDS
End Sub

在Form中加入的代码----------

Option Explicit

Private Sub Command1_Click()
WinampAddSong "I:/Mp3/周杰伦-简单爱.mp3" '加入一首歌
End Sub

Private Sub Form_Load()
hwndWinamp = FindWindow("Winamp v1.x", vbNullString) '得到Winamp的句柄
If hwndWinamp = 0 Then '判断Winamp是否运行
   MsgBox "请启动Winamp先!"
   Unload Me
End If
End Sub

所有例程在 Win2000 + VB6 中调试通过

VB 音乐播放器(类似于WinAmp) VB 音乐播放器(类似于WinAmp) 你看到的文件来自:E动天下(http:/www.2e3.org) 立即下载

相关推荐

利用Vb实现象Winamp那样的Skin效果的程序(155KB)...

利用Vb实现象Winamp那样的Skin效果的程序(155KB)

在Windows MFC\C++编程中的WM_COPYDATA是什么,工作原理是什么,有什么作用,如何来使用它?

WM_COPYDATA 是一种非标准但广泛使用的Windows消息,它允许一个应用程序向另一个应用程序的窗口发送数据。虽然 WM_COPYDATA 不是Windows API中正式定义的标准消息之一,但Windows操作系统确实支持并处理这个消息,使得它成为在不同应用程序之间安全传递数据的一种流行方式。

学无止尽,谨言慎行! 1018

汇编语言经典案例及源代码

一些有关汇编语言编写的小程序,有助于汇编语言的编程,希望下载的能够多给一些意见

Windows核心编程笔记(二十) 窗口与消息2

唤醒一个线程 线程的挂起与唤醒 (1)当线程调用GetMessage或WaitMessage,而消息队列中又没有消息出现时,线程会被挂起。 (2)当消息被“Post”(也可以是线程间的“Send”)到消息队列时,相应的Wake标志位会被设置,以表明该线程可被调度。  查询队列的状态:DWORD GetQueueStatus(UINT fuFlags) (1)fuFla

春暖花开 3684

昇腾910B+MindIE部署Qwen模型避坑指南:从镜像下载到推理测试全流程

本文详细介绍了在昇腾910B硬件环境中使用MindIE推理工具部署Qwen系列模型的全流程指南。从环境准备、镜像下载到模型部署与性能优化,提供一站式解决方案,帮助开发者高效完成AI模型推理任务。

weixin_29219189的博客 766

科研指南:IEEE期刊LaTeX/Word模板下载与使用全解析

本文详细解析了IEEE期刊LaTeX/Word模板的下载与使用技巧,帮助科研人员高效完成论文排版。从官方模板获取入口到LaTeX文档结构配置,再到Word样式管理与常见问题解决方案,全面覆盖投稿准备的关键步骤。特别针对数学公式、参考文献和图片处理等难点提供实用建议,助力学术写作规范化。

weixin_28396629的博客 566

使用Windows消息控制Winamp(VB) (转)

使用Windows消息控制Winamp(VB) (转)[@more@]第一部分:得到Winamp的窗口 Winamp是一个32位的windows应用程序。也就是说,我们可以使用32位的Windows编程的一些基础技术来实现控制...

cuiji1279的博客 140

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

VB6.0实现系统托盘

  WINDOWS状态栏也称系统托盘,在WINDOWS9X中已有系统时钟、音量控制、输入法等程序在WINDOWS的状态栏中设有图标,一些应用程序在安装完后也将它们本身的图标放入了状态栏中,如超级解霸、WINAMP等。通过在应用程序中有效地控制状态栏中的图标,不仅可以使应用程序具有专业水准,也方便了用户的操作。VB做为一种使用很广的高级语言,实现将图标放入状态栏的功能并不困难,只要有效地利用一个AP

658

零基础学写《扫雷》游戏(Qt扫雷源码)

扫雷游戏是在windows系统中自带的游戏,他的游戏玩法其实很简单,20世纪初期电脑上没有啥游戏可以玩,所以扫雷游戏也算是当时是最常火爆的一个电脑游戏。以下文章详细介绍扫雷游戏的实现。实现语言为C++。

啊渊的专栏 1万+

【专栏必读】王道考研408操作系统+Linux系统编程万字笔记使用说明及章节导航

王道408考研操作系统)第一章计算机系统概述-第一节1、2:操作系统概念、概念和特征1:理解fork的作用prinf("还没有执行fork函数的本进程为:%d\n" , getpid());//其返回值是pid类型的 sleep(1);if(ret > 0) //父进程返回的是子进程ID {printf("我是父进程,我的id是:%d,我的孩子id是%d\n" , getpid() , ret);sleep(1);} } else if(ret == 0) //子进程fork返回值是0 {.........

快乐江湖的博客 3万+

跨进程通信之WM_COPYDATA

一、MSDN提供: #define WM_COPYDATA 0x004A 数据结构: typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; DWORD     cbData; PVOID     lpData; } COPYDATASTRUCT, *PCOPYDATASTRUCT;dw

evil_119的专栏 1402

C++怎么学?零基础也可以,一份完整学习路线图助你搞定!

提供一条清晰、系统且实践导向的C++学习路径。从基础语法、面向对象、泛型编程、异常处理,逐步深入STL、智能指针、并发编程等现代C++高级特性。无论是新手还是希望提升,通过系统学习与项目实践,助您将理论知识转化为实际解决问题的能力。

Lion_Long的博客 4024

使用Windows消息控制Winamp(Delphi)

使用Windows消息控制Winamp(Delphi)--------------------------------------------------------------------------------第一部分:得到Winamp的窗口Winamp是一个32位的Windows应用程序。也就是说,我们可以使用32位的Windows编程的一些基础技术来实现控制Winamp,即使用Wi

40Star的专栏 1632

TextView部分文字可以被点击的效果。TextView拼接图片,图片可以被点击

今有一需求,就是列表标题后拼接图标,点击图标跳转一个web页; 这里简单做下笔记,以供需要的人参考: //设置部分文字点击事件 ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(conte...

LXFX1108的专栏 692

龙腾CMS downloadFile接口任意文件读取漏洞复现 [附POC]

大连网龙网络科技有限公司专注于在信息科技领域中向客户提供商业解决方案,是专业的互联网服务解决方案提供商和网络营销服务专家,为用户提供一体化的网络营销整体解决方案,龙腾CMS downloadFile接口存在任意文件读取漏洞。

薛定谔嘚喵博客 720

进程间传递消息 WM_COPYDATA的用法

 下面是postmessage工程的代码 COPYDATASTRUCT cpd; /*给COPYDATASTRUCT结构赋值*/ CString m_szdata="这是CString字符串"; 这个就是要发送的字符串 cpd.dwData = 1;

天使的薄荷 2018

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

WM_COPYDATA的简单使用

发送端: void CE9101MainDlg::Mp4() { //CreateProcess(_T("\\Flashdrv Storage\\Mp4\\Mp4_D.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, NULL, NULL); UpdateData(); HWND m_Mp4Wnd; m_Mp4Wnd =

Douaty的专栏 1317

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC++ 中WM_COPYDATA 怎么样应用来实现两个进程间的数据传输

<br />本文着重讲述了如果用WM_COPYDATA消息来实现两个进程之间传递数据.<br />进程之间通讯的几种方法:<br />在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有<br />  使用内存映射文件 <br />  通过共享内存DLL共享内存 <br />  使用SendMessage向另一进程发送WM_COPYDATA消息 <br />比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.<br />WM_COPYDATA消息的主要

3781

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

发送消息WM_COPYDATA需要注意的点

A程序通过消息 WM_COPYDATA 给B程序发送数据 A程序发送代码片段如下 typedef struct tagVCodeData{ int X; int Y; int Width; int Height; int DataLen; int pngDataAddr; char* szName; tagVCodeData() ...

friendan的专栏 5180

进程间通信之WM_COPYDATA方式反思,回顾和总结

许多Windows程序开发者喜欢使用WM_COPYDATA来实现一些进程间的简单通信(笔者也正在学习共享内存的一些知识来实现一些更高级的通信),这篇文章描述了笔者在使用这项技术时候的一些总结以及所遇到的一个问题回顾和分析。 进程通讯的相关知识 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有 使用内存映射文件 通过共享内存DLL共享内存 ...

weixin_30849591的博客 422
上一篇: 用Delphi编写涂鸦桌面的小程序
下一篇: 使用Windows消息控制Winamp(Delphi)
40Star
博客等级 码龄25年 1粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值