Example
The following is an example of how to construct and use an ECLKeyNotify object.
// 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
//-------------------------------------------------------------------