Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пример работы с LPT портом с помощью функций API 
:(
    Опции темы
Bog d`An
Дата 21.9.2005, 03:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



В литературе нашёл только общие слова на предмет того что нельзя-де работать с портом напрямую с помощью ф-й низкого уровня, что-де не только твой процесс может обращатся к порту... и т.п.
не могли Вы бы показать как это реализовывается?

собственно мне надо передавать инфу на самодельное устройство-коммутаторsmile - проблема аналогичная Gigabyte (Порты и Дельфи, HELP!!!!!!)

ОС WinXP
.

Например как бы выглядило что-то вроде этого:
Код

Program TestLine;
Uses dos;
{$m 1024,0,0}
const
  delay=6;
  m:array [1..8] of byte=(1,2,4,8,16,32,64,128);
  i:byte=1;
  t:byte=0;
procedure time; interrupt;
begin
  inc(t);
  if t=delay then
  Begin
    t:=0;
    port[$378]:=m[i];
    if i=8 then
      i:=1
    else
      inc(i);
  End;
End;
Begin
  setintvec($1c,@time);
  keep(0);
End;


p.s.: у вас нарыл ответ Snowy

Код

unit lptport;
interface
uses Windows;
type
  TLptPort=class(TObject)
    protected
      h: THandle;
      b: ^char;
      public
      Port: byte;
      constructor Create;
      destructor Destroy; override;
      function  Connect: Boolean;
      procedure Disconnect;
      function  Connected: Boolean;
      procedure SendString(str:string);
      function  GetChar(var ch: char):boolean;
    published
  end;
implementation
constructor TLptPort.Create;
begin
  Port:=1; h:=0;
end;
destructor TLptPort.Destroy;
begin
  Disconnect;
  inherited Destroy;
end;
function TLptPort.Connected: Boolean;
begin
  Result:=h>0;
end;
procedure TLptPort.Disconnect;
begin
  if Connected then
    CloseHandle(h);
  h:=0;
end;
function TLptPort.Connect: Boolean;
var
  LptName: string;
begin
  Result:=Connected;
  if Connected then Exit;
  LptName:='LPT'+chr(48+Port);
  try
    h:=CreateFile(PChar(LptName),GENERIC_READ OR GENERIC_WRITE,0,nil,
                  OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  except 
    h:=0 
  end;
  if h=INVALID_HANDLE_VALUE then h:=0;
  Result:=Connected;
end;
procedure TLptPort.SendString(str:string);
var
  buf: PChar;
  btw,bwt : DWORD;
begin
  if not Connected then exit;
  btw:=Length(str); buf:=PChar(str);
  WriteFile(h, buf, btw, bwt,nil);
end;
function TLptPort.GetChar(ch: char): boolean;
var
  r:  dword;
begin
  result:=false;
  if not Connected then exit;
  if ReadFile(h,ch,1,r,nil) then
    if r>0 then result:=true;
end;
end.


функция TLptPort.SendString(str:string) насколько я понял? но я немного(совсем) не понял что ей передавать smile
преобразовывается в PChar... нет всё равно непонятно smile должно быть нечто вроде чисел?

и ещё автор признаётся что не испытывал для LPT smile


в итоге должно получится что-то вроде
http://tulnikov.narod.ru/lptport/index.htm
но работающее под ХР
(в смысле протестить ;) дальше-больше)

--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
mntek
Дата 21.9.2005, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


freakin_brain
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 15.8.2004
Где: saint-petersburg

Репутация: 1
Всего: 1



Цитата(Bog @ 21.9.2005, 03:26)
функция TLptPort.SendString(str:string) насколько я понял? но я немного(совсем) не понял что ей передавать 
преобразовывается в PChar... нет всё равно непонятно  должно быть нечто вроде чисел?


как раз эта функция и пишет строку str в порт.
а тебе наверно надо почитать http://pccontrol.bib.com.ua/XpCoding/Shablon_XP.html
PM MAIL WWW ICQ   Вверх
Snowy
Дата 21.9.2005, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Bog @ 21.9.2005, 03:26)
функция TLptPort.SendString(str:string) насколько я понял? но я немного(совсем) не понял что ей передавать

Допустим, тебе нужно передать набор байт.
К примеру, хочешь передать значения: 213, 11, 54, 18
Делаешь так:
Код

var
  l: string;
begin
  l:=chr(213)+chr(11)+chr(54)+chr(18);
  TLptPort.SendString(l);
end;


Это сообщение отредактировал(а) Snowy - 21.9.2005, 10:04
PM MAIL   Вверх
Bog d`An
Дата 21.9.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



всем спасибо!

--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Delphins
Дата 21.9.2005, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 10.8.2005
Где: Россия, Краснодар

Репутация: нет
Всего: нет



А я написал с использыванием драйвера. (Он не мой ) Если хочеш вышлю на твой e-mail драйвер + программу.
У меня она по LPT порту управляет LCD экраном от эриксона.
Короче прикольно получилось. Можно менять драйвер экрана. Выводить инфу о компе.

PM MAIL ICQ Skype MSN   Вверх
Snowy
Дата 22.9.2005, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Цитата(Delphins @ 21.9.2005, 20:20)
А я написал с использыванием драйвера.

А зачем? Стандартный драйвер LPT порта отлично справляется со своей задачей.
И ставить ничего лишнего не нужно.
PM MAIL   Вверх
Bog d`An
Дата 16.12.2005, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 26.3.2005
Где: Украина:Днепропет ровск

Репутация: нет
Всего: 3



Delphins ух-ты, прикольно... жаля я себе ЮСБ шнурок к телу купил...
не у меня девайс по проще - самоделка - думаю присобачать на телефонную линию релюшку после модема перед телефоном - чтоб значит когда установка связи идёт отрубался телефон... а то достало пищание в 2 часа ночи... %)
Добавлено @ 04:23
зы: mntek, спасибо! очень полезная ссылочка...
--------------------
Удача откроет двери даже там, где их нет.Генри Морган--------------------[Furry team][Agent`s team][СРУКер]   
PM MAIL WWW   Вверх
Iuda_iz_Kf
Дата 11.10.2006, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.10.2006

