Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.042 c
4-1173866657
fon-karlson
2007-03-14 13:04
2007.09.02
не ловится WM_COMMAND при нажатии на пункт меню


15-1186073298
Kerk
2007-08-02 20:48
2007.09.02
wget ?


1-1182725258
ssa
2007-06-25 02:47
2007.09.02
Как заменить выделенный текст в memo?


15-1186166402
ya00011
2007-08-03 22:40
2007.09.02
HTTP: как сказать качалке о том что докачка не поддерживается?


3-1178868135
sergeii
2007-05-11 11:22
2007.09.02
SQL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский