beste allemaal,
ik heb mij vandaag eens zinloos ingespannen om een applicatie te schrijven zodat ik winamp met mijn wap-mobieltje kan besturen. ik had er gewoon zin in, want mja, echt nuttig is het niet
ik heb besloten het hier neer te dumpen, zodat jullie er misschien ook nog wat lol van hebben.
het geheel bestaat uit een aantal onderdelen, onder te verdelen in een kleine server die je op de pc draait, en een stukje php-code die je op je webserver moet draaien. het is geschreven voor winamp 2.x, ik weet niet of het werkt met versie 3.
zoals het er nu is, zijn de volgende functies beschikbaar:
je kan de webpagina (xhtml) opvragen met een browser die dat ondersteund, bijvoorbeeld de browsers van de SE t68i, t300 en t310. ik denk dat alle nieuwe SE telefoons xhtml ondersteunen maar ik weet het niet zeker, als je een beetje creatief te werk gaat kun je de code ook gemakkelijk aanpassen aan standaard wap1.1 compatible uitvoer.
als je de webpagina opvraagt zul je eerst het volgende zien (hé, ik heb nooit beweerd dat ik goed kan tekenen
):

met de toetsen onder de symbooltjes kan je dan de playback regelen, als je op 6 toetst, ga je naar het volume-control-scherm:

