Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

usb - порт и принтер   Найти похожие ветки 

 
dzuev   (2007-03-09 14:47) [0]

Добрый день!!!
Может кто подскажет  - как послать команды принтеру через usb-порт? или может можно использовать стандартный usbprint для посылки команд? но как?
если есть пример модуля то вообще будет замечательно!!

ps: нужно именно посылать команды а не стандартный TPrinter


 
Kolan ©   (2007-03-09 14:56) [1]

> команды принтеру

SDK на сайте производителя?


 
Сергей М. ©   (2007-03-09 15:07) [2]


> стандартный usbprint


А эт чего такое ?


 
dzuev   (2007-03-09 16:23) [3]

usbprint.sys - виртуальный лпт порт, ну наподобие того, что создается в системе когда ставиться usb принтер. он вроде как стандартный и с виндой идет

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


 
Сергей М. ©   (2007-03-09 16:30) [4]


> dzuev   (09.03.07 16:23) [3]
>
> usbprint.sys - виртуальный лпт порт


Что за бред ?

usbprint.sys - это драйвер режима ядра.

А уж что он там творит в ходе своей работы в плане симв.ссылок - это др.вопрос.

Тебе чем не нравится штатная инсталляция и штатное использование принтера ?


 
Kolan ©   (2007-03-09 16:32) [5]

> команды принтера известны, описаны в мануле по крайней мере

Ну попробуй через этот usbprint.sys..

ЗЫ
 Зв незнаешь вот у меня на столе тоже стоит хрень подключется к USB как посать команду ей?

ЗЫЫ
 "Интерфейс USB. Практика использования и программирования." - хорошая книга...


 
dzuev   (2007-03-09 17:54) [6]

2Сергей М.  ну это я не так выразился.
штатная не катит - не так работает как хотелось бы.

2Kolan - а есть еще и Солдатов, тоже хорошая книга. Только вот у Агурова  все примеры а-ля Createfile(...)  для com порта написаны. Usb увы немного сложнее.

