Program do wysyłania danych na port LPT (Windows 8)

0

Temat stary jak internet ale niestety dawne wątki nie rozwiązały mojego problemu.

Założenie jest proste, napisać program który będzie zapalał diody na portach w LPT.

Znalazłem wiele gotowych starych samoróbek który niestety pod W8 coś nie chcą spełniać swojego zadania przez rozmaite błędy, oprócz jednego programu "LPTTestUtility" który działa wyśmienicie i spełnia zadanie(korzysta z bibl. inpout32.dll) - ma wsparcie dla w7.

Teraz chciałem napisać w delphi własny program który będzie działał w ten sposób
i na podstawie opisu z pewnego forum wraz z biblioteką zlportio.sys stworzyłem coś takiego:
(każdy przycisk powinien włączać 1 port)

 unit Unit1;

interface 

uses 
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, zlportio,
  StdCtrls;

type 
TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
private 
{ Private declarations } 
public 
{ Public declarations }
end; 

var 
Form1: TForm1;

implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.'
else
Label1.Caption := 'Nie można załadować sterownika.';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.'
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.'
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.' 
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$4);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.' 
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$8);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.' 
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$10);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.' 
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$20);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.' 
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$40);
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if ZLIOStarted then 
Label1.Caption := 'Sterownik załadowany poprawnie.'
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$80);
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
 if ZLIOStarted then
Label1.Caption := 'Sterownik załadowany poprawnie.'
else
Label1.Caption := 'Nie można załadować sterownika.';
portwriteb($378,$0);
end;

end.

Ale choć kompiluje wszystko, to label1 wyświetla komunikat 'Nie można załadować sterownika." choć zlportio.sys jest dobrze wgrany.

lub też spróbowałem program pod 'inpout32.dll' który podo buttonem1 powinien wysyłać na wszystkie porty sygnał

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormActivate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}
function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';

procedure TForm1.FormActivate(Sender: TObject);
begin
 Edit1.Text := '';
 Edit1.SetFocus; 
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Out32($378,$1);
  Out32($378,$2);
   Out32($378,$4);
    Out32($378,$8);
     Out32($378,$10);
      Out32($378,$20);
       Out32($378,$40);
        Out32($378,$80);
end;

end. 

też kompiluje ale przycisk nie daje efektu.

Nie wiem czy to w systemie jakaś metoda się zmieniła czy co.

0

Jak chcesz pod windowsami wysłać coś na LPT to otwierasz plik "LPT" i normalnie do niego piszesz.

0

A co oznacza

otwierasz plik "LPT" i normalnie do niego piszesz.

Bo niestety nie bardzo rozumiem.

2

Którego słowa nie rozumiesz?

fs:=TFileStream.Create('LPT',fmOpenWrite);
str:='Ala ma kota';
fs.Write(PChar(S),Length(str));
fs.Free;
0

ok, w sumie mój 2 program też działa tylko należało usunąć inpout32.dll z folderu z .exe i teraz korzysta z windows/inpout32.dll

1 użytkowników online, w tym zalogowanych: 0, gości: 1