国庆回家,喜欢听歌,音响接上电脑,由于电脑和音响放在三楼上,要是遇到不喜欢听的歌就得爬到3楼去换歌,太麻烦。想个办法就弄了这么个控制程序。人在一楼吃饭,可以通过手机控制三楼上的电脑播放歌曲,只要PC和手机端都可以接入互联网,没有距离的限制。
思路:手机和pc机通过中转站通信,中转站选择美国的免费服务器空间,手机上通过浏览器提交换歌的参数,服务端接受并保存参数到数据库上。pc端的程序每隔5秒去读取服务器数据库上的数据,根据取回的数据作简单的判断,然后调用win32 API键盘操作函数, 模拟键盘操作来控制酷狗切换歌曲。
1. 推荐使用免费的服务器空间:http://www.freewebhostingarea.com/,我申请空间的地址是,http://fjut.ueuo.com/
2. 在数据库上建表KuGouController,如下图:
三个字段分别表示 操作类型、当前播放状态、是否改变状态
3. 编写php文件,上传到服务器根目录。
/**KuGouInfo_PC1_Rec.php 读取手机端是否提交播放状态*/
<?php
//连接数据库
$con = mysql_connect("localhost","506129","密码是什么呢?") or die("连接服务器失败!");
//查询状态
$sql = "SELECT * FROM KuGouController WHERE ActionType = 'TrackSwitch'";
$result = mysql_db_query("506129", $sql, $con) or die("查询数据库失败!");
while($row = mysql_fetch_array($result))
{
echo $row['IsChange'];
}
?>
/**KuGouInfo_PC2_Rec.php 读取手机端提交的播放状态*/
<?php
//接收参数
$Type = $HTTP_POST_VARS["postType"];
//连接数据库
$con = mysql_connect("localhost","506129","密码是什么呢?") or die("连接服务器失败!");
//输出状态
$sql = "SELECT * FROM KuGouController WHERE ActionType = 'TrackSwitch'";
$result = mysql_db_query("506129", $sql, $con) or die("查询数据库失败!");
while($row = mysql_fetch_array($result))
{
echo $row['CurrentState'];
}
//切换状态
$sql = "UPDATE KuGouController SET IsChange = 'N' WHERE ActionType = 'TrackSwitch'";
$query = mysql_db_query("506129", $sql, $con) or die("更新数据库失败!");
?>
/**KuGouInfo_Mobile_Rec.php 接收手机端提交的播放状态并存入数据库*/
<?php
//接收参数
$Type = $_GET["actionType"];
//连接数据库
$con = mysql_connect("localhost","506129","密码?") or die("连接服务器失败!");
//上一曲
if($Type == "PreviousTrack")
{
$sql = "UPDATE KuGouController SET CurrentState = 'PreviousTrack', IsChange = 'Y' WHERE ActionType = 'TrackSwitch'";
$query = mysql_db_query("506129", $sql, $con) or die("更新数据库失败!");
}
//下一曲
else if($Type == "NextTrack")
{
$sql = "UPDATE KuGouController SET CurrentState = 'NextTrack', IsChange = 'Y' WHERE ActionType = 'TrackSwitch'";
$query = mysql_db_query("506129", $sql, $con) or die("更新数据库失败!");
}
else
{
echo "非法提交,会发生吗?
}
?>
4.手机上访问的html文件,上传到服务器根目录。
<html>
<body>
<title>酷狗播放远程控制</title>
<a href="http://fjut.ueuo.com/KuGouInfo_Mobile_Rec.php?actionType=PreviousTrack"><h3>上一曲</h3></a></br>
<a href="http://fjut.ueuo.com/KuGouInfo_Mobile_Rec.php?actionType=NextTrack"><h3>下一曲</h3></a>
</body>
</html>
5. PC端上的Delphi程序。
//使用idhttp控件提交和获取数据
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls;
type
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Timer1: TTimer;
Button2: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Timer1Timer(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
postList: TStrings;
Response: TStringStream;
result: string;
done: Boolean;
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
begin
Response := TStringStream.Create('');
postList := TStringList.Create;
Timer1.Enabled := True;
Button2.Caption := 'Controlling';
button2.Enabled := False;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
str: string;
begin
//获取状态是否改变
//IdHTTP1.IOHandler.Close;
try
str := IdHTTP1.Get('http://fjut.ueuo.com/KuGouInfo_PC1_Rec.php');
except
Edit1.text := '连接服务器出错!';
end;
if( str= 'Y') then
begin
try
//Post数据
IdHTTP1.HandleRedirects := True;
postList.add('postType=fjut');
IdHTTP1.Post('http://fjut.ueuo.com/KuGouInfo_PC2_Rec.php', postList, Response);
done := True;
except
done := False;
end;
//获取服务端响应的数据
if(done) and (Pos('200 OK', IdHTTP1.ResponseText) <> 0) then
begin
try
result := IdHTTP1.Get('http://fjut.ueuo.com/KuGouInfo_PC2_Rec.php');
Edit1.text := result;
except
Edit1.text := '连接服务器出错!';
end;
//模拟键盘操作
//下一首
if(result = 'NextTrack') then
begin
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); //按下Ctrl键
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); //按下Alt键
keybd_event(VK_RIGHT, MapVirtualKey(VK_RIGHT, 0), 0, 0); //按下->键
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放开Ctrl键
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); //放开Alt键
keybd_event(VK_RIGHT, MapVirtualKey(VK_RIGHT, 0), KEYEVENTF_KEYUP, 0); //放开->键
end
//上一首
else if(result = 'PreviousTrack') then
begin
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0); //按下Ctrl键
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); //按下Alt键
keybd_event(VK_LEFT, MapVirtualKey(VK_LEFT, 0), 0, 0); //按下<-键
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0); //放开Ctrl键
keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); //放开Alt键
keybd_event(VK_LEFT, MapVirtualKey(VK_LEFT, 0), KEYEVENTF_KEYUP, 0); //放开<-键
end
else
begin
;//other function such as......fjut
end;
end;
end;
end;
end.
6. 打开酷狗,打开delphi程序,点击 “开始” 控制,然后就可以使用手机上的浏览器打开http://fjut.ueuo.com/可以进行歌曲的上下切换。不受距离的影响,不管人在哪,只要PC和手机端都可以介入互联网就可以切歌操作。
7. 截图:
(1).PC端:
(2). 手机端:
8. OK,现在人坐在一楼吃饭,可以拿出手机打开浏览器控制三楼电脑上的音乐切换,哈哈