Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Wlan connect (https://www.delphipraxis.net/191474-wlan-connect.html)

stefan684 20. Jan 2017 06:37

Wlan connect
 
Hallo,

ich würde gerne per Delphi Verbindungen zu Wlan-Netze herstellen.

Im Netz habe ich einen Wlan-Scanner gefunden:

Delphi-Quellcode:
procedure TFORM1.Scan();
const
WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES =$00000001;
var
  hClient             : THandle;
  dwVersion           : DWORD;
  ResultInt           : DWORD;
  pInterface          : Pndu_WLAN_INTERFACE_INFO_LIST;
  i                   : Integer;
  j                   : Integer;
  pAvailableNetworkList: Pndu_WLAN_AVAILABLE_NETWORK_LIST;
  pInterfaceGuid      : PGUID;
  SDummy              : string;
  l:tlistItem;
begin
  ResultInt:=WlanOpenHandle(1, nil, @dwVersion, @hClient);
  if ResultInt<> ERROR_SUCCESS then
  begin
     WriteLn('Error Open CLient'+IntToStr(ResultInt));
     Exit;
  end;

  ResultInt:=WlanEnumInterfaces(hClient, nil, @pInterface);
  if ResultInt<> ERROR_SUCCESS then
  begin
     WriteLn('Error Enum Interfaces '+IntToStr(ResultInt));
     exit;
  end;

  for i := 0 to pInterface^.dwNumberOfItems - 1 do
  begin
   COMBOBOX1.Items.Add('Interface      ' + pInterface^.InterfaceInfo[i].strInterfaceDescription);
   edit1.Text:=('GUID           ' + GUIDToString(pInterface^.InterfaceInfo[i].InterfaceGuid));

   pInterfaceGuid:= @pInterface^.InterfaceInfo[pInterface^.dwIndex].InterfaceGuid;

      ResultInt:=WlanGetAvailableNetworkList(hClient,pInterfaceGuid,WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES,nil,pAvailableNetworkList);
      if ResultInt<> ERROR_SUCCESS then
      begin
         WriteLn('Error WlanGetAvailableNetworkList '+IntToStr(ResultInt));
         Exit;
      end;

        for j := 0 to pAvailableNetworkList^.dwNumberOfItems - 1 do
        Begin
        l:=listview1.Items.Add;

           SDummy:=PAnsiChar(@pAvailableNetworkList^.Network[j].dot11Ssid.ucSSID);
           l.Caption:=(SDummy);
           l.SubItems.Add(Format('%d ',[pAvailableNetworkList^.Network[j].wlanSignalQuality])+'%');
           //SDummy := GetEnumName(TypeInfo(Tndu_DOT11_AUTH_ALGORITHM),integer(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm)) ;
           SDummy:=DOT11_AUTH_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultAuthAlgorithm);
           l.SubItems.Add(SDummy);
           SDummy:=DOT11_CIPHER_ALGORITHM_To_String(pAvailableNetworkList^.Network[j].dot11DefaultCipherAlgorithm);
           l.SubItems.Add(SDummy);

        End;
  end;

  WlanCloseHandle(hClient, nil);

end;
Das funktioniert soweit, es werden die vorhandenen Netzwerk angezeigt.

Meine Frage ist, wie kann ich jetzt zu einem ausgewählten Netz eine Verbindung herstellen?

In einer Unit befindet sich die Funktion WlanConnect.

Delphi-Quellcode:
function WlanConnect(hClientHandle: Handle; const pInterfaceGuid: PGUID;
     const pConnectionParameters: Pndu_WLAN_CONNECTION_PARAMETERS;
    pReserved: PVOID): DWORD; stdcall;
Weiß jemand, wie ich die Parameter in diese Funktion einsetzen muss?

Danke.

Gruß

Stefan

SProske 20. Jan 2017 07:50

AW: Wlan connect
 
Falls dir das weiterhilft - die Doku zu WlanConnect: https://msdn.microsoft.com/de-de/en-...(v=vs.85).aspx

stefan684 20. Jan 2017 08:05

AW: Wlan connect
 
Hallo,

vielen Dank erstmal.

Gibt es keine Beispiel als Delphi-Code, wie man welche Parameter übergibt?

TiGü 20. Jan 2017 09:37

AW: Wlan connect
 
Zitat:

Zitat von stefan684 (Beitrag 1359331)
Gibt es keine Beispiel als Delphi-Code, wie man welche Parameter übergibt?

Hast du denn den gefundenen Code in TFORM1.Scan() verstanden?

Alle relevanten Informationen liegen doch vor?!?
Du musst nur noch als dritten Parameter pConnectionParameters: Pndu_WLAN_CONNECTION_PARAMETERS erzeugen, ausfüllen und übergeben.

