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

Вниз

Виртуальный LPT   Найти похожие ветки 

 
Петр   (2008-11-04 13:46) [0]

Добрый день мастера.

Есть отдельное приложение, которое при определённых действиях отправляет текстовую информацию (билет) на LPT порт. Можно настроить, что бы сохраняло в файл. Количество билетов неизвестно, т.е. может быть один, а может и 10. Каждый новый билет затирает, \ переписывает файл заново, причем очень быстро для человеческого глаза не заметно. Задача.  Перехватить информацию, которая идет на LPT порт или в файл, добавить туда нужную строки  и отправить опять на LPT. Я реализовал следующим образом, настроил приложение, что бы отправляло не на LPT, а в файл. Каждую секунду смотрю на файл, как только он обновился, я его копирую в Temp под новым именем, в конце получаю кол-во файлов соответствующее кол-ву билетов. Но данная реализация меня не очень устраивает т.к. мне не известно, сколько билетов будет и поэтому каждый раз делать задержку на 5-10 сек недопустимо. (Вдруг будет всего один билет, а система будет долго ждать). Вопрос. Можно, как ни будь создать, что то типа виртуального LPT в который будет заноситься сразу вся информация (как в принтер), а потом я уже бы смог ее обработать. Т.е. всю информацию записать в один файл, так что ли.. Вообщем, если вы меня поняли, подскажите, пожалуйста, придумать нужно за сегодня.

P.S. Настоящий профессионал который поможет мне будет премирован билетами в кино на премьерные показы….:)


 
Плохиш ©   (2008-11-04 15:20) [1]


> придумать нужно за сегодня

Что за левый кинотеатр, в нормальных всё должно быть придумано "вчера".

> P.S. Настоящий профессионал который поможет мне будет премирован
> билетами в кино на премьерные показы

Зачем мне билеты в кинотеатр какого-то Мухосранска?


 
Петр   (2008-11-04 15:22) [2]


> > придумать нужно за сегодня
>
> Что за левый кинотеатр, в нормальных всё должно быть придумано
> "вчера".
>
> > P.S. Настоящий профессионал который поможет мне будет
> премирован
> > билетами в кино на премьерные показы
>
> Зачем мне билеты в кинотеатр какого-то Мухосранска?

Спасибо ты очень помог...:) Ребята прошу вас не писать сообщения подобного типа. Если не хотите помочь лучше игнорируйте.


 
Anatoly Podgoretsky ©   (2008-11-04 15:26) [3]

Утилиты Руссиновича, как минимум ранее, были в исходниках, одна из утилит называется PortMon


 
Петр   (2008-11-04 15:26) [4]


> Зачем мне билеты в кинотеатр какого-то Мухосранска?

Кстати, между прочим...говорим о Москве мы сейчас.


 
Anatoly Podgoretsky ©   (2008-11-04 15:27) [5]

Кстати мне дешевле купить местный кинотеатр, чем до Москвы добираться.


 
Плохиш ©   (2008-11-04 15:32) [6]

Кстати, у меня уже есть кинотеатр, зачем мне какая-то москва?


 
Петр   (2008-11-04 15:38) [7]


> Anatoly Podgoretsky ©   (04.11.08 15:26) [3]
>
> Утилиты Руссиновича, как минимум ранее, были в исходниках,
>  одна из утилит называется PortMon

В исходниках не нашел...:(

Эх юмористы вы ребята...я просто хотел предложить скромную компенсацию...:)


 
Anatoly Podgoretsky ©   (2008-11-04 16:05) [8]

У меня еще нет, а вот Плохиш уже обзавелся.
После ухода Руссиновича и даже немного раньше - исходники были убраны, так что искать надо тех, у кого они сохранились.


 
Петр   (2008-11-04 16:17) [9]


> Anatoly Podgoretsky ©   (04.11.08 16:05) [8]
>
> У меня еще нет, а вот Плохиш уже обзавелся.
> После ухода Руссиновича и даже немного раньше - исходники
> были убраны, так что искать надо тех, у кого они сохранились.
>

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

