com_event_sink
(PHP 4 >= 4.2.0, PHP 5)
com_event_sink — Connect events from a COM object to a PHP object
Description
Instructs COM to sink events generated by
comobject
into 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.
Parameters
-
comobject
-
-
sinkobject
-
sinkobject
should 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 settingsinkinterface
to the name of the dispinterface that you want to use.
Return Values
Returns TRUE
on success or FALSE
on failure.
Examples
Example #1 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;
?>
See Also
- com_print_typeinfo() - Print out a PHP class definition for a dispatchable interface
- com_message_pump() - Process COM messages, sleeping for up to timeoutms milliseconds
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения только для Windows
- COM и .Net (Windows)
- com_create_guid
- com_event_sink
- com_get_active_object
- com_load_typelib
- com_message_pump
- com_print_typeinfo
- variant_abs
- variant_add
- variant_and
- variant_cast
- variant_cat
- variant_cmp
- variant_date_from_timestamp
- variant_date_to_timestamp
- variant_div
- variant_eqv
- variant_fix
- variant_get_type
- variant_idiv
- variant_imp
- variant_int
- variant_mod
- variant_mul
- variant_neg
- variant_not
- variant_or
- variant_pow
- variant_round
- variant_set_type
- variant_set
- variant_sub
- variant_xor
Коментарии
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");
//...
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 ".";
}
}
?>