C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
CreateFile(), INVALID_HANDLE_VALUE
Pan_SQL
Отправлено: 05.12.2005, 13:47


Не зарегистрирован







Здравствуйте уважаемые участники форума. На этот раз я обращаюсь к вам с такой проблемой: порт, к которому подключен принтер: DOT_004. Я пытаюсь открыть доступ к принтеру следующим образом:
CODE

HANDLE hPort=CreateFile( "DOT_004", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
0, NULL );

if (hPort == INVALID_HANDLE_VALUE)
  {
     ShowMessage("Ошибка");
  }

Так вот, если изменить DOT_004 на LPT1 вызов функции CreateFile выполняется нормально, но если ничего не изменять: hLpt == INVALID_HANDLE_VALUE. Может быть в данном случае нужно использовать какую-либо другую функцию?

Отредактировано Георгий — 05/12/2005, 22:46
Giny
Отправлено: 06.12.2005, 15:08


Ученик-кочегар

Группа: Участник
Сообщений: 23



Имена портов храняться в реестре по ключу
HKEY_LOCAL_MACHINE\ HARDWARE\ DEVICEMAP\ SERIALCOMM.
В этом ключе возможные значения первого аргумента функции CreateFile при открытии порта
Их список можно занести ComboBox1 следующим кодом

#include
...
TRegistry* Reg = new TRegistry;
TStringList *List = new TStringList;
int i;
AnsiString w;

Reg->RootKey = HKEY_LOCAL_MACHINE;
Reg->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
Reg->GetValueNames(List);
for (i = 0; i< List->Count; i++)
{
w= Reg->ReadString(List->Strings[i]).SetLength(3);
if (w.SetLength(3) == "COM")
ComboBox1->Items->Add(Reg->ReadString(List->Strings[i]));
}
List->Free();
Reg->CloseKey();
Reg->Free();

ComboBox1->ItemIndex = 0;

Для параллельных портов ключ такой
HKEY_LOCAL_MACHINE\ HARDWARE\ DEVICEMAP\ PARALLEL PORTS.


Я всё это к тому что твой параметр "DOT_004" какой-то сомнительный

Вернуться в Вопросы программирования в C++Builder