#include #include #include "faxutil.h" #include "winfax.h" typedef struct _EVENT_STRINGS { DWORD EventId; LPWSTR EventStr; } EVENT_STRINGS, *PEVENT_STRINGS; EVENT_STRINGS EventStrings[] = { FEI_DIALING, L"Dialing", FEI_SENDING, L"Sending", FEI_RECEIVING, L"Receiving", FEI_COMPLETED, L"Completed", FEI_BUSY, L"Busy", FEI_NO_ANSWER, L"No Answer", FEI_BAD_ADDRESS, L"Bad Address", FEI_NO_DIAL_TONE, L"No Dial Tone", FEI_DISCONNECTED, L"Disconnected", FEI_FATAL_ERROR, L"Fatal Error", FEI_NOT_FAX_CALL, L"Not a Fax Call", FEI_CALL_DELAYED, L"Call Delayed", FEI_CALL_BLACKLISTED, L"Call Blacklisted", FEI_RINGING, L"Ringing", FEI_ABORTING, L"Aborting", FEI_ROUTING, L"Routing", FEI_MODEM_POWERED_ON, L"Modem Powered Off", FEI_MODEM_POWERED_OFF, L"Modem Powered On", FEI_IDLE, L"Idle", FEI_FAXSVC_ENDED, L"Fax Service Ended", 0, L"Unknown Event" }; #define NumEventStrings ((sizeof(EventStrings)/sizeof(EVENT_STRINGS))-1) HANDLE CompletionPort; BOOL ConsoleHandlerRoutine( DWORD CtrlType ) { if (CtrlType == CTRL_C_EVENT) { PostQueuedCompletionStatus( CompletionPort, 0, (DWORD) -1, 0 ); return TRUE; } return FALSE; } PFAX_PORT_INFO_1 MyFaxEnumPorts( HFAX hFaxSvc, LPDWORD pcPorts ) { PVOID pSvcPorts = NULL; DWORD cb; if (!FaxEnumPorts(hFaxSvc, (LPBYTE*) &pSvcPorts, &cb, 1, pcPorts)) { pSvcPorts = NULL; } return pSvcPorts; } int _cdecl wmain( int argc, wchar_t *argv[] ) { HFAX hFax = NULL; PFAX_EVENT FaxEvent; BOOL Rval; DWORD Bytes; DWORD CompletionKey; SYSTEMTIME EvtTime; PFAX_PORT_INFO_1 PortInfo; DWORD PortCount; DWORD i; FAX_PORT_HANDLE FaxPortHandle = 0; LPWSTR ComputerName = NULL; HeapInitialize(NULL,NULL,NULL,0); if (argc > 1) { ComputerName = argv[1]; } if( !FaxConnectFaxServer( ComputerName, &hFax ) ){ wprintf( L"FaxConnectFaxServer failed ec = %d\n", GetLastError() ); return -1; } CompletionPort = CreateIoCompletionPort( INVALID_HANDLE_VALUE, NULL, 0, 1 ); if (!CompletionPort) { wprintf( L"CreateIoCompletionPort() failed, ec=0x%08x\n", GetLastError() ); return -1; } PortInfo = MyFaxEnumPorts( hFax, &PortCount ); if (!PortInfo) { wprintf( L"MyFaxEnumPorts() failed, ec=0x%08x\n", GetLastError() ); return -1; } for (i=0; iTimeStamp, &EvtTime ); for (i=0; iEventId == EventStrings[i].EventId) { break; } } wprintf( L"%02d:%02d:%02d.%03d hServer=0x%08x, hPort=0x%08x, device=0x%08x, event=0x%08x %ws\n", EvtTime.wHour, EvtTime.wMinute, EvtTime.wSecond, EvtTime.wMilliseconds, FaxEvent->FaxServerHandle, FaxEvent->FaxPortHandle, FaxEvent->DeviceId, FaxEvent->EventId, EventStrings[i].EventStr ); LocalFree( FaxEvent ); } if (hFax) { Rval = FaxDisconnectFaxServer( hFax ); } return -1; }