Virtual COM

Jindrich Fucik fulda na seznam.cz
Neděle Březen 10 13:52:52 CET 2019


Asi se ti hodí vědět několik věcí:
- port se ti "vrátí" pouze po té, co mu vrátíš handler. To v 
jednoduchosti znamená po té, co "zavřeš" jeho soubor když detekuješ že 
není k dispozici.
- to že není k dispozici se dá detekovat různě, například tak, že se u 
každého pokusu o čtení/zápis budeš dívat, jak to dopadlo, nebo se budeš 
dívat, jestli je port v systému přítomen.

A teď se pozvolna dostáváme k tomu zábavnějšímu - jak se vlastně pozná 
přítomnost portu:
Pro Windejsi od NT4 dál je to jednoduché, v registru existuje klíč 
'\hardware\devicemap\serialcomm' (v regeditu 
'HKLM\hardware\devicemap\serialcomm') v něm je za každý existující 
sériák hodnota která se jmenuje podle typu toho portu a její hodnota je 
jméno toho portu.

Dám sem kus kódu, který není v C#, ale volání systémových funkcí bude 
stejné.

   if Reg.OpenKeyReadOnly('\hardware\devicemap\serialcomm') then
    begin
     LName := TStringList.Create;
     Reg.GetValueNames(LName);
     for i := 0 to LName.Count - 1 do
      begin
       if Reg.GetDataType(LName.Strings[i]) = rdString then
        begin
         PortName := Reg.ReadString(LName.Strings[i])  + ''^I'' + 
LName.Strings[i];
        end
      end;
     LName.Free;
    end


Pro Windejsi 9x a ME je to trochu složitější, tam je potřeba procházet 
celý registrový strom '\enum' a v něm hledat 'class' jménem 'ports' nebo 
'modem' a pro ně si pak najít v 
'\System\CurrentControlSet\Services\Class\' jméno toho portu. Ale takhle 
starý systém asi stejně nehodláš podporovat, tak to nemá cenu rozebírat.

Dne 10.3.2019 v 11:47 Martin Locker napsal(a):
> Zdravím,
> 
> 
> lze nějak detekovat v aplikaci, resp. ošetřit násilné odpojení USB zařízení (vytažení kabelu), které funguje jako Virtual COM?
> Zjistil jsem, že v mé aplikaci (C#) to samozřejmě spadne na přístupu k portu, ale co je horší. Ani po připojení zařízení se to nevzpamatuje, v původním usb portu to již není win detekováno. V jiném usb se to ale najde. Fungovat to začne v daném portu až po restartu win7.
> Tedy:
> 1. jak to rozumně ošetřit v aplikaci, aby to nespadlo?
> 2. jak zajistit, aby to windowsy pro opětovném připojení do původního portu detekovaly?
> 
> 
> Díky za pomoc
> 
> 
> Martin L.
> 
> 
> 
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 


Další informace o konferenci Hw-list