0 - 8 voor het volume, 0 = mute.
9 brengt je terug naar het vorige scherm.
onder de plaatjes staan de links met een accesskey om de nummers te laten werken.
nou, genoeg gezwetst, hier heb je de code...
allereerst de server, deze heb ik geschreven in Visual Basic en is echt supersimpel. een moduletje met 3 dll aanroepen, en een formpje (dat zichzelf hide, maar dat heb ik er voor de duidelijkheid uitgelaten) met een winsock control erop en wat code om winamp aan te sturen. dit kan als het goed is ook allemaal in een module als je geen form wil gebruiken, maar ik weet niet precies hoe dat moet, dus ik doe het zo.
de server kent maar een paar simpele 1-letterige commando's (van a - n), die de verschillende acties uitvoeren die hierboven genoemd zijn.
de module:
de code van het form (de gebruikte socket heet dus 'socket')
ik denk dat deze code wel voor zich spreekt? die msgs zijn dus om winamp te bestuderen, deze info vind je op de winamp site.
verder bestaat het zwikje nog uit 2 stukjes php, dat kan ook in 1 maar ik heb het zo opgelost. de php code maakt verbinding met de server, en spuugt daar een teken heen overeenkomstig het protocol wat je wel uit de code hierboven kan halen, waarna de verbinding weer wordt verbroken.
het bestand heet pb.php (van PlayBack)
het volgende bestandje doet hetzelfde, maar dan dus voor t volume. het heet dan ook vol.php.
het enige probleem dat ik ervaar, is dat mijn telefoon (SE t300) de pagina's cached, dus dat hij m niet meer echt opvraagt (en dus de php-code niet wordt uitgevoerd, en dus winamp er niet mee bestuurd wordt). t enige wat ik dus eigenlijk nog zoek is een manier om dat te voorkomen. een manier is om een form te gebruiken, met diverse submit 'buttons', maar dat vind ik nogal omslachtig. momenteel refresh ik de pagina (option button, 7)
voor diegenen die de server niet kunnen compilen, je kunt deze hier downloaden. de enige manier om m af te sluiten is via ctrl+alt+del. visual basic 5 runtimes en mswinsck.ocx zijn vereist.
veel plezier ermee!
ik heb mij vandaag eens zinloos ingespannen om een applicatie te schrijven zodat ik winamp met mijn wap-mobieltje kan besturen. ik had er gewoon zin in, want mja, echt nuttig is het niet
ik heb besloten het hier neer te dumpen, zodat jullie er misschien ook nog wat lol van hebben.
het geheel bestaat uit een aantal onderdelen, onder te verdelen in een kleine server die je op de pc draait, en een stukje php-code die je op je webserver moet draaien. het is geschreven voor winamp 2.x, ik weet niet of het werkt met versie 3.
zoals het er nu is, zijn de volgende functies beschikbaar:
- previous;
- play;
- pause;
- stop;
- next;
- volume in 8 stappen van 0 tot 100%.
je kan de webpagina (xhtml) opvragen met een browser die dat ondersteund, bijvoorbeeld de browsers van de SE t68i, t300 en t310. ik denk dat alle nieuwe SE telefoons xhtml ondersteunen maar ik weet het niet zeker, als je een beetje creatief te werk gaat kun je de code ook gemakkelijk aanpassen aan standaard wap1.1 compatible uitvoer.
als je de webpagina opvraagt zul je eerst het volgende zien (hé, ik heb nooit beweerd dat ik goed kan tekenen

met de toetsen onder de symbooltjes kan je dan de playback regelen, als je op 6 toetst, ga je naar het volume-control-scherm:

0 - 8 voor het volume, 0 = mute.
9 brengt je terug naar het vorige scherm.
onder de plaatjes staan de links met een accesskey om de nummers te laten werken.
nou, genoeg gezwetst, hier heb je de code...
allereerst de server, deze heb ik geschreven in Visual Basic en is echt supersimpel. een moduletje met 3 dll aanroepen, en een formpje (dat zichzelf hide, maar dat heb ik er voor de duidelijkheid uitgelaten) met een winsock control erop en wat code om winamp aan te sturen. dit kan als het goed is ook allemaal in een module als je geen form wil gebruiken, maar ik weet niet precies hoe dat moet, dus ik doe het zo.
de server kent maar een paar simpele 1-letterige commando's (van a - n), die de verschillende acties uitvoeren die hierboven genoemd zijn.
de module:
Visual Basic:
1
2
3
4
5
6
7
| Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Const WM_COMMAND = &H111 Public Const WM_USER = &H400 Dim hwndWinamp As Long |
de code van het form (de gebruikte socket heet dus 'socket')
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| Private Sub Form_Load() socket.LocalPort = 6001 socket.Listen End Sub Private Sub socket_Close() socket.Close socket.Listen End Sub Private Sub socket_ConnectionRequest(ByVal requestID As Long) socket.Close socket.Accept requestID End Sub Private Sub socket_DataArrival(ByVal bytesTotal As Long) Dim strText As String socket.GetData strText exec (strText) socket.Close socket.Listen End Sub Private Sub exec(comm As String) hwndWinamp = FindWindow("Winamp v1.x", vbNullString) Select Case comm Case "a" 'prev dummy = SendMessage(hwndWinamp, WM_COMMAND, 40044, vbNull) Case "b" 'play dummy = SendMessage(hwndWinamp, WM_COMMAND, 40045, vbNull) Case "c" 'pause dummy = SendMessage(hwndWinamp, WM_COMMAND, 40046, vbNull) Case "d" 'stop dummy = SendMessage(hwndWinamp, WM_COMMAND, 40047, vbNull) Case "e" 'next dummy = SendMessage(hwndWinamp, WM_COMMAND, 40048, vbNull) Case "f" 'vol 0 dummy = PostMessage(hwndWinamp, WM_USER, 0, 122) Case "g" 'vol 1 dummy = PostMessage(hwndWinamp, WM_USER, 31, 122) Case "h" dummy = PostMessage(hwndWinamp, WM_USER, 63, 122) Case "i" dummy = PostMessage(hwndWinamp, WM_USER, 95, 122) Case "j" dummy = PostMessage(hwndWinamp, WM_USER, 127, 122) Case "k" dummy = PostMessage(hwndWinamp, WM_USER, 159, 122) Case "l" dummy = PostMessage(hwndWinamp, WM_USER, 191, 122) Case "m" dummy = PostMessage(hwndWinamp, WM_USER, 223, 122) Case "n" 'vol 9 dummy = PostMessage(hwndWinamp, WM_USER, 255, 122) End Select End Sub |
ik denk dat deze code wel voor zich spreekt? die msgs zijn dus om winamp te bestuderen, deze info vind je op de winamp site.
verder bestaat het zwikje nog uit 2 stukjes php, dat kan ook in 1 maar ik heb het zo opgelost. de php code maakt verbinding met de server, en spuugt daar een teken heen overeenkomstig het protocol wat je wel uit de code hierboven kan halen, waarna de verbinding weer wordt verbroken.
het bestand heet pb.php (van PlayBack)
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| <? header("Content-type: application/xhtml+xml"); echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.0//EN\" \"DTD/xhtml-basic10.dtd\">\n"; Function sendcommand ($host, $comm) { @$rc=fsockopen($host, 6001); if ( (trim(gethostbyaddr($host)) != $host) && trim($host != "") && ($rc) ) { socket_set_timeout($rc, 2); @fputs($rc,"$comm"); fclose($rc); } else { return -1; } } $comm = $_GET['comm']; if ($comm) { sendcommand ('!!! vul hier je ip-nummer of hostname in !!!',$comm); } ?> <html> <head> <title>playback</title> </head> <body> <p>[img]"./wwc_pb.gif"[/img]</p> <p><a title="prev" href="./pb.php?comm=a" accesskey="1">previous</a><br/> <a title="play" href="http://www.punksmurf.nl/pb.php?comm=b" accesskey="2">play</a><br/> <a title="pause" href="./pb.php?comm=c" accesskey="3">pause</a><br/> <a title="stop" href="./pb.php?comm=d" accesskey="4">stop</a><br/> <a title="next" href="./pb.php?comm=e" accesskey="5">next</a><br/> <a title="vol" href="./vol.php" accesskey="6">volume</a><br/></p> </body> </html> |
het volgende bestandje doet hetzelfde, maar dan dus voor t volume. het heet dan ook vol.php.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| <? header("Content-type: application/xhtml+xml"); echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML Basic 1.0//EN\" \"DTD/xhtml-basic10.dtd\">\n"; Function sendcommand ($host, $comm) { @$rc=fsockopen($host, 6001); if ( (trim(gethostbyaddr($host)) != $host) && trim($host != "") && ($rc) ) { socket_set_timeout($rc, 2); @fputs($rc,"$comm"); fclose($rc); } else { return -1; } } $comm = $_GET['comm']; if ($comm) { sendcommand ('!!! vul hier je ip-nummer of hostname in !!!',$comm); } ?> <html> <head> <title>volume</title> </head> <body> <p>[img]"./wwc_vol.gif"[/img]</p> <p><a title="vol0" href="./vol.php?comm=f" accesskey="0">mute</a><br/> <a title="vol1" href="./vol.php?comm=g" accesskey="1">[:</a><br/> <a title="vol2" href="./vol.php?comm=h" accesskey="2">[::</a><br/> <a title="vol3" href="./vol.php?comm=i" accesskey="3">[:::</a><br/> <a title="vol4" href="./vol.php?comm=j" accesskey="4">[::::</a><br/> <a title="vol5" href="./vol.php?comm=k" accesskey="5">[:::::</a><br/> <a title="vol6" href="./vol.php?comm=l" accesskey="6">[::::::</a><br/> <a title="vol7" href="./vol.php?comm=m" accesskey="7">[:::::::</a><br/> <a title="vol8" href="./vol.php?comm=n" accesskey="8">[::::::::</a><br/> <a title="back" href="./pb.php" accesskey="9">back</a><br/></p> </body> </html> |
het enige probleem dat ik ervaar, is dat mijn telefoon (SE t300) de pagina's cached, dus dat hij m niet meer echt opvraagt (en dus de php-code niet wordt uitgevoerd, en dus winamp er niet mee bestuurd wordt). t enige wat ik dus eigenlijk nog zoek is een manier om dat te voorkomen. een manier is om een form te gebruiken, met diverse submit 'buttons', maar dat vind ik nogal omslachtig. momenteel refresh ik de pagina (option button, 7)
voor diegenen die de server niet kunnen compilen, je kunt deze hier downloaden. de enige manier om m af te sluiten is via ctrl+alt+del. visual basic 5 runtimes en mswinsck.ocx zijn vereist.
veel plezier ermee!
[ Voor 39% gewijzigd door Punksmurf op 06-09-2003 21:37 ]
met een hamer past alles