Форум: "Система";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Внизкак программно узнать какие порты свободны а какие заняты Найти похожие ветки
← →
Userr (2003-11-17 12:06) [0]как программно узнать какие порты свободны а какие заняты plag and play чтобы пользователь не ломился например к порту занятому мышей
← →
DC-AC (2003-11-18 11:03) [1]Наверное попытаться его открыть (напр. CreateFile() ) и обработать GetLastError...
← →
serge (2003-11-18 12:54) [2]Poprobui
var FHandle : THandle;
...
Procedure TForm1.InquiryPort(Sender: TObject);
Var
i: integer;
Begin
ComboBox1.Items.Clear;
For i := 0 To 31 Do
Begin
FHandl := CreateFile(PChar("COM" + IntToStr(i + 1)),
GENERIC_READ Or GENERIC_WRITE,
0,
Nil,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
If FHandl <> INVALID_HANDLE_VALUE
Then
Begin
ComboBox1.Items.Add("COM" + IntToStr(i + 1));
End;
CloseHandle(FHandl);
End;
End;
Udaci
← →
y-soft (2003-11-18 14:11) [3]>serge (18.11.03 12:54) [2]
Направление верное, но ответ неполный.
Во-первых. Только первые 9 компортов называются COM1..COM9,
последующие уже называются \\.\COM10 ... \\.\COM256
Во-вторых. В Win9X может быть максимум 50 компортов, в WinNT - 256
В-третьих. Если порт существует, но занят, то GetLastError возвратит ERROR_ACCESS_DENIED (код 5), если не существует, то - ERROR_FILE_NOT_FOUND (код 2)
Т.е. процедура должна выглядеть примерно так:
procedure EnumComPorts(Strings : TStrings; FreeOnly : boolean);
var
MaxPorts : integer;
hPort : THandle;
PortNumber : integer;
PortName : string;
LastErr : DWORD;
begin
Strings.Clear;
case Win32PlatForm of
VER_PLATFORM_WIN32_NT: MaxPorts := 256;
VER_PLATFORM_WIN32_WINDOWS: MaxPorts := 50;
end;
for PortNumber := 1 to MaxPorts do
begin
if PortNumber > 9 then
PortName := "\\.\COM" + IntToStr( PortNumber )
else
PortName := "COM" + IntToStr( PortNumber );
hPort := CreateFile( PChar( PortName ),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
0,
0 );
LastErr := GetLastError;
if not (hPort = INVALID_HANDLE_VALUE) or
(not FreeOnly and (LastErr = ERROR_ACCESS_DENIED))then
Strings.Add( PortName );
CloseHandle( hPort );
end;
end;
← →
Digitman (2003-11-18 14:19) [4]сижу я тут, тундра-тундрой, и никак в толк не возьму : с какого боку тут плаг"н"плэй присобачить можно ... ко всей этой петрушке с ОБРАЩЕНИЯМИ К ВИТУАЛЬНОМУ УСТРОЙСТВУ (а не физическому !!) ...
← →
y-soft (2003-11-18 14:27) [5]>Digitman © (18.11.03 14:19) [4]
Из контекста вопроса видно, что автор упомянул plug"n"play для красного словца, потому что иначе прицепить физически что-либо к разъему, уже занятому "мышкой" и так не получится :)
← →
Digitman (2003-11-18 14:36) [6]
> y-soft
может и для красного, мне вот это не очевидно.
как может пользователь куда-то там "ломиться" вообще ? если только программа у автора не является инсталлятором какого-нибудь старого LEGACY-устройства... которое предоставляет пользователю возможность выбора аппаратных ресурсов, не занятых на этот момент ни прочими LEGACY-устройствами ни плаг"н"плэй-устройствами ... ведь "порт" вполне можно интерпретировать и как аппаратный ресурс !
← →
y-soft (2003-11-18 14:43) [7]>Digitman © (18.11.03 14:36) [6]
Действительно, понятие "порт" обычно подразумевает порт ввода/вывода, а не com-порт. Но это автора надо спросить, что он имел в виду. Вопрос сформулирован расплывчато, так что только догадываться и остается... :)
>Userr (17.11.03 12:06)
Простите, если неправильно Вас поняли :)
← →
Digitman (2003-11-18 15:00) [8]
> y-soft
он, вопрос, не был бы таким расплывчатым, если бы автор оперировал термином "дивайс", а не "порт" ... тогда сразу ясно стало бы, что плагнплэй здесь - как телеге пятое колесо)
← →
y-soft (2003-11-18 15:11) [9]>Digitman ©
Лучше бы он называл "Com-порт" компортом и вместо "юзер ломится" говорил "компорт уже открыт", и не употреблял незнакомых умных терминов, а то ведь и "мышь" может быть подключена не только к компорту.
Впрочем, это уже вечная тема о культуре задавания вопросов... :(
← →
Digitman (2003-11-18 15:39) [10]
> y-soft
ох, согласен ! еще как согласен !
от подобных (наисвежайших, кстати, в Орешнике) "перлов" просто ну хоть стой хоть падай (рискну процитировать) :
Народы помогите как зная ехе-ху найтие его полный путь??
Типа отлавил япо хендлаку окна его ехсешника а как путь к нему полный хз хелпаните кто сможет.
За ранее спасиба
← →
y-soft (2003-11-18 15:42) [11]>Digitman © (18.11.03 15:39) [10]
Оно вечно...
Для того, чтобы задать грамотно вопрос, нужно иметь знания по нему. Для того, чтобы получить знания, надо грамотно задать вопрос...
Замкнутый круг :(
← →
Digitman (2003-11-18 15:57) [12]
> y-soft
порочный сей круг м.б. разорван только серьезным углублением в изучение и получение основного инженерного навыка (вовсе не связанного с программированием) - умение самостоятельно искать/систематизитрвать/анализировать инф-цию, в 1-ю очередь - справочную, умение ставить четкую и конкретную задачу самому себе, умение принимать техническое решение.
это дает любой хоть сколь-либо серьезный технический вуз, а вот книжки а-ля "Как научиться ... за 21 день" лишь развращают кажущейся легкостью-близостью еще непонятой цели и наводят полный бардак в голове
← →
y-soft (2003-11-18 16:18) [13]>Digitman © (18.11.03 15:57) [12]
В общем-то есть еще один вариант, но именно он и отвращает от ответов на расплывчатые вопросы. Это - корректирующая обратная связь, т.е. уточняющие вопросы со стороны отвечающих, чтобы в конце концов понять, что же человек хочет...
← →
Digitman (2003-11-18 16:36) [14]
> Это - корректирующая обратная связь, т.е. уточняющие вопросы
> со стороны отвечающих, чтобы в конце концов понять, что
> же человек хочет...
реакция на подобные back links тебе известна не хуже чем мне)
← →
y-soft (2003-11-18 16:44) [15]>Digitman © (18.11.03 16:36) [14]
Известна :)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.026 c