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

Вниз

Виртуальный 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.009 c
15-1223631536
ANB
2008-10-10 13:38
2008.12.14
Подешевеет ли жилье ?


15-1223885552
Zlodey
2008-10-13 12:12
2008.12.14
Помогите с формулировкой


15-1223653872
Terasbetoni
2008-10-10 19:51
2008.12.14
Посоветуйте модуль для работы с двумерными графиками


2-1225795599
Петр
2008-11-04 13:46
2008.12.14
Виртуальный LPT


6-1196409724
Ш-К
2007-11-30 11:02
2008.12.14
Как реализовать обсервер.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский