Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как программно узнать какие порты свободны а какие заняты [D6, D7, Win95/98]


Userr ©   (2003-11-17 12:06:00) 

как программно узнать какие порты свободны а какие заняты plag and play чтобы пользователь не ломился например к порту занятому мышей


y-soft   (2003-11-18 16:44:00) [1]

>Digitman © (18.11.03 16:36) [14]

Известна :)


Digitman   (2003-11-18 16:36:00) [2]


> Это - корректирующая обратная связь, т.е. уточняющие вопросы
> со стороны отвечающих, чтобы в конце концов понять, что
> же человек хочет...


реакция на подобные back links тебе известна не хуже чем мне)


y-soft   (2003-11-18 16:18:00) [3]

>Digitman © (18.11.03 15:57) [12]

В общем-то есть еще один вариант, но именно он и отвращает от ответов на расплывчатые вопросы. Это - корректирующая обратная связь, т.е. уточняющие вопросы со стороны отвечающих, чтобы в конце концов понять, что же человек хочет...


Digitman   (2003-11-18 15:57:00) [4]


> y-soft


порочный сей круг м.б. разорван только серьезным углублением в изучение и получение основного инженерного навыка (вовсе не связанного с программированием) - умение самостоятельно искать/систематизитрвать/анализировать инф-цию, в 1-ю очередь - справочную, умение ставить четкую и конкретную задачу самому себе, умение принимать техническое решение.

это дает любой хоть сколь-либо серьезный технический вуз, а вот книжки а-ля "Как научиться ... за 21 день" лишь развращают кажущейся легкостью-близостью еще непонятой цели и наводят полный бардак в голове


y-soft   (2003-11-18 15:42:00) [5]

>Digitman © (18.11.03 15:39) [10]

Оно вечно...

Для того, чтобы задать грамотно вопрос, нужно иметь знания по нему. Для того, чтобы получить знания, надо грамотно задать вопрос...

Замкнутый круг :(


Digitman   (2003-11-18 15:39:00) [6]


> y-soft


ох, согласен ! еще как согласен !

от подобных (наисвежайших, кстати, в Орешнике) "перлов" просто ну хоть стой хоть падай (рискну процитировать) :

Народы помогите как зная ехе-ху найтие его полный путь??
Типа отлавил япо хендлаку окна его ехсешника а как путь к нему полный хз хелпаните кто сможет.
За ранее спасиба


y-soft   (2003-11-18 15:11:00) [7]

>Digitman ©

Лучше бы он называл "Com-порт" компортом и вместо "юзер ломится" говорил "компорт уже открыт", и не употреблял незнакомых умных терминов, а то ведь и "мышь" может быть подключена не только к компорту.

Впрочем, это уже вечная тема о культуре задавания вопросов... :(


Digitman   (2003-11-18 15:00:00) [8]


> y-soft


он, вопрос, не был бы таким расплывчатым, если бы автор оперировал термином "дивайс", а не "порт" ... тогда сразу ясно стало бы, что плагнплэй здесь - как телеге пятое колесо)


y-soft   (2003-11-18 14:43:00) [9]

>Digitman © (18.11.03 14:36) [6]

Действительно, понятие "порт" обычно подразумевает порт ввода/вывода, а не com-порт. Но это автора надо спросить, что он имел в виду. Вопрос сформулирован расплывчато, так что только догадываться и остается... :)

>Userr (17.11.03 12:06)

Простите, если неправильно Вас поняли :)


Digitman   (2003-11-18 14:36:00) [10]


> y-soft


может и для красного, мне вот это не очевидно.

как может пользователь куда-то там "ломиться" вообще ? если только программа у автора не является инсталлятором какого-нибудь старого LEGACY-устройства... которое предоставляет пользователю возможность выбора аппаратных ресурсов, не занятых на этот момент ни прочими LEGACY-устройствами ни плаг"н"плэй-устройствами ... ведь "порт" вполне можно интерпретировать и как аппаратный ресурс !


y-soft   (2003-11-18 14:27:00) [11]

>Digitman © (18.11.03 14:19) [4]

Из контекста вопроса видно, что автор упомянул plug"n"play для красного словца, потому что иначе прицепить физически что-либо к разъему, уже занятому "мышкой" и так не получится :)


Digitman   (2003-11-18 14:19:00) [12]

сижу я тут, тундра-тундрой, и никак в толк не возьму : с какого боку тут плаг"н"плэй присобачить можно ... ко всей этой петрушке с ОБРАЩЕНИЯМИ К ВИТУАЛЬНОМУ УСТРОЙСТВУ (а не физическому !!) ...


y-soft   (2003-11-18 14:11:00) [13]

>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;


serge   (2003-11-18 12:54:00) [14]

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


DC-AC   (2003-11-18 11:03:00) [15]

Наверное попытаться его открыть (напр. CreateFile() ) и обработать GetLastError...


Наверх

Титульная страница Поиск, карта сайта Написать письмо