Exemple

Voici un exemple de la manière de construire et d'utiliser un objet ECLKeyNotify.

// ECLKeyNotify class // // This sample demonstrates the use of: // // ECLKeyNotify::NotifyEvent // ECLKeyNotify::NotifyError // ECLKeyNotify::NotifyStop // ECLPS::RegisterKeyEvent // ECLPS::UnregisterKeyEvent //------------------------------------------------------------------- //................................................................... // Define a class derived from ECLKeyNotify //................................................................... class MyKeyNotify: public ECLKeyNotify { public: // Define my own constructor to store instance data MyKeyNotify(HANDLE DataHandle); // We have to implement this function virtual int NotifyEvent(ECLPS *PSObj, char const KeyType[2], const char * const KeyString); // We choose to implement this function void NotifyStop (ECLPS *PSObj, int Reason); // We will take the default behaviour for this so we // don't implement it in our class: // void NotifyError (ECLPS *PSObj, ECLErr ErrObject); private: // We will store our application data handle here HANDLE MyDataH; }; //.................................................................. MyKeyNotify::MyKeyNotify(HANDLE DataHandle) // Constructor //................................................................... { MyDataH = DataHandle; // Save data handle for later use } //................................................................... int MyKeyNotify::NotifyEvent(ECLPS *PSObj, char const KeyType[2], const char * const KeyString)
//................................................................... { // This function is called whenever a keystroke occurs. We will // just do something simple: when the user presses PF1 we will // send a PF2 to the host instead. All other keys will be unchanged. if (KeyType[0] == 'M') { // Is this a mnemonic keyword? if (!strcmp(KeyString, "[pf1]")) { // Is it a PF1 key? PSObj->SendKeys("[pf2]"); // Send PF2 instead printf("Changed PF1 to PF2 on connection %c.\n", PSObj->GetName()); return 1; // Discard this PF1 key } } return 0; // Process key normally } 
//.................................................................. void MyKeyNotify::NotifyStop (ECLPS *PSObj, int Reason) //................................................................... { // When notification ends, display message printf("Keystroke intercept for connection %c stopped.\n", PSObj->GetName()); } //................................................................... // Create the class and start keystroke processing on A and B. //................................................................... void Sample44() { ECLPS *PSA, *PSB; // PS objects MyKeyNotify *Event; // Ptr to my event handling object HANDLE InstData; // Handle to application data block (for example) try { PSA = new ECLPS('A'); // Create PS objects PSB = new ECLPS('B'); Event = new MyKeyNotify(InstData); // Create event handler PSA->RegisterKeyEvent(Event); // Register for keystroke events PSB->RegisterKeyEvent(Event); // Register for keystroke events 
 // At this point, any keystrokes on A or B will cause the // MyKeyEvent::NotifyEvent() function to execute. For // this sample, we put this thread to sleep during this // time. printf("Processing keystrokes for 60 seconds on A and B...\n"); Sleep(60000); // Now stop event generation. This will cause the NotifyStop // member to be called. PSA->UnregisterKeyEvent(Event); PSB->UnregisterKeyEvent(Event); delete Event; // Don't delete until after unregister! delete PSA; delete PSB; } catch (ECLErr Err) { printf("ECL Error: %s\n", Err.GetMsgText()); } } // end sample //-------------------------------------------------------------------