#include int main(int argc, char **argv) { int returncode; long written; DCB dcb = {0}; dcb.DCBlength = sizeof(DCB); HANDLE commport = NULL; HANDLE logfile = NULL; commport = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0); logfile = CreateFileW(L"\\Temp\\sendcom.log", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0); if (!(commport == INVALID_HANDLE_VALUE)) { if (GetCommState(commport, &dcb)) { WriteFile(logfile, &dcb, sizeof(DCB), &written, NULL); dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; // disable all hardware handshaking, parity, flow control dcb.fParity = FALSE; dcb.fOutX = FALSE; dcb.fInX = FALSE; dcb.fRtsControl = RTS_CONTROL_DISABLE; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fOutxCtsFlow = FALSE; dcb.fOutxDsrFlow = FALSE; dcb.fAbortOnError = FALSE; // would require more coding if TRUE if (SetCommState(commport, &dcb)) { printf("Writing %s to COM1\n", argv[1]); // for debugging, change handle to STD_OUTPUT_HANDLE (works OK that way) //commport = GetStdHandle(STD_OUTPUT_HANDLE); if (WriteFile(commport, argv[1], strlen(argv[1]), &written, NULL)) { returncode = 0; } else { printf("Failed, Windows error number is %d\n", GetLastError()); returncode = 1; } } else { returncode = 2; } } else { // GetCommState() failed returncode = 3; } } else { printf("invalid commport handle: 0x%x\n", commport); returncode = 4; } CloseHandle(commport); return returncode; }