Программирование

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Автор
    Сообщения
  • #1879873
    мишка
    Участник

    Народ такой вопросик кто нибудь писал на си под винду прогу управления через LPT порт?И какие советы будут?Задача такова таймер на включение и выключения объектов.

    #1880119
    -sc-
    Участник

    Могу дать ссылки:Hardware Interface Programming in VC++ – Part I (Port Access)И там внизу статьи еще:Driver Development Part 1: Introduction to DriversThis article will go into the basics of creating a simple driver.Driver Development Part 2: Introduction to Implementing IOCTLsThis article will go deeper into the basics of creating a simple driver.A simple demo for WDM Driver developmentWDM Driver programming introduction with three Pseudo Drivers.API hooking revealedThe article demonstrates how to build a user mode Win32 API spying system
    Также следует почитать Microsoft Platform SDK Help. Вот пример оттуда для СОМ порта, для LPT наверное аналогично, сам не пробовал

    #1880120
    -sc-
    Участник

    /* A sample program to illustrate setting up a serial port. */
    #include
    int main(int argc, char *argv[]){ DCB dcb; HANDLE hCom; BOOL fSuccess; char *pcCommPort = “COM2”;
    hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O NULL // hTemplate must be NULL for comm devices );
    if (hCom == INVALID_HANDLE_VALUE) { // Handle the error. printf (“CreateFile failed with error %d.\n”, GetLastError()); return (1); }
    // Build on the current configuration, and skip setting the size // of the input and output buffers with SetupComm.
    fSuccess = GetCommState(hCom, &dcb);
    if (!fSuccess) { // Handle the error. printf (“GetCommState failed with error %d.\n”, GetLastError()); return (2); }
    // Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
    dcb.BaudRate = CBR_57600; // set the baud rate dcb.ByteSize = 8; // data size, xmit, and rcv dcb.Parity = NOPARITY; // no parity bit dcb.StopBits = ONESTOPBIT; // one stop bit
    fSuccess = SetCommState(hCom, &dcb);
    if (!fSuccess) { // Handle the error. printf (“SetCommState failed with error %d.\n”, GetLastError()); return (3); }
    printf (“Serial port %s successfully reconfigured.\n”, pcCommPort); return (0);}

    #1880121
    -sc-
    Участник

    ))))) ссылки не получились)))))но думаю, если интересно, то гугл найдет в 2 секИ что-то я не нашел CloseHandle, видать он автоматом закрывается, когда прога завершает работу. Ну и писать данные соответственно WriteFile. Успехов)

    #1880122
    Священник
    Участник

    Слушай, тебе это на кой x? Я, конечно, учусь сейчас разрабатывать драйвера режима ядра. Пиши в асю или мыло. 271318967. zeromem@yandex.ru.А вообще, для такой работы нужно четко иметь представление о том, с каким драйвером работать и как он(драйвер) должен взаимодействовать с устройством. Хотя на твоем месте, я писал бы собственный драйвер. Хотя это очень трудно. WinAPI покажется детским лепетом.

    #1880123
    Священник
    Участник

    sc, я тебя не совсем понял насчет ссылок. Тут просили просто рассказать как работать с драйвером для LPT.Hardware Interface Programming in VC++ – Part I (Port Access) я еще пойму, но остальное – это просто рассказывается о том как написать свой драйвер сначала в NT стиле, а потом в стиле WDM.
    Ну а это вообще зачем?@API hooking revealed The article demonstrates how to build a user mode Win32 API spying system@
    Кстати, мифка, ты случайем не разработчик NeverLands или так для прикола сайт добавил?
    sc писал:И что-то я не нашел CloseHandle, видать он автоматом закрывается, когда прога завершает работу. Ну и писать данные соответственно WriteFile.—————————————Вообще да, закрывается. Только вот так делать лучше не надо. Может обернуться глюками.Про WriteFile скажу, что его одного не достаточно. Самый распространенный способ работы с драйвером это через IOCTL запросы. Если мне не отшибло память, то вызов WriteFile и сделает определенного типа IOCTL запрос.—————————————Ну и еще рах повторюсь, что нужно иметь представление о том с каким драйвером работать и как он работает с устройством.

    #1880135
    -sc-
    Участник

    А если свой драйвер не писать, а взять например любой для принтера, типа text generic? И слать туда данные на свое устройство. А что за объекты требуется вкл/выкл? )

    #1880144
     VaIerik
    Участник

    Дружища пиши на Delphi, будет всё понятней и быстрее. Скачаешь пару компонентов и всё готова, работает как надо.

    #1880149
    -sc-
    Участник

    А если хочешь немного разобраться то можно вот почитать:Использование Visual Basic 6.0 для управления внешними устройствами и приём внешней информации (температура, давление, напряжение, ток и т.п.) через LPT портhttp://vbrussian.com/Article.asp?ID=101ZeroMem, А зачем вообще драйвер писать? Я давно-давно писал прогу под w2k для работы с модемом без всяких драйверов, если память не изменяет)) Неужели есть разница с LPT?

    #1880153
    -sc-
    Участник

    http://www.compdoc.ru/prog/pascal/work_with_lpt/http://junglewin.narod.ru/lpt.htmlВот еще пара статеек, может помогут

    #1880264
    Священник
    Участник

    Со своим драйвером надежнее. Просто я не знаю вообще зачем челу работать с LPT. Если ему нужно лишь работать через определенную абстракцию, которую можно использовать с 3 го кольца, то пожалуйста. Но прога от этого проще не станет. А на Delphi, пожалуй, может выйти и сложнее, есди самому компоны писать.

    #1787621
     VaIerik
    Участник

     

Просмотр 12 сообщений - с 1 по 12 (из 12 всего)
  • Для ответа в этой теме необходимо авторизоваться.