Windows XP - mit PHP Prozesse beeinflussen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    funktioniert der VB Code? schon getestet?
    Folgender VB Code funktioniert:

    Set WMPplugin = CreateObject("WMPuICE.WMPApp")
    Set WMPCtrl = WMPplugin.Core
    WMPCtrl.Controls.pause

    In dem Falle pausiert der WMP.

    Meine umwandlung in PHP:

    $WMPplugin = new COM("WMPuICE.WMPApp");
    $WMPCtrl=$WMPplugin->Core;
    $WMPCtrl->Controls->pause;

    .. führt leider nur zu der oben genannten Fehlermeldung

    Ansonstens mach mal so:

    PHP-Code:
    echo "<pre>\n";
    com_print_typeinfo($WMPplugin);
    echo 
    "</pre>\n"
    poste dann die Ausgabe hierein, denn wie kann man denn da zurecht finden
    Ahh... man lernt nie aus

    Code:
    class IWMPApp { /* GUID={4ACBB5B8-B718-4B15-89C3-7046B6A164F5} */
    	/* DISPID=1610612736 */
    	function QueryInterface(
    		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    		/* VT_PTR [26] [out] --> VT_PTR [26]  */ &$ppvObj 
    		)
    	{
    	}
    	/* DISPID=1610612737 */
    	/* VT_UI4 [19] */
    	function AddRef(
    		)
    	{
    	}
    	/* DISPID=1610612738 */
    	/* VT_UI4 [19] */
    	function Release(
    		)
    	{
    	}
    	/* DISPID=1610678272 */
    	function GetTypeInfoCount(
    		/* VT_PTR [26] [out] --> VT_UINT [23]  */ &$pctinfo 
    		)
    	{
    	}
    	/* DISPID=1610678273 */
    	function GetTypeInfo(
    		/* VT_UINT [23] [in] */ $itinfo,
    		/* VT_UI4 [19] [in] */ $lcid,
    		/* VT_PTR [26] [out] --> VT_PTR [26]  */ &$pptinfo 
    		)
    	{
    	}
    	/* DISPID=1610678274 */
    	function GetIDsOfNames(
    		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    		/* VT_PTR [26] [in] --> VT_PTR [26]  */ &$rgszNames,
    		/* VT_UINT [23] [in] */ $cNames,
    		/* VT_UI4 [19] [in] */ $lcid,
    		/* VT_PTR [26] [out] --> VT_I4 [3]  */ &$rgdispid 
    		)
    	{
    	}
    	/* DISPID=1610678275 */
    	function Invoke(
    		/* VT_I4 [3] [in] */ $dispidMember,
    		/* VT_PTR [26] [in] --> ? [29]  */ &$riid,
    		/* VT_UI4 [19] [in] */ $lcid,
    		/* VT_UI2 [18] [in] */ $wFlags,
    		/* VT_PTR [26] [in] --> ? [29]  */ &$pdispparams,
    		/* VT_PTR [26] [out] --> VT_VARIANT [12]  */ &$pvarResult,
    		/* VT_PTR [26] [out] --> ? [29]  */ &$pexcepinfo,
    		/* VT_PTR [26] [out] --> VT_UINT [23]  */ &$puArgErr 
    		)
    	{
    	}
    	/* DISPID=1 */
    	/* VT_DISPATCH [9] */
    	/* property Core */
    	var $Core;
    
    	/* DISPID=2 */
    	function Open(
    		)
    	{
    		/* method Open */
    	}
    	/* DISPID=3 */
    	function Close(
    		)
    	{
    		/* method Close */
    	}
    	/* DISPID=4 */
    	/* VT_BOOL [11] */
    	/* property Running */
    	var $Running;
    
    	/* DISPID=4 */
    	/* property Running */
    	var $Running;
    
    	/* DISPID=5 */
    	function FullScreen(
    		)
    	{
    		/* method FullScreen */
    	}
    	/* DISPID=6 */
    	function Up(
    		)
    	{
    		/* method Up */
    	}
    	/* DISPID=7 */
    	function Down(
    		)
    	{
    		/* method Down */
    	}
    	/* DISPID=8 */
    	function Left(
    		)
    	{
    		/* method Left */
    	}
    	/* DISPID=9 */
    	function Right(
    		)
    	{
    		/* method Right */
    	}
    	/* DISPID=10 */
    	function Select(
    		)
    	{
    		/* method Select */
    	}
    }
    Gruß Rene

    Kommentar


    • #17
      hm... wie man sieht gibt es die Collection Controls nicht, zumindest nicht direkt, hast du eine Möglichkeit einen Debugger zu verwenden, wenn ja dann kannst du mal reinschauen, eventuell die Invoke-Methode genauer anzuschauen, denn meist geht's drüber

      Aber warum denn immer noch diese Verrenkung? Nutze WSH und greife über WMI auf x-beliebigen Rechner im Netzwerk, dann kannst du den VB(S) Code verwenden.

      Kommentar


      • #18
        Original geschrieben von asp2php
        [B]hm... wie man sieht gibt es die Collection Controls nicht, zumindest nicht direkt,
        Ja die gibt es auch nicht direkt. Controls befindet sich hinter Core.

        Die Ausgabe oben stammt von

        $WMPplugin = new COM("WMPuICE.WMPApp");

        Um an die Controls zu kommen, muss ich (meines Wissens) diese so aufrufen:

        $WMPplugin
        ->Core //Steht oben in der Ausgabe als "var $Core;" (property Core).
        ->Controls //Hier gibt es dann die Collection Controls
        ...

        Die Frage ist jetzt nur, wie ich auf "Core" und dann auf "Controls" zugreife?

        Core ist als variable deklariert (laut Ausgabe oben). Und nach dem, was ich bis jetzt gelesen habe, nennt man das property (ich hoffe ich liege richtig).

        Drum nochmal kurz und knapp meine eigentliche Frage: Wie greife ich auf die property Core zu? Und wieso funktioniert $WMPplugin->Core nicht?


        PS: Warum diese Verrenkungen.... Gute Frage... Ich hab nicht wirklich ne Antwort drauf. Nur wenn ich es lokal als *.vb(s) abspeicher, kann ich ja keine Ergebnisse abgreifen. Aber eigentlich finde ich den bis jetzt eingeschlagenden Weg nicht schlecht. Nur willhalt der Zugriff auf Core nicht funktionieren.

        PPS: Ich weiß, mein Vorgehen ist überhaupt nicht nachvollziehbar und für manchen vielleicht auch dumm. Naja, auf jeden Fall möchte ich dir schonmal danken, dass du mir überhaupt hilfst

        Gruß Rene

        Kommentar


        • #19
          Original geschrieben von moista
          Ja die gibt es auch nicht direkt. Controls befindet sich hinter Core.

          Die Ausgabe oben stammt von

          $WMPplugin = new COM("WMPuICE.WMPApp");
          Sorry, hab' nicht genau gesehen.

          OK, welche Zeile ist die 539? Ist das die Zeile mit dem Erzeugen des Instanz $WMPplugin = new COM("WMPuICE.WMPApp"); ? Wenn ja, dann sieht nach Zugriffsrechteproblem aus. Sagt Bescheid

          Kommentar


          • #20
            Ok... Sorry... Die Zeilenangabe hätte ich schon angeben müssen.

            Die problematische Zeile ist folgende:

            $WMPCtrl = $WMPplugin->Core;

            Das ganze habe ich als Funktion gemacht und diese sieht so aus:

            function WMPoverVBS($mode,$item) {
            $WMPplugin = new COM("WMPuICE.WMPApp");
            $WMPCtrl = $WMPplugin->Core;

            if($mode == "set") {
            if($item == "play") $WMPCtrl->Controls->Play;
            } elseif($mode == "get") {
            if($item == "Status") $rtn = $WMPCtrl->playState;
            }
            }

            OK... Ich hab jetzt mal ein bisschen weitergedacht... Angenommen ich lass die fehlerhafte zeile weg und ersetzte die variable $WMPCtrl im weiteren verlauf der Funktion durch $WMPplugin->Core müsste es ja einen anderen Fehler geben. Direkt mal ausprobiert:

            function WMPoverVBS($mode,$item) {
            $WMPplugin = new COM("WMPuICE.WMPApp");

            if($mode == "set") {
            if($item == "play") $WMPplugin->Core->Controls->Play;
            } elseif($mode == "get") {
            if($item == "Status") $rtn = $WMPplugin->Core->playState;
            }
            }

            Fehlermeldung:

            Fatal error: Uncaught exception 'com_exception' with message 'Source: Unknown
            Description: Unknown' in C:\Programme\xampp\htdocs\myhtdocs\homecontrol\index.php:538 Stack trace: #0 C:\Programme\xampp\htdocs\myhtdocs\homecontrol\index.php(538): WMPoverVBS() #1 C:\Programme\xampp\htdocs\myhtdocs\homecontrol\index.php(533): WMPoverVBS('get', 'Status') #2 {main} thrown in C:\Programme\xampp\htdocs\myhtdocs\homecontrol\index.php on line 538

            Zeile 538 entspricht:

            if($item == "play") $WMPplugin->Core->Controls->Play;


            Bin langsam echt am Ende - Vor allem ist das echt mal eine Fehlermeldung, mit der man absolut gar nichts anfangen kann

            Gruß Rene

            Kommentar


            • #21
              1. ich finde das recht intressant
              aber
              2. mir stellt sich nun die frage weshabl in PHP programmieren??
              weil: Du lädst dir von einer beliebigen VB seite nen netzwerk chat runter,
              da gibt es dann meist eine zeile die sich:
              Code:
              Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
              nennt,
              darunter könnte man dann:
              Code:
               
              Dim command As String
              
              Winsock1.GetData command
              schreiben, der rest wäre eine einfach case-verzweigung z.B.:
              case comand
              case "open"
              Call "C:\player.exe"
              case "play"

              case "close"

              case "open"

              etc.
              Das Leben ist wie ein Adventure - nur die Grafik ist geiler^^

              Bitte verwirren sie mich nicht mit tatsachen - meine meinung steht fest

              Kommentar


              • #22
                hm ... ich behaupte einfach (mehr oder weniger auch als Schuß ins Blaue ), dass es sich um Rechteprobleme handelt, denn Erfahrungsgemäß, gibt der Parser (egal ob PHP oder ASP) meist die Zeilennummer an, wo er stoppt und nicht immer (es kommt aber auch vor, dass er doch die richtige anzeigt ) die Fehlerzeile. Daher versuch mal Zugriffsrechte für den Webserveruser einzuräumen. Rufe dazu dcomcnfg.exe auf, und stelle Zugriffsrechte ein.

                Kommentar


                • #23
                  Original geschrieben von asp2php
                  hm ... ich behaupte einfach (mehr oder weniger auch als Schuß ins Blaue ), dass es sich um Rechteprobleme handelt, denn Erfahrungsgemäß, gibt der Parser (egal ob PHP oder ASP) meist die Zeilennummer an, wo er stoppt und nicht immer (es kommt aber auch vor, dass er doch die richtige anzeigt ) die Fehlerzeile. Daher versuch mal Zugriffsrechte für den Webserveruser einzuräumen. Rufe dazu dcomcnfg.exe auf, und stelle Zugriffsrechte ein.
                  OK. Das kann ich jetzt leider nicht 100%ig ausschließen, aber das kann man doch eigentlich (rein logisch) ausschließen, oder?
                  Ich schließe das daraus, dass $WMPplugin->open() / close() etc funktioniert.

                  ABER: Man soll ja auch nicht zu logisch an die Sache rangehen. Deshalb:
                  Meines Wissens kann ich der einer DLL (Das Programm, welches den WMP ausließt bzw die Aktionen auslöst) keine Rechte geben. Diese habe ich also lediglich registriert (regsvr32)
                  Des weiteren habe ich am Apache-Dienst die Option "Interaktion mit Desktop zulassen" aktiviert. (Davor hatte ich Probleme, Programme überhaupt erst zu starten - Aber da gab es keine Fehlermeldungen, sondern startete z.B. der WMP, aber war nur im Taskmanager zu sehen [WMP-Plugin gabs da noch nicht, geht lediglich um den Programmstart])
                  Ja und dann habe ich versucht, den Dienst auf verschiedenen Benutzern laufen zu lassen. Naja bringt nichts.

                  UND WEITER:

                  Da du die Problemlösung schon woanders suchst, schließe ich daraus, dass ich das, ja wie soll ich es nennen, DLL-Plugin für den WMP PHP-mäßig richtig behandle/aufrufe.

                  $WMPplugin->Core->Controls-Play;

                  So und daraus wiederrum schließe ich, dass das Problem irgendwie unlösbar ist. Ich weiß ja nicht wie es mit Zeit und Lust aussieht, aber vielleicht sollte ich einfach mal ein Link zum Plugin geben:

                  http://www.mediatexx.com/download/wmpuice.zip

                  Vielleicht kann einer aus der DLL irgendetwas herausholen.

                  Dankeschön bis hierhin schonmal


                  @IcedAngel

                  Eigentlich nur:

                  Eigentlich kann ich nur mit PHP >umgehen<. Soll heissen ich hab es nie >wirklich< gelernt. eher: Learning by doing. Ich war längere Zeit Tech-Admin an einem wbb-Board. Dadurch beschränkt sich mein Wissen nur auf hack-Einbau, Hack-Erstellung, etc.
                  Allerdings bleibt noch zu sagen, dass ich gerne mal mit PHP gespielt habe - Ich hab die verrücktesten Scripte gebaut

                  Kurzum: Ich kenn es einfach nicht anders und nutze deshalb PHP. Klar - Man muss auch mal über den Horizont hinaus schauen, das hab ich auch später noch vor, allerdings im moment noch nicht. Noch dazu: Wieder würde ich es durch Learning by doing lernen, was auch eine ganze Zeit lang dauern würde.


                  Gudden Tach noch

                  Gruß - Rene

                  Kommentar


                  • #24
                    1) Meinst Du nicht das es dann an der Zeit ist sich eine neue Sprache anzueignen?
                    2)Warum nutzt du nicht Remotedesktopverbindung oder änliches?
                    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                    PHP Sicherheit
                    PHPUnit[1-2]
                    Professionelle Softwareentwicklung mit PHP 5
                    Professionelle PHP 5-Programmierung

                    Kommentar


                    • #25
                      Original geschrieben von schlimmerfinger
                      1) Meinst Du nicht das es dann an der Zeit ist sich eine neue Sprache anzueignen?
                      2)Warum nutzt du nicht Remotedesktopverbindung oder änliches?
                      zu 1:

                      Original geschrieben von moista
                      Ich kenn es einfach nicht anders und nutze deshalb PHP. Klar - Man muss auch mal über den Horizont hinaus schauen, das hab ich auch später noch vor, allerdings im moment noch nicht. Noch dazu: Wieder würde ich es durch Learning by doing lernen, was auch eine ganze Zeit lang dauern würde.
                      Zu 2:

                      1. Ganz spontan frage ich mich dann, warum es überhaupt möglich ist als Normaluser zu programmieren (nennen wir es einfach mal so ). Klar - Man kann sich das Leben leicht machen und nur Programme nutzen, die es schon gibt. Aber entsprechen die auch den eigenen Wünschen?

                      2. Ich weiß nicht, ob ich es vorher schonmal geschrieben hatte, aber die RDV ist ein bisschen überladen für meine Zwecke. Vor allem kam mir neulich die Idee, dass ich mich bei diesem Webinterface auch als gast anmelden kann - sprich nur Play/Pause. Gut wenn man mal Gäste hat - Aber das ist schon wieder ein anderes Thema. (Wie ich schon sagte, der Rechner ist nur für Multimediazwecke, deshalb keinen eigene Steuerung durch Tast/Maus).
                      Auf jedem Fall bietet mir die RDV hier viel zu viel - vor allem zu viel von für mich unnötigen

                      BTW: Mir wurde schon ein Prog empfohlen, dass der RDV sehr ähnelt und über den Browser funktioniert - nur ist das nicht mein Wunsch.

                      Kommentar


                      • #26
                        kannst du mal dein Code zur Verfügung stellen, ich werd' mal probieren. Einfach als txt anhängen.

                        Kommentar


                        • #27
                          Ähm, ich hab das noch nicht verbaut... Jedenfalls nicht die WMPplugin-> Sache.

                          Im Moment:

                          wmp.php


                          PHP-Code:
                          <?php

                          wmp
                          ();

                          function 
                          wmp(){
                           
                          $WMPplugin = new COM("WMPuICE.WMPApp");
                           if(
                          $WMPplugin$WMPCtrl $WMPplugin->Core;
                           
                          $WMPCtrl->Controls->Play;
                          }

                          ?>
                          Gut, die Funktion sah zeitweise anders aus, aber der Kern hat sich nicht verändert.

                          Ein VB-Script habe ich aber auch noch rumfliegen... irgendwo im Netz gefunden
                          Möchtest du das haben?

                          So ich bin dann für heute weg.

                          Schönen Abend noch

                          Gruß Rene

                          Kommentar


                          • #28
                            Original geschrieben von asp2php
                            hm ... ich behaupte einfach (mehr oder weniger auch als Schuß ins Blaue ), dass es sich um Rechteprobleme handelt, denn Erfahrungsgemäß, gibt der Parser (egal ob PHP oder ASP) meist die Zeilennummer an, wo er stoppt und nicht immer (es kommt aber auch vor, dass er doch die richtige anzeigt ) die Fehlerzeile. Daher versuch mal Zugriffsrechte für den Webserveruser einzuräumen. Rufe dazu dcomcnfg.exe auf, und stelle Zugriffsrechte ein.
                            Du hattest recht! Und ich habe zu logisch gedacht

                            Und zwar muss man ein Array mit Benutzername etc mit instanzieren.

                            So sieht das ganze dann also aus:

                            $login = array("Server"=>"PCNAME","Username"=>"Administrator","Password"=>"123456");
                            $variable = new com("WMPuice.WMPApp",$login);
                            $variable->Core->Controls->Play();

                            Und schon funktioniert's.

                            Ich möchte mich ganz herzlich für die Hilfe bedanken. Ohne hätte ich es bestimmt nicht so weit geschafft.

                            Gruß Rene

                            Kommentar

                            Lädt...
                            X