• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • com_event_sink()

    (PHP 4 >= 4.2.0, PHP 5, PHP 7)

    Connect events from a COM object to a PHP object

    说明

    com_event_sink(variant$comobject,object $sinkobject[,mixed $sinkinterface]): bool

    Instructs COM to sink events generated by$comobjectinto the PHP object$sinkobject.

    Be careful how you use this feature; if you are doing something similar to the example below, then it doesn't really make sense to run it in a web server context.

    参数

    $comobject
    $sinkobject

    $sinkobjectshould be an instance of a class with methods named after those of the desired dispinterface; you may use com_print_typeinfo() to help generate a template class for this purpose.

    $sinkinterface

    PHP will attempt to use the default dispinterface type specified by the typelibrary associated with$comobject, but you may override this choice by setting$sinkinterfaceto the name of the dispinterface that you want to use.

    返回值

    成功时返回TRUE,或者在失败时返回FALSE

    范例

    COM event sink example

    <?php
    class IEEventSinker {
        var $terminated = false;
       function ProgressChange($progress, $progressmax) {
          echo "Download progress: $progress / $progressmax\n";
        }
        function DocumentComplete(&$dom, $url) {
          echo "Document $url complete\n";
        }
        function OnQuit() {
          echo "Quit!\n";
          $this->terminated = true;
        }
    }
    $ie = new COM("InternetExplorer.Application");
    // note that you don't need the & for PHP 5!
    $sink = new IEEventSinker();
    com_event_sink($ie, $sink, "DWebBrowserEvents2");
    $ie->Visible = true;
    $ie->Navigate("http://www.example.org");
    while(!$sink->terminated) {
      com_message_pump(4000);
    }
    $ie = null;
    ?>
    

    参见

    I got voice recognition working. I'm not sure why the way I called the sink function made it work but I'm more about results right now. This small example had me rolling on the floor laughing.
    <?php
    /* 
     * Search this for more info on the voice stuff:
     * Automation Interfaces and Objects (SAPI 5.4)
     */
    //directions: 
    //php friend.php
    //then fire up windows voice recognition and turn it on and say stuff
    $voice = new COM("SAPI.SpVoice");
    print "Hit control+c to end.\n";
    print "Friend: Hello friend!\n";
    $voice->Speak("Hello friend!");
    class listen
    {
      
      function Recognition($StreamNumber, $StreamPosition, $RecognitionType, $ISpeechRecoResult)
      {
        
        $phrase = $ISpeechRecoResult->PhraseInfo;
        $text = $phrase->GetText();
        
        print "\nYou:$text\n";
       
        
        global $voice;
        $say = array('oh', 'nice', 'humm', 'interesting', 'you dont say', 'uh huh', 'right', 'what', 'ha ha', 'you have got to be joking', 'right back at you buddy');
        $idx = rand(0, count($say)-1);
        
        print "Friend: " . $say[$idx] . "\n";
        $voice->Speak($say[$idx]);
        
      }
      
    }
    $recog = new COM("SAPI.SpSharedRecognizer");
    $context = $recog->CreateRecoContext();
    //SRERecognition = 16 (default)
    //SREAllEvents = 393215
    //$context->EventInterests = 393215;
    //try to listen to events on context
    $listen = new listen(); //event handler
    if (!com_event_sink($context, $listen, "RecognizerStateChange"))
    {
      print "Unable to sink events\n";
      exit;
    }
    $grammar = $context->CreateGrammar();
    $i = $grammar->DictationLoad();
    $s = $grammar->DictationSetState(1); //1=on, 0=off
    while(true)
    {
      
      if(!com_message_pump(1000))
      {
        print ".";
      }
      
    }
    ?>
    
    In case someone needs a skeleton sink for ADODB.Connection events:
    class ADOConnectionEventSink  {
      function BeginTransComplete( $translevel, $objerror, $status, $objconn )  {
        return 0;
      }
      function CommitTransComplete( $objerror, $status, $objconn )  {
        return 0;
      }
      function RolbackTransComplete( $objerror, $status, $objconn )  {
        return 0;
      }
      function WillConnect ( $ConnectionString, $userid, $psword, $options, $status, $objconn )  {
        return 0;
      }
      function ConnectComplete ( $objerror, $status, $objconn)  {
        return 0;
      }
      function Disconnect( $status, $objConn )  {
        return 0;
      }
      function WillExecute ( $src, $cursortyp, $locktyp, $options, $status, $objcomm, $objrs, $objconn )  {
        return 0;
      }
      function ExecuteComplete ( $recaffected, $objerror, $status, $objcomm, $objrs, $objconn )  {
        return 0;
      }
      function InfoMessage ( $objerror, $status, $objconn)  {
        return 0;
      }
    }
    // later on...
    $db = new COM("ADODB.Connection", NULL, $charPage);
    $sink = new ADOConnectionEventSink();
    com_event_sink($db, $sink, "ConnectionEvents");
    //...