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

Вниз

как программно узнать какие порты свободны а какие заняты   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.024 c
3-16195
Октавиан
2004-01-13 14:32
2004.02.06
ADOQuery && full database scan


14-16631
Ольга
2004-01-17 13:15
2004.02.06
Протаколы


6-16560
Andersen
2003-12-02 14:05
2004.02.06
Удаленный коннект к компу


6-16582
Не знающий
2003-12-04 14:22
2004.02.06
Подключить диск.


14-16738
Akvilon
2004-01-12 22:19
2004.02.06
На чем написана Delphi?