Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
8-16541
Дмитрий
2003-10-05 17:41
2004.02.06
TrackBar В TMediaPlayer


1-16447
Zheks
2004-01-28 09:44
2004.02.06
try/except


7-16760
Cosinus
2003-11-18 15:34
2004.02.06
Обработка шибок при работе с СОМ-портом


4-16832
kalishenko
2003-11-21 12:38
2004.02.06
Загрузка меню из ресурса


1-16462
михаил
2004-01-28 01:35
2004.02.06
деление на нуль





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