Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Как приостановить работу с COM портом?


Автор: csander 6.4.2009, 08:25
Доброго времени суток всем. 
Хотелось бы попросить помочь в решении проблемы:
Есть приложение, написанное на Delphi для термопринтера Citizen PPU-700, которое печатает чек:
Код

procedure TForm1.FormShow(Sender: TObject);
begin
BComPort1.Port :='COM3';
BComPort1.BaudRate:=TBaudRate(8);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
BComPort1.Open;
BComPort1.WriteStr('================================================');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('* *');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('* THE *');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('* EXAMPLE *');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('* PRINT *');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('* *');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr('================================================');
BComPort1.WriteStr(#$0A);
BComPort1.WriteStr(#$1B#$6D);
BComPort1.Close;
end;


Но есть и основное ПО киоска, которое постоянно висит на COM порте. При нажатии на кнопку "Печать", чек не печатается. Но при завершении работы ПО киоска, он естественно выходит на печать. 
Вопрос: Можно ли каким то образом вмешаться в работу ПО киоска через АПИ функции, чтобы приостановить его работу с портом, и распечатать?

Автор: Romikgy 6.4.2009, 14:12
имхо 

Цитата(csander @  6.4.2009,  07:25 Найти цитируемый пост)
работу ПО киоска

можно перезапускать в принудительном порядке,
или писать в порты напрямую....

Автор: csander 6.4.2009, 17:22
а как писать напрямую в порт?
никогда с этим не сталкивался, поэтому был бы признателен любой помощи

Автор: Virtuals 7.4.2009, 05:24
csander, http://forum.vingrad.ru/forum/topic-254374/anchor-entry1835068/0.html#look
 smile форум сам для тебя ищет

ЗЫ имхо скачай DRKB, надолго хватит для изучения основ и не только smile 

Автор: csander 8.4.2009, 07:00
то что предложил форум не то, что нужно. там только описание как работать с портом. а мне нужно процесс, который висит на порте заморозить. а после того, как я выполню то что мне нужно, разморозить, чтобы процесс продолжил работу. 
каким образом можно остановить процесс, зная только имя процесса и все? не зная PID...

Автор: MetalFan 8.4.2009, 08:43
Цитата(csander @  8.4.2009,  07:00 Найти цитируемый пост)
зная только имя процесса и все? не зная PID... 

ну PID по имени получить какбы не проблема вроде...

Автор: Virtuals 8.4.2009, 12:47
csander, батенька да вы маньяк, зачем вам это нужно?
учтите что порты относятся к устройствам, которые разрешено использовать только одному процессу. так что просто заморозка процесса вам не поможет. винда отошьет с ошибкой "порт занят другим процессом".

Автор: csander 9.4.2009, 08:56
а снять порт с процесса на определенный период времени можно?

Автор: Virtuals 10.4.2009, 07:00
csander, не надо этого делать. озвуч задачу подробней, может есть более красивое решение.
ну зачем тебе нужно оставлять чужую прогу на порту?

может пойти другим путем? напр с другого порта слать данные, и аппаратно их переключать?
типа ком1 по киоска
ком2 твоя прога, дернув дтр, релюха порт принтера перекинет на тебя, и мучай его как хочеш  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)