Thema: Wlan connect

Einzelnen Beitrag anzeigen

Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
381 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Wlan connect

  Alt 29. Jan 2017, 13:36
.... und wieder ein Stückchen glücklicher: Auch das Notifing funzt nun !
Wo fange ch mal an ? Am besten mit der eigendlichen Frage: WLAN_CONNECT

Es ist ganz offensichtlich
A) .... ein Fehler in der WLAN-API für Delphi, die es div. im WEB (mit gleichem Inhalt zu laden gibt.
Ich habe Diese hier verwendet.
Es ist ein Fehler in der LIB "nduWlanAPI.pas" !
Falsche Parameterdefinition .... so isse's richtig und funzt:
Code:
type
  Pndu_WLAN_CONNECTION_PARAMETERS = ^Tndu_WLAN_CONNECTION_PARAMETERS;
  Tndu_WLAN_CONNECTION_PARAMETERS = record
    wlanConnectionMode: Tndu_WLAN_CONNECTION_MODE;
    strProfile: LPCWSTR;     // changed by TERWI - remind missing "W" for pointer !
//    strProfile: LPCTSTR;   // ORIGINAL declared by author
    pDot11Ssid: Pndu_DOT11_SSID;
    pDesiredBssidList: Pndu_DOT11_BSSID_LIST;
    dot11BssType: Tndu_DOT11_BSS_TYPE;
    dwFlags: DWORD;
  end;
.... ein simples "W" fehlte.

B) .... und die Frage der richtigen Initialisierung. Meine Routine sieht so aus:
Code:
function TMain.WLAN_Connect(ConLast : boolean) : HRESULT;
var
  ConPrms : Tndu_WLAN_CONNECTION_PARAMETERS;
  Name    : WideString;
begin
  if NOT Assigned(FpIFDATA) then exit;
  if NOT Assigned(FpNWDATA) then exit;
  if NOT FIsClient then exit;
  if ConLast then
    Name := WideString(FpIFDATA.actProfile)
  else
    Name := WideString(FpNWDATA.actProfile);
  ConPrms.wlanConnectionMode := wlan_connection_mode_profile;
  ConPrms.strProfile        := PWChar(Name);
  ConPrms.pDot11Ssid        := NIL;
  // Windows XP: pDesiredBssidList member must be NULL.
  ConPrms.pDesiredBssidList := NIL;
  ConPrms.dot11BssType      := dot11_BSS_type_any;
  // Windows XP: dwFlags must be set to 0
  ConPrms.dwFlags           := 0;
  result := WlanConnect(FhClient,
                        @FGuid,
                        @ConPrms,
                        nil);
  if result <> ERROR_SUCCESS then
    Memo.Lines.Add('CONNECT - FAILED: ' + IntToStr(result) + ' - ' + GetErrString(result))
  else
    Memo.Lines.Add('CONNECT - OK ... wait for notify !`');
end;
FhClient und FhClient sind globale var. Dito FpIFDATA, worin Daten aus dem aktuell connecteten Interface/Adapter gehalten werden.
Die Connection Params sind für XP-kompatiblen ausgelegt (mode_profile).

Der Parameter "ConLast" besagt hier, das ich entweder die letzte Verbindung des Adapters oder eine neu gewählte nehme. Hie wird nur ein String für den Profilnamen (der gültig sein muss !) passend zugewiesen.
Funzt nun tadellos.

Später mehr.

Geändert von TERWI (29. Jan 2017 um 14:20 Uhr)
  Mit Zitat antworten Zitat