使用Windows消息控制Winamp(Delphi)

Delphi中的用户自定义消息深入解析 在软件开发中,用户自定义消息(User-Defined Messages)为开发者提供了扩展操作系统或应用程序消息系统的能力。这种机制允许应用程序定义自己的消息类型,以便在运行时根据特定条件发送和处理这些消息。自定义消息通常用于实现特定的功能需求,比如组件间的通信、自定义控件或模块之间的交互等。用户自定义消息是一种强大的工具,因为它允许开发者绕过传统的函数调用机制,采用事件驱动的方式来增强应用程序的响应性和模块化。 阅读详情

使用Windows消息控制Winamp(Delphi)
--------------------------------------------------------------------------------
第一部分:得到Winamp的窗口

Winamp是一个32位的Windows应用程序。也就是说,我们可以使用32位的Windows编程的一些基础技术来实现控

制Winamp,即使用Windows的消息系统。在你给Winamp发送消息之前,你必须得到Winamp窗口的句柄。这里有

个方法,使用外部应用程序(例如你自己编写的Delphi应用)就可以达到要求。

var
  hwndWinamp:HWND;
hwndWinamp := FindWindow('Winamp v1.x',0); //得到Winamp的句柄

大家可能会注意到一点,为什么要使用类名"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暂停,播放,和跳到下一首音乐
     
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

Const IPC_WINAMP_NextTrackButton:integer    = 40048; //跳到下一首音乐
Const IPC_WINAMP_PlayButton:integer         = 40045; //播放
Const IPC_WINAMP_PauseUnpauseButton:integer = 40046; //暂停

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hwndWinamp:HWND;//Winamp窗口的句柄
implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
hwndWinamp := FindWindow('Winamp v1.x',0); //得到Winamp的句柄
If hwndWinamp = 0 Then                     //判断Winamp是否运行
begin
   ShowMessage('请启动Winamp先!');
   Application.Terminate ;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
