{"id":7,"date":"2008-05-22T09:22:16","date_gmt":"2008-05-22T07:22:16","guid":{"rendered":"http:\/\/dev.flauschig.ch\/wordpress\/?p=7"},"modified":"2009-08-21T08:55:53","modified_gmt":"2009-08-21T06:55:53","slug":"winamp-steuern","status":"publish","type":"post","link":"http:\/\/dev.flauschig.ch\/wordpress\/?p=7","title":{"rendered":"Winamp Steuern"},"content":{"rendered":"<p>Nachdem ich nun die mittlere Maustaste abfangen kann, muss ich jetzt nur noch Winamp steuern k\u00f6nnen.<\/p>\n<p>Relativ schnell fand ich heraus, dass man mit WM_COMMAND Befehle an Winamp senden kann. Leider kein kombiniertes Play\/Pause. Also muss ich zuerst den Status abfangen und je nach dem Play oder Pause\/Unpause senden.<!--more--><\/p>\n<p>Das ganze funktioniert nat\u00fcrlich \u00fcber Win32, also erst mal ein par Konstanten definieren:<\/p>\n<pre class=\"brush: csharp; gutter: true; title: ; toolbar: true; wrap-lines: false; notranslate\" title=\"\">\r\n\/\/ Winamp Window Class Name\r\nconst string m_windowName = &quot;Winamp v1.x&quot;;\r\n\/\/ For Sending normal Commands\r\nconst int WM_COMMAND = 0x111;\r\nconst int WA_NOTHING = 0;\r\n\/\/ Plays selected Track\r\nconst int WA_PLAY = 40045;\r\n\/\/ Pauses\/Unpauses currently playing Track\r\nconst int WA_PAUSE = 40046;\r\n\/\/ For sending IPC Commands\r\nconst int WM_WA_IPC = 0x0400;\r\n\/\/ Returns Playback Status. 1=playing, 3=paused, 0=not playing)\r\nconst int IPC_ISPLAYING = 104;\r\n\r\n\/\/ FindWindow\r\n&#x5B;System.Runtime.InteropServices.DllImport(&quot;USER32.DLL&quot;, CharSet = System.Runtime.InteropServices.CharSet.Auto)]\r\nstatic extern IntPtr FindWindow(string lpClassName, string lpWindowName);\r\n\/\/ SendMessageA\r\n&#x5B;System.Runtime.InteropServices.DllImport(&quot;user32.dll&quot;, CharSet = System.Runtime.InteropServices.CharSet.Auto)]\r\npublic static extern int SendMessageA(IntPtr hwnd, int wMsg, int wParam, uint lParam);<\/pre>\n<p>Nun muss ich nur noch Winamp abfragen, ob es gerade spielt oder im Pause Modus ist und dann ein Pause Command schicken und sonst ein Play Command. Das sieht dann so aus:<\/p>\n<pre class=\"brush: csharp; gutter: true; title: ; toolbar: true; wrap-lines: false; notranslate\" title=\"\">\r\nprivate void Play_Pause_Winamp()\r\n{\r\n    IntPtr hwnd = FindWindow(m_windowName, null);\r\n\r\n    if (hwnd == IntPtr.Zero)\r\n    {\r\n        Console.WriteLine(&quot;Winamp is not running.&quot;);\r\n    }\r\n    else\r\n    {\r\n        \/\/ GetPlaybackStatus\r\n        int status = SendMessageA(hwnd, WM_WA_IPC, WA_NOTHING, IPC_ISPLAYING);\r\n        if (status == 1 || status == 3)\r\n        {\r\n            \/\/ Pause\/Unpause\r\n            SendMessageA(hwnd, WM_COMMAND, WA_PAUSE, WA_NOTHING);\r\n        }\r\n        else\r\n        {\r\n            \/\/ Start playing\r\n            SendMessageA(hwnd, WM_COMMAND, WA_PLAY, WA_NOTHING);\r\n        }\r\n    }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem ich nun die mittlere Maustaste abfangen kann, muss ich jetzt nur noch Winamp steuern k\u00f6nnen. Relativ schnell fand ich heraus, dass man mit WM_COMMAND Befehle an Winamp senden kann. Leider kein kombiniertes Play\/Pause. Also muss ich zuerst den Status abfangen und je nach dem Play oder Pause\/Unpause senden.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4,3],"tags":[11,10],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-roemer","4":"has-more-link","5":"post-7","7":"format-standard","8":"category-csharp","9":"category-programming","10":"post_tag-control","11":"post_tag-winamp"},"acf":[],"views":3800,"_links":{"self":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7"}],"collection":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":0,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7\/revisions"}],"wp:attachment":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}