Т.е. надо как я понял либо драйвер который бы эмулировал какой-нить lpt7 и в него я бы с помощью createfile писал все че мне надо либо как-то открыть usb для записи. (для lpt уже написано все).
Неужели надо полностью писать драйвер, с нуля и явно не на делфи(((???


 
crytogen   (2007-03-10 09:00) [7]

Попробуй использовать PCL:
http://www.biotok.ru/omega/PCLPrint.pas


 
tesseract ©   (2007-03-10 20:12) [8]


> для com порта написаны. Usb увы немного сложнее.


у него ДВЕ  книги. И создание дров под USB неплохо описано.


> Т.е. надо как я понял либо драйвер который бы эмулировал
> какой-нить lpt7 и в него я бы с помощью createfile писал
> все че мне надо либо как-то открыть usb для записи. (для
> lpt уже написано все).


Пиши в порт притера, Билл Гейтс за тебя проблему решил.


 
dzuev   (2007-03-12 18:46) [9]


> Попробуй использовать PCL:
> http://www.biotok.ru/omega/PCLPrint.pas
>

че-то 403 форбидден говорит.(((


 
dzuev   (2007-03-12 18:52) [10]


>
> Пиши в порт притера, Билл Гейтс за тебя проблему решил.
>

хм собсно об этом и вопрос - как это сделать, точнее чего написать в createfile если принтер usb


 
Чапаев ©   (2007-03-12 22:50) [11]

> [10] dzuev   (12.03.07 18:52)
Ну посмотри, на каком порту принтер висит, его и открывай... Обычно это нечто вроде USB0001. Искать в свойствах принтера.


 
SlymRO ©   (2007-03-13 10:25) [12]

Так не пробовал?:
 if not OpenPrinter(PChar(PrinterName),hPrinter, nil) then RaiseLastOSError;
 try
   DocInfo.pDocName:="DirectPrint";
   DocInfo.pOutputFile:=nil;
   //DocInfo.pDatatype:="RAW";
   DocInfo.pDatatype:="TEXT";

   if StartDocPrinter(hPrinter,1,@DocInfo)=0 then RaiseLastOSError;
   if not WritePrinter(hPrinter,PChar(s),Len,writed) then RaiseLastOSError;
   if writed<>Len then RaiseLastOSError;
   if not EndDocPrinter(hPrinter) then RaiseLastOSError;
 finally
   ClosePrinter(hPrinter);
 end;


 
DC-AC   (2007-03-13 12:24) [13]

>послать команды принтеру

Данные послать легко - см [12]. А вот чтобы послать КОМАНДЫ - нужно знать систему команд данного принтера. Какой принтер-то ???


 
SlymRO ©   (2007-03-13 13:38) [14]

DC-AC   (13.03.07 12:24) [13]
Если принтер PCL понимает то [12] вполне работает на отправку PCL команд...


 
DC-AC   (2007-03-14 08:52) [15]

Может у нас немного разные понятия слова "данные"...
Теоретически, все что улетает в принтер, можно назвать данными. Но для принтера, в котором есть свой проц с микропрограммой, все-таки данные - это текстовая или графическая информация для формирования изображения, а команды - это команды управления и контроля, будь то PCL,PJL,EJL или пакетные протоколы (стандарт 1284.4).


 
dzuev   (2007-03-14 17:53) [16]

Принтер DATAMAX m4206.
его команды описаны я их знаю,

2SlymRo предложенный вариант печатает через драйвер принтера, мне же надо посылать только в порт нужные мне вещи. т.е. как лпт или cом-порт - открыл, записал, убил хэндл.

2Чапаев открытие usb001 возвращает INVALID_HANDLE_VALUE,  уже давно пробовал.  и вся фишка с usb и заключается в том что его так просто не откроешь.


 
SlymRO ©   (2007-03-15 07:12) [17]

dzuev   (14.03.07 17:53) [16]
предложенный вариант печатает через драйвер принтера

Ты пробовал? PCL таким макаром работает, ни каких esc на бумагу не шлет, все переваривает как команды... можно поиграться pDatatype


 
DC-AC   (2007-03-15 07:35) [18]

16: Если с принтером идет драйвер - установи его, просмотри реестр, если найдешь GUID - попробуй что-нибудь вроде этого:

implementation

uses SetupApi;

const GUID_CLASS_ID: TGUID = "{твой GUID}";

{$R *.DFM}

function TForm1.OpenDevice(MyInterfaceGuid: PGUID; DeviceNum: Integer): THandle;
var Hdi: HDEVINFO;
   iHdi: Integer;
   Idd: SP_DEVICE_INTERFACE_DATA;
   pIddDetail: PSPDeviceInterfaceDetailData;
   DesiredLength: Integer;
   retval: THandle;
begin
Hdi:=SetupDiGetClassDevs(MyInterfaceGuid,
                         nil,
                         0,
                         DIGCF_PRESENT or DIGCF_INTERFACEDEVICE);
iHdi:=Cardinal(Hdi);
if iHdi=INVALID_HANDLE_VALUE then
  begin
  MessageBox(Application.Handle,"SetupDiGetClassDevs error",PChar(Application.Title),MB_ICONSTOP);
  Result:=INVALID_HANDLE_VALUE;
  Exit;
  end;
Idd.cbSize:=sizeof(SP_DEVICE_INTERFACE_DATA);
if SetupDiEnumDeviceInterfaces(Hdi,
                               nil,
                               MyInterfaceGuid^,
                               DeviceNum,
                               Idd) = false then
  begin
   MessageBox(Application.Handle,"SetupDiEnumDeviceInterfaces error",PChar(Application.Title),MB_ICONSTOP);
   Result:=INVALID_HANDLE_VALUE;
   Exit;
  end;
SetupDiGetInterfaceDeviceDetail(Hdi,
                                @Idd,
                                nil,
                                0,
                                @DesiredLength,
                                nil);
pIddDetail:=AllocMem(DesiredLength);
pIddDetail.cbSize:=sizeof(TSPDeviceInterfaceDetailData);
if SetupDiGetInterfaceDeviceDetail(Hdi,
                                   @Idd,
                                   pIddDetail,
                                   DesiredLength,
                                   @DesiredLength,
                                   nil) = false then
  begin
   FreeMem(pIddDetail);
   MessageBox(Application.Handle,"SetupDiGetInterfaceDeviceDetail error",PChar(Application.Title),MB_ICONSTOP);
   Result:=INVALID_HANDLE_VALUE;
   Exit;
  end;
SetupDiDestroyDeviceInfoList(Hdi);
retval:=CreateFile(pIddDetail.DevicePath,
                   GENERIC_READ or GENERIC_WRITE,
                   0,
                   nil,
                   OPEN_EXISTING,
                   0,
                   0);
FreeMem(pIddDetail);
Result:=retval;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDevice(@GUID_CLASS_ID, 0) <> INVALID_HANDLE_VALUE
then Label1.Caption := "OK" else Label1.Caption := "ERROR";;
end;


 
dzuev   (2007-03-16 14:50) [19]

Вроде получилось.
Использовать SetupApi не стал, удалось пробросить нужные данные через OpenPrinter
Спасибо тем, кто отвечал по существу



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
15-1186323056
@!!ex
2007-08-05 18:10
2007.09.02
Resize java приложений


9-1159426582
benusi
2006-09-28 10:56
2007.09.02
учебник по OpenGL


15-1185963941
Kolan
2007-08-01 14:25
2007.09.02
Где узнать как работает кещирующий прокси?


2-1186903598
Debug
2007-08-12 11:26
2007.09.02
Закрытие вкладки TPageControl


2-1186573782
Gamarnik
2007-08-08 15:49
2007.09.02
Memo