//让Winamp跳到下一首音乐
SendMessage(hwndWinamp, WM_COMMAND, IPC_WINAMP_NextTrackButton,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
//让Winamp播放当前Mp3
SendMessage(hwndWinamp, WM_COMMAND, IPC_WINAMP_PlayButton,0);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
//让Winamp暂停当前Mp3
SendMessage(hwndWinamp, WM_COMMAND, IPC_WINAMP_PauseUnpauseButton,0);
end;

end.


2.WM_USER 消息:

例程:得到Winamp的版本

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,StrUtils;//使用StrUtils才能用LeftStr,RightStr,MidStr等函数

Const WA_GETVERSION:integer = 0;//Winamp的版本

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hwndWinamp:HWND;//Winamp窗口的句柄
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
hwndWinamp := FindWindow('Winamp v1.x',0); //得到Winamp的句柄
If hwndWinamp = 0 Then                     //判断Winamp是否运行
begin
   ShowMessage('请启动Winamp先!');
   Application.Terminate ;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   VersionNum : integer;
   ReturnVersion : String;
begin
VersionNum := SendMessage(hwndWinamp, WM_USER, 0, WA_GETVERSION);
If Length(IntToHex(VersionNum,4)) > 3 Then
begin
   ReturnVersion := LeftStr(IntToHex(VersionNum,4), 1) + '.' ;
   ReturnVersion := ReturnVersion + MidStr(IntToHex(VersionNum,4), 2, 1);
   ReturnVersion := ReturnVersion + RightStr(IntToHex(VersionNum,4),

Length(IntToHex(VersionNum,4)) - 3);
end
Else
   ReturnVersion := 'UNKNOWN';

ShowMessage(ReturnVersion);
end;

end.


3.WM_COPYDATA 消息:

例程:Winamp的运行时刻在播放列表中加入一首Mp3的歌曲


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

Const IPC_PLAYFILE:integer = 100 ;//Winamp中加入文件

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  hwndWinamp:HWND;//Winamp窗口的句柄
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
hwndWinamp := FindWindow('Winamp v1.x',0); //得到Winamp的句柄
If hwndWinamp = 0 Then                     //判断Winamp是否运行
begin
   ShowMessage('请启动Winamp先!');
   Application.Terminate ;
end
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   CDS:COPYDATASTRUCT;
   SongName:String;
begin
SongName:='I:/Mp3/周杰伦-简单爱.mp3';
CDS.dwData := IPC_PLAYFILE;
CDS.cbData :=Length(SongName)+1;
CDS.lpData := PChar(SongName);
SendMessage(hwndWinamp, WM_COPYDATA, 0, integer(@CDS));
end;

end.


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

Delphi消息机制应用与实战详解 在现代Delphi应用程序开发中,组件间的交互已不再局限于传统的事件绑定或直接方法调用。随着系统复杂度的提升,尤其是模块化、插件化架构的广泛应用,如何实现松耦合、高内聚的通信机制成为关键挑战。Windows平台原生的消息驱动模型为这一问题提供了天然解决方案,而Delphi通过VCL对这一机制进行了高度封装与扩展。本章将深入探讨自定义消息的设计原理与实践路径。 阅读详情

相关推荐

窗口之间通过消息和文本文件实现信息传递

主程序启动的时候,运行外部可执行文件启动副窗口,通过PostMessage(CHwnd,MyMsg,uservar,uservar)消息函数和文本文件实现主副窗口之间信息传递。

Delphi中的Windows消息处理

这里采用自定义消息的方法。注意:delphi中自定义消息值范围为:WM_USER到$7FFF之间。 1.应用程序中的消息(在同一个应用程序的不同Form间进行消息处理)示例:Form1:unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

【昆山人在上海】 868

CMyWMPPlayer4播放器使用类

VC6.0写的一个播放器的类 主要教你怎样简单地使用CMyWMPPlayer4控件。 适合初学者

在delphi线程中实现消息循环

Delphi的TThread类使用很方便,但是有时候我们需要在线程类中使用消息循环,delphi没有提供.花了两天的事件研究了一下win32的消息系统,写了一个线程内消息循环的测试.但是没有具体应用过,贴出来给有这方面需求的DFW参考一下.希望大家和我讨论.{-----------------------------------------------------------------...

284

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL)

在Windows11上安装ubuntu版linux系统并实现桌面图形化(WSL),xfce桌面美化、安装google-chrome

NiKoJJ‘s Blog 1万+

YooAsset可寻址模式避坑指南:从路径加载到Addressable的完整迁移方案

本文详细介绍了将Unity项目从传统路径加载迁移到YooAsset可寻址模式的完整方案。针对中大型项目在迁移过程中遇到的路径耦合、依赖管理、热更新等痛点,提供了从架构设计、环境配置、代码迁移到性能优化的实战指南,并分享了实际项目的改造案例与避坑经验,帮助团队高效完成资源管理系统的重构。

weixin_28304023的博客 501

DELPHI中自定义消息的发送和接收

DELPHI中的消息处理机制 Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具。由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpascal)语言,并有强大的数据库引擎(BDE),快速的代码编译器,同时又提供了众多出色的构件。受到广大编程人员的青睐。在众多的编程语言(如VB,PowerBuilder,Powerpoint等)中脱颖而出

xtfnpgy 8378

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

用户自定义的的消息

用户自定义的的Windows消息(也就是以WM_开头,除了WM_COMMAND以外的消息,这类消息 在WM_USER以下的是系统消息,WM_USER以上的可以由用户自己定义),是消息发出者直接 发给对应CWnd的窗体句柄,由CWnd负责消息的响应。所以这类消息必须同一个CWnd类对应, 更精确的说必须与一个HWND类型的窗体句柄相对应。 SendMessage可以理解为,SendM

cp32212116的专栏 641

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 528

基于微信小程序的垃圾分类系统,附源码

垃圾分类小程序管理员功能有个人中心,管理员管理,意见反馈管理,视频类型管理,垃圾类型管理,新闻类型管理,论坛信息管理,环保视频管理,环保知识管理,垃圾信息管理,环保新闻管理,用户管理,知识问答试卷管理,试题管理,测试管理,轮播图管理。用户可以在微信小程序上面注册登录,查看各种环保信息和垃圾信息,还可以参加知识问答等操作。垃圾分类小程序的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。