if FindFirst(extractfilepath(Application.ExeName)+printfile, faAnyFile, searchResult) = 0 then
 begin
   repeat
    if (searchResult.Name=printfile) and (searchResult.Size<10000) then
    begin
    CopyFile(pchar(extractfilepath(Application.ExeName)+searchResult.Name),pchar(extractfilepath(Application.ExeName)+"\malina\"+inttostr(random(100))+".txt"),true);
    deletefile(pchar(extractfilepath(Application.ExeName)+searchResult.Name));
    end;
   until FindNext(searchResult) <> 0;

Просто не могу придумать что еще можно сделать?!


 
Anatoly Podgoretsky ©   (2008-11-04 16:33) [10]

> Петр  (04.11.2008 16:17:09)  [9]

Драйвер/фильтр реальное решение, в отличии от других методов.


 
Петр   (2008-11-04 16:37) [11]


> Anatoly Podgoretsky ©   (04.11.08 16:33) [10]
>
> > Петр  (04.11.2008 16:17:09)  [9]
>
> Драйвер/фильтр реальное решение, в отличии от других методов.
>

может быть есть другие исходники\компоненты помимо PortMon?


 
Anatoly Podgoretsky ©   (2008-11-04 16:43) [12]

> Петр  (04.11.2008 16:37:11)  [11]

Не знаю, больно это ценное, чтобы выкладывать на общий доступ, Руссинович может себе позволить такую роскошь. Подобная задача измеряется в десятках килобакс.


 
sniknik ©   (2008-11-04 17:06) [13]

можно поискать драйвер принтера с перенаправлением печати в файл, для pdf видел, может есть и для всего сохраняющий as is.


 
Петр   (2008-11-04 17:09) [14]


> sniknik ©   (04.11.08 17:06) [13]
>
> можно поискать драйвер принтера с перенаправлением печати
> в файл, для pdf видел, может есть и для всего сохраняющий
> as is.

я сейчас этим и занимаюсь, но что то у меня не очень получается...:(


 
Virgo_Style ©   (2008-11-05 12:47) [15]

imho промежуточным между правильным написанием драйвера и неправильным использованием таймера было бы использование уведомления о изменении файлов в каталоге. Достаточно просто, лучше таймера... но хуже драйвера, конечно. Вроде бы в D7 есть готовый компонентик на закладке Samples - TShellChangeNotifier или как-то так.


 
Петр   (2008-11-05 13:11) [16]


> Virgo_Style ©   (05.11.08 12:47) [15]
>
> imho промежуточным между правильным написанием драйвера
> и неправильным использованием таймера было бы использование
> уведомления о изменении файлов в каталоге. Достаточно просто,
>  лучше таймера... но хуже драйвера, конечно. Вроде бы в
> D7 есть готовый компонентик на закладке Samples - TShellChangeNotifier
> или как-то так.


хм...а с каким интервалом он проверяет?


 
Петр   (2008-11-05 13:16) [17]

и еще проблема, у меня первый файл с начала работы приложения отправлять не нужно на LPT, я его сейчас отсекаю по размеру.

if (searchResult.Name=printfile) and (searchResult.Size<10000) then

а как быть в случае с этим компонентам?


 
sniknik ©   (2008-11-05 14:26) [18]

> было бы использование уведомления о изменении файлов в каталоге.
насколько помню уведомления о закрытии файла, там нет ;(, самому нужно было как то, пришлось делать проверку через какой то таймаут после изменения, т.е. изменили - взвел флаг (максимум в таймауте выставил) , а по событию кванта времени его уменьшал, как до нуля опустился - проверка монопольного открытия.
если бы было(/нашёл бы) событие закрытия, таких "наворотов" бы не понадобилось.

> хм...а с каким интервалом он проверяет?
без всяких интервалов, это событие от системы.

> а как быть в случае с этим компонентам?
это не компонент. хотя может кто уже и сделал...

поищи описание в статьях на этом сайте, автор Панов.


 
sniknik ©   (2008-11-05 14:28) [19]

http://www.delphimaster.ru/articles/panov/index.html



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

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

Наверх




Память: 0.52 MB
Время: 0.015 c
2-1225459016
Alex_Ford
2008-10-31 16:16
2008.12.14
реестр


2-1226049431
Denis__
2008-11-07 12:17
2008.12.14
GetTickCount в Turbo Pascal 7.0


2-1225477693
self.name
2008-10-31 21:28
2008.12.14
принцип работы FireBird


2-1225956792
pushkin42
2008-11-06 10:33
2008.12.14
Активация предыдущего окна


15-1223568892
TStas
2008-10-09 20:14
2008.12.14
Последний и очередной ММП