![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открыть порт "DOT4_001" [D7, WinXP]
cerber © (2006-04-16 23:28:00)при установке принтера НР 1220 он прописал свой порт "DOT4_001"(потому что USB) через который работает. Как открыть этот порт на АПИ и слать(принимать оттуда) данные?
DC-AC (2006-04-18 09:27:00) [1]Вот, кстати, нашёл небольшой примерчик, когда начинал Эпсоны программировать, тренировался...
GUID замени на свой.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function OpenDevice(MyInterfaceGuid: PGUID; DeviceNum: Integer): THandle;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses SetupApi;
const GUID_CLASS_ID: TGUID = '{762bb1b4-5164-11d1-b00b-00c0d1570f9e}';
{$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;
end.
cerber (2006-04-17 23:31:00) [2]thanks. Будем пробовать.
DC-AC (2006-04-17 07:33:00) [3]Через SetupAPI. При этом ты должен знать GUID этого порта (ищется в реестре).