Репутация: нет
Всего: нет



Привет..
Я тут тоже пытаюсь разобраться с работой LPT..
Научился только подавать High(5B) и Low(0,1B) наряжение на контакты 2-9(Data)..
Хотелось-бы услышать, что происходит на физ. уровне при выполнении вышенаписанного:
Код

var    
  l: string;    
begin    
  l:=chr(213)+chr(11)+chr(54)+chr(18);    
  TLptPort.SendString(l);    
end;

Заранее благодарен..
--------------------
Необессудьте, я только учусь...
PM MAIL   Вверх
pix
Дата 11.10.2006, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Привет всем.
У меня тоже проблемка, обясните или кинте ссилку на инфу. Мне нужно виполнить следующие действие:
 1) Чтение и запись из/в группы данных порта (биты 0..7 базового 
адреса)
 2) Чтение и запись из/в группы контроля порта (биты 0..3 базовый адрес 
+ 2)
 3) Чтение из группы состояния порта (биты 3..7 базовый адрес + 1).
я  в роботе с LPT новичок. Насколько я понял надо читать и записовать по битно. Как это зделать?
  smile 

Наперед спасибо!
PM ICQ   Вверх
Yanis
Дата 11.10.2006, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Восставшие из ада!!!
 smile 

pix
Думаю этого хватит:
http://www.sys-tema.ru/Primenenie-kompyute...pravleniya.html
http://forum.vingrad.ru/index.php?showtopic=20791&hl=lpt
http://forum.vingrad.ru/index.php?showtopi...=all&hl=lpt

P. S. А вообще советую пользоваться поиском.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
pix
Дата 12.10.2006, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.10.2006

Репутация: нет
Всего: нет



Большое спасибо. smile 
 На щет поиска, я уже вторую ночь в нете копаюсь, и ничего толкового не нашел. Много статей о управлении процесами, окнами, т.п., а от о портах очень мало. Вот то что ти мне подкинуд мне понравилось.  smile 
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0889 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.