Когда дело доходит до таких решений, я часто избегаю реального уровня коммуникации. Я бы смоделировал вывод, который вы хотите отправить, и включил локальную очередь принтеров, которую вы уже создали в локальной системе. Это позволит Windows обрабатывать связь через COM-порт и обрабатывать все элементы низкого уровня, такие как отключение очереди печати, если принтер выключен и т. Д.
Взгляните сюда: http://support.microsoft.com/kb/322091
Обычно я делаю это и для USB-принтеров, поэтому мне не нужно отслеживать, к какому USB-порту подключен принтер, а если на нем нет бумаги, Windows обрабатывает очереди и т. Д.