Sample: WindowsEvent.cpp
//------------------------------------------------------------------------------ // // SimConnect Windows Event Sample // // Description: // Requests a four second timing event, and implements a Windows // Event handler to minimize processing time //------------------------------------------------------------------------------ #include <windows.h> #include <tchar.h> #include <stdio.h> #include "SimConnect.h" static enum EVENT_ID { EVENT_4S, }; int quit = 0; HANDLE hSimConnect = NULL; static int tick = 0; void CALLBACK MyDispatchProcWE(SIMCONNECT_RECV* pData, DWORD cbData, void *pContext) { switch(pData->dwID) { case SIMCONNECT_RECV_ID_EVENT: { SIMCONNECT_RECV_EVENT *evt = (SIMCONNECT_RECV_EVENT*)pData; switch(evt->uEventID) { case EVENT_4S: printf("\n4 second timer: %d", ++tick); break; default: printf("\nSIMCONNECT_RECV_EVENT: 0x%08X 0x%08X 0x%X", evt->uEventID, evt->dwData, cbData); break; } break; } case SIMCONNECT_RECV_ID_QUIT: { quit = 1; break; } default: printf("\nUNKNOWN DATA RECEIVED: pData=%p cbData=%d\n", pData, cbData); break; } } bool testWindowsEvent() { HANDLE hEventHandle = ::CreateEvent(NULL, FALSE, FALSE, NULL); if(hEventHandle == NULL) { printf("Error: Event creation failed!"); return false; } HRESULT hr; if (SUCCEEDED(SimConnect_Open(&hSimConnect;, "Windows Event", NULL, 0, hEventHandle, 0))) { printf("\nConnected...!"); // Subscribe to the four second timer hr = SimConnect_SubscribeToSystemEvent(hSimConnect, EVENT_4S, "4sec"); // Check for messages only when a Windows event has been received while( 0 == quit && ::WaitForSingleObject(hEventHandle, INFINITE) == WAIT_OBJECT_0) { SimConnect_CallDispatch(hSimConnect, MyDispatchProcWE, NULL); } CloseHandle(hEventHandle); hr = SimConnect_Close(hSimConnect); return true; } return false; } int __cdecl _tmain(int argc, char* argv[]) { bool ok = testWindowsEvent(); return 0; } |