Poslední příspěvky

Stran: [1] 2 3 ... 10
1
Obecné / Re:Pole objektů a jejich události do procedury
« Poslední příspěvek od Jan Fiala kdy 14-07-2024, 17:44:12 »
Proc nema objekt nejakou identifikaci, aby sis ho pak v poli dohledal?
Jinak muzes projit pole a testovat, zda ten ktery byl predan do udalosti soyhlasi s nejakym v poli
Kód: [Vybrat]
For i ...
If sender is FSipCaller[i] then...
2
Obecné / Pole objektů a jejich události do procedury
« Poslední příspěvek od jarex kdy 13-07-2024, 13:43:34 »
Mám problém, mám vytvořeno 100 účtů SIP klientů. A k nim potřebuji nějak přiřadit eventy tak, aby se v zaregistrované proceduře vědělo, od kterého klienta event dorazil.

Kód: [Vybrat]
for I := 0 to 99 do
    begin
    FSipCaller[i] := TSipClient.Create(nil);
    FSipCaller[i].OnAnswer := SipClientAnswer;
    FSipCaller[i].OnBye := SipClientBye;
    FSipCaller[i].OnCall := SipClientCall;
    FSipCaller[i].OnRegistration := SipClientRegistration;
    end;

Pokud to mám takto, tak každý určitý event padne do procedury, ale tam už nevím, ze kterého zaregistrovaného SIP to přišlo.

 
3
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od jarex kdy 13-07-2024, 13:37:08 »
Moc díky, nějak se s tím popasuji.
4
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od vandrovnik kdy 10-07-2024, 19:02:54 »
Tak mi to nedalo :-)

Kód: [Vybrat]
procedure TMainForm.Button2Click(Sender: TObject);
 var Buf: PIP_ADAPTER_ADDRESSES;
     Item: PIP_ADAPTER_ADDRESSES;
     BufSize: UInt;
     Stav: string;
 begin
 BufSize:=0;
 GetAdaptersAddresses(0 {AF_UNSPEC}, 0 {flags}, nil, nil, @BufSize);
 GetMem(Buf, BufSize);
 try
  if GetAdaptersAddresses(0 {AF_UNSPEC}, 0 {flags}, nil, Buf, @BufSize)=ERROR_SUCCESS then begin
   Item:=Buf;
   while Item<>nil do begin
    case Item^.OperStatus of
     IfOperStatusUp: Stav:='Up';
     IfOperStatusDown: Stav:='Down';
     IfOperStatusTesting: Stav:='Testing';
     IfOperStatusUnknown: Stav:='Unknown';
     IfOperStatusDormant: Stav:='Dormant';
     IfOperStatusNotPresent: Stav:='Not present';
     IfOperStatusLowerLayerDown: Stav:='Lower level down';
     else Stav:='?';
    end;
    eLog.Lines.Add(Item^.FriendlyName+': '+Stav);
    Item:=Item^.Next;
   end;
  end;
 finally
  FreeMem(Buf);
 end;
end;
5
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od chaloup kdy 10-07-2024, 18:47:55 »
Jestli považuješ to, že má síťový adapter IP adresu, tak něco takovýho, podívej se co ti to bude vracet když to bude odpojený

https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersinfo
https://learn.microsoft.com/en-us/windows/win32/api/iptypes/ns-iptypes-ip_adapter_info

Kód: [Vybrat]
uses
  Winapi.IpTypes,
  Winapi.IpHlpApi;

function IsNetworkCableConnected: Boolean;
const
  MIB_IF_TYPE_ETHERNET = 6;
var
  AdapterInfo: PIP_ADAPTER_INFO;
  AdapterList: PIP_ADAPTER_INFO;
  AdapterSize: ULONG;
begin
  Result := False;
  AdapterSize := 0;
  GetAdaptersInfo(nil, AdapterSize);
  GetMem(AdapterInfo, AdapterSize);
  try
    if GetAdaptersInfo(AdapterInfo, AdapterSize) = ERROR_SUCCESS then
    begin
      AdapterList := AdapterInfo;
      while AdapterList <> nil do
      begin
        if (AdapterList^.Type_ = MIB_IF_TYPE_ETHERNET) and (AdapterList^.AddressLength > 0) then
        begin
          Result := True; // Kabel je připojen
          Break;
        end;
        AdapterList := AdapterList^.Next;
      end;
    end;
  finally
    FreeMem(AdapterInfo);
  end;
end;
6
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od vandrovnik kdy 10-07-2024, 08:41:30 »
7
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od jarex kdy 09-07-2024, 22:08:02 »
Tak trochu problem. Cyklické provadeni procedury zapříčiní celkem velké vytížení procesoru. Je to primitivní zařízení s jednojádrem, a i když se procedura ve vlákně provádí se sleepem 2000 ms, procesor toto vlákno vytíží na 10- 15%. Tedy pro potřebu rozsvítit, či zhasnout LED diodu katastrofa. Nedá se to vyčíst třeba z registrů, nebo podobně? Nebo třeba nějaká událost? Vždyť je to primitivní požadavek . . . Na to se v Delphi nemyslelo?
8
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od jarex kdy 08-07-2024, 17:10:21 »
Ano bylo to tak:
Kód: [Vybrat]
CoInitializeEx(nil,COINIT_APARTMENTTHREADED) díky za rady.
9
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od zdenek kdy 08-07-2024, 11:46:48 »
A není potřeba ve vlákně inicialilzovat COM?
10
Obecné / Re:Status síťového adaptéru
« Poslední příspěvek od jarex kdy 08-07-2024, 10:45:59 »
Moc děkuji. Funguje to, ale pouze v hlavním vlákně, navíc procedura trvá okolo 2s. Jakmile to dám do samostatného tthread, skončí to na
Kód: [Vybrat]
  FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
Celé vlákno mám takto:

Kód: [Vybrat]
procedure TGetLan.Execute;
var
  FSWbemLocator: OLEVariant;
  FWMIService: OLEVariant;
  FWbemObjectSet: OLEVariant;
  FWbemObject: OLEVariant;
  oEnum: IEnumvariant;
  iValue: LongWord;
begin
while not GetLan.terminated do
    begin
    sleep(1000);
    try
    FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
    FWMIService := FSWbemLocator.ConnectServer('localhost', 'root\CIMV2', '', '');
    FWbemObjectSet := FWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionID = "' + 'Ethernet 2' + '"', 'WQL', 0);
    oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
    if oEnum.Next(1, FWbemObject, iValue) = 0 then
    begin
    if (FWbemObject.NetConnectionStatus = 2) then LANLED:='1' else LANLED:='0'; // 2 - připojeno
    end;
    except
    end;
    end;
end;
Stran: [1] 2 3 ... 10