Java徐师兄的博客 2076

DELPHI 中 Window 消息大全使用详解

Window 消息大全使用详解 导读:    Delphi是Borland公司的一种面向对象的可视化软件开发工具。 Delphi集中了Visual C++和Visual Basic两者的优点:容易上手、功能强大,特别是在界面设计、数据库编程、网络编程方面更有其独特的优势。    Delphi中的消息    消息是Windows发出的一个通知,它告诉应用程序某个事件发生了。在Delphi

crkres9527 4785

什么是 SAPGUI 里的 Logon Group/Server

这意味着,不同的用户连接可以被分配到不同的应用服务器,以实现均衡的资源利用和降低某一服务器的负载压力。在这种配置下,欧洲的用户登录时选择“EUROPE_GROUP”,系统将自动选择一个位于欧洲的数据中心的服务器进行连接,这样不仅减少了网络延迟,还实现了服务器间的负载均衡。用户在 SAPGUI 中登录时,只需选择相应的 Logon Group(例如“FIN_GROUP”),系统就会自动将他们的连接请求分配到当前负载最小的应用服务器上,这种动态分配大大提升了系统的响应速度和稳定性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1069

Delphi消息处理:自定义消息的终极指南

自定义消息处理可以通过重载WndProc方法或使用message关键字定义特定消息的处理器来实现。publicend;begin// 自定义消息处理代码end;end;发送自定义消息可以通过。

2402_85758349的博客 1131

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1401

智能手表 BOM 表与版本管理记录

试产与量产阶段 智能手表 BOM 表与版本管理记录

hoony123的博客 1053

【Delphi】中使用消息Messages(五)Windows消息

详细介绍了Delphi中Windows消息以及Dispatch消息的实现,并有句体的代码

sensor_WU 博客 2533

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

WM_USER和WM_APP[转]

WM_USER常量是Windows帮助应用程序定义私有窗口类里的私有消息,通常使用WM_USER+一个整数值,但总值不能超过0x7FFF。 #define WM_USER       0x0400   WM_APP常量是Windows帮助应用程序定义私有消息,通常使用WM_APP+一个整数值,但总值不能超过0xBFFF。 #define WM

syflyhua的专栏 1445

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

delphi 使用windowsmediaplayer播放视频

前言delphi7中原本自带的一个Tmediaplayer控件,但是发现有不少视频是无法播放的,于是就想到了用windowsmediaplayer来进行播放。安装在Delphi7中选择“...

Vaccae的博客 2103

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

delphi media player

WindowsMediaPlayer上实现快进快退功能,立体声功能!!!1,可以由按钮控件进行快进,快退功能的实现,2,可以由按钮控件实现立体声的实现--------------------------------------------------------------------------------www.cqzol.com网友回答:wmp.dll控件常用属性:URL:String;指定

xwchen的专栏 3381

delphi 利用Core Audio API控制 应用程序 音量

控制 系统程序音量。纯delphi 代码、

qq_17029305的博客 788

Delphi 三态按钮

//继承IMAGE控件 unit XPButton; interface uses   SysUtils, Classes,forms, Controls, ExtCtrls,Graphics,windows,Messages,dialogs,StdCtrls; type   TXPButton = class(TImage)   constructor Create(AO

my_c_s_d_n的专栏 1346

WM_USER

谈谈WM_USER如何使用。

A Flying Bird 2977

WM_USER以及自定义消息WM_XXXX的定义 声明 实现

WM_USER     为了防止用户定义的消息ID与系统的消息ID冲突,MS(Microsoft)定义了一个宏WM_USER,小于WM_USER的ID被系统使用,大于WM_USER的ID被用户使用。 自定义消息的步骤编辑 (一)先在头文件中定义自己消息的ID,如 #define WM_MY_FIRST_MESSAGE (WM_USER + 0x001) (二)再声明自己

yangk1990的专栏 7147
上一篇: 使用Windows消息控制Winamp(VB)
下一篇: 在托盘上显示Balloon Tooltip
40Star
博客等级 码龄25年 1粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值