stefan684 20. Jan 2017 09:44

AW: Wlan connect
 
Hallo,

den Code habe ich nicht so richtig verstanden?!?
Mit Zeigern usw. kenne ich mich nicht so gut aus.

Wie bau ich den dritten Parameter zusammen?

Ein Beispiel-Code wäre super.

Danke.

Stefan

stefan684 20. Jan 2017 10:12

AW: Wlan connect
 
So hab ich es bis jetzt gemacht:

Delphi-Quellcode:
var PA : Pndu_WLAN_CONNECTION_PARAMETERS;
  ...
  Pa.strProfile := 'Test';
  Pa.wlanConnectionMode := Wlan_Connection_Mode_profile;
  Pa.pDot11Ssid := @pAvailableNetworkList^.Network[0].dot11Ssid;
  Pa.pDesiredBssidList := @pAvailableNetworkList^.Network[0].dot11BssType;
  Pa.dwFlags := Null;

  ResultInt:= WlanConnect(hClient, @pInterface^.InterfaceInfo[0].InterfaceGuid, PA , nil);
Funktioniert leider nicht.

TiGü 20. Jan 2017 13:50

AW: Wlan connect
 
Zitat:

Zitat von stefan684 (Beitrag 1359364)
So hab ich es bis jetzt gemacht:

Delphi-Quellcode:
var PA : Pndu_WLAN_CONNECTION_PARAMETERS;
  ...
  Pa.strProfile := 'Test';
  Pa.wlanConnectionMode := Wlan_Connection_Mode_profile;
  Pa.pDot11Ssid := @pAvailableNetworkList^.Network[0].dot11Ssid;
  Pa.pDesiredBssidList := @pAvailableNetworkList^.Network[0].dot11BssType;
  Pa.dwFlags := Null;

  ResultInt:= WlanConnect(hClient, @pInterface^.InterfaceInfo[0].InterfaceGuid, PA , nil);
Funktioniert leider nicht.

Ich weiß warum, aber du musst lernen die konkrete Fehlerbeschreibung zu liefern. Meldungen aus der IDE können per Strg+C kopiert werden.
Was genau funktioniert nicht?

himitsu 20. Jan 2017 16:34

AW: Wlan connect
 
Er hat vergessen den Speicher für den Pointer zu reservieren.
Aber das hat ihm auch der Compiler gesagt, denn diese Variable ist nicht initialisiert.

PS: Alternativ kann man auch statt des Pointer-Typs + New direkt den Record-Typen verwenden.

TERWI 24. Jan 2017 12:11

AW: Wlan connect
 
Ich klinke mich hier mal ein - weil gleiches Prob u. a.

Gleichen Code von hier ?! hab ich auch gefunden. Funzt betreff Listing gut. (XP !)
Der aus diesem Haus/Projekt irgendwie gar nicht - EXE hängt beim Scan, API fehlt (aber wohl die gleiche !?)

Problemstellung:
Ich habe hier u.a. ein(ige) ESP8266-WiFi-Module, welche als Acecess-Point laufen und nebst Daten-Fütterung auch wieder Daten von sich geben. Tempörär nach Bedarf ....
D.h., ich möchte
- erkennen, ob jeweile Module "online" sind (wiederholter Scan bei Bedarf - klappt soweit)
- mich mit dem Schläppi (vom eingeloggten WLAN) nach Wahl damit verbinden (TO DO !)
- Daten "duch die Luft" austauschen (das klappt auch wie die Wutz) und
- wenn fettich wieder automatisch mit dem vorherige "Stamm-WLAN" verbinden (TO DO !)
... damit das umständliche aus- und Einloggen (für unbedarfte User meiner APP) entfällt
(und nicht nur für mich automatisch schneller geht)

Test betreff "Connect" (& logo DisConnect) steht gleich noch aus ....
Dazu jedoch noch die Frage vorher:

- Wie erkenne ich, mit welchem WiFi ich bereits (aktuell automatisch zum Home-Router) verbunden bin ?
(und wie ich mir das merken kann/muss für spateren re-connect)
- Ich hab am Schläppi noch einen Fritz!-WLAN-Stick für alternative Verbindung
(ist schneller als der eingebaute Ahteros)
-> Kann ich die parallel nutzen ohne uzuschalten ?

Mega Dank für hilfreiche Tipps/Links.

himitsu 24. Jan 2017 12:21

AW: Wlan connect
 
Viel kann ich nich helfen, aber ja, man kann sich über mehrere WLAN-Module gleichzeitig zu mehreren WLAN-Routern/Hotspots verbinden.
Also Windows kann das probemlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz