![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброго всем времени суток!
В среде Ардуино ИДЕ для вышеозвученной железяки был написан скетч: Код:
#include <ESP8266WiFi.h> #include <WiFiUdp.h> const char *ssid = "ESP-007.1"; unsigned int localPort = 8086; // local port to listen on // buffers for receiving and sending data char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1]; //buffer to hold incoming packet, работает (обменивается сообщениями и т. д.) за исключением того, что к Точке Доступа (ESP-007.1) приходится подключаться вручную (силами Винды) и тут: ВНИМАНИЕ - центральный вопрос темы: как законнектиться с нею (ТД or AP) силами Delphi???? Имею на вооружении такое: (опять е...у - господа админы/модеры, это - Ваш "минус": почему нельзя вместо ссылки показать скриншот того о чём идёт речь?): https://yadi.sk/i/m155vx3L1NEHgQ - как в ВиФиСканере заюзать WlanConnect (точнее:_) как правильно заполнить структуру WLAN_CONNECTION_PARAMETERS? В частности её мембера ucSSID?) А то получаю Acces violation... Код:
procedure TForm1.btWifiConnectClick(Sender: TObject);
var
ConPrms : Tndu_WLAN_CONNECTION_PARAMETERS;
profile, s: string;
mySSID: Pndu_DOT11_SSID;
uchSSID: array[0..NDU_DOT11_SSID_MAX_LENGTH - 1] of uchar;
i: integer;
u: ulong;
begin
s:= edSSID.Text;{"ESP-007.1}
for I := 0 to High(uchSSID) do
uchSSID[i]:= 0;
for I := 1 to Length(s) +1 do
uchSSID[i-1]:= ord(s[i]);
profile:= '<?xml version="1.0"?><WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">' +
'<name>{0}</name><SSIDConfig><SSID><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType>' +
'<connectionMode>manual</connectionMode><autoSwitch>false</autoSwitch><MSM><security><authEncryption>' +
'<authentication>WPA2PSK</authentication><encryption>AES</encryption><useOneX>false</useOneX></authEncryption>' +
'<sharedKey><keyType>passPhrase</keyType><protected>false</protected><keyMaterial>{1}</keyMaterial></sharedKey>' +
'<keyIndex>0</keyIndex></security></MSM></WLANProfile>';
u:= Length(s);
mySSID.uSSIDLength:= u;
mySSID.ucSSID:= uchSSID;// Вот тут: НЕСООТВЕТСТВИЕ!!! типов
ConPrms.strProfile := PWChar(profile);
ConPrms.pDot11Ssid := mySSID;
// 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;
if WlanConnect(Gwifihandle, pIfaceGuid, @ConPrms, nil) = ERROR_SUCCESS then//Gwifihandle = Глобальный хэндл сессии, что возвращает ф-ция Скан,
//pIfaceGuid = опять же Скан указывает на: Беспроводной сетевой USB-адаптер N 150 D-Link DWA-125 (версия B) - эти парам-тры: оба О,К
showmessage('Вродь как подключено') else;
showmessage('Дулю тебе, а не ВайФай');
end;а по насущной проблеме := nil Обчем буду благодарен за любую подсказку: в какую сторону копать... Последний раз редактировалось UFO 007, 10.10.2020 в 16:06. |
|
#2
|
|||
|
|||
|
Не мытьём, так - катаньем:
Код:
Procedure WinExec007(const ACmdLine: String; const ACmdShow: UINT = SW_SHOWNORMAL);
var
SI: TStartupInfo;
PI: TProcessInformation;
CmdLine: String;
Begin
Assert(ACmdLine <> '');
CmdLine := ACmdLine;
UniqueString(CmdLine);
FillChar(SI, SizeOf(SI), 0);
FillChar(PI, SizeOf(PI), 0);
SI.cb := SizeOf(SI);
SI.dwFlags := STARTF_USESHOWWINDOW;
SI.wShowWindow := ACmdShow;
SetLastError(ERROR_INVALID_PARAMETER);
{$WARN SYMBOL_PLATFORM OFF}
Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False, CREATE_DEFAULT_ERROR_MODE {$IFDEF UNICODE}or CREATE_UNICODE_ENVIRONMENT{$ENDIF}, nil, nil, SI, PI));
{$WARN SYMBOL_PLATFORM ON}
CloseHandle(PI.hThread);
CloseHandle(PI.hProcess);
End;
Function CSharpWiFiConnect(AP_Name: string): boolean;
var // если AP_Name = '0', то ap_connector отключает ТД подключенную предыдущим вызовом
tsName: TStringlist; // ; NeedConnect: boolean
begin
tsName:= TStringlist.Create;
tsName.Add(AP_Name);
tsName.SaveToFile(temp + '\ap_ToConnect.txt');
tsName.Clear;
WinExec007(temp + '\ap_connector.exe', SW_HIDE);//подключились к AP_Name
while FileExists(temp + '\ap_ToConnect.txt') do Sleep(1);// ждём завершения ap_connector.exe
Result:= not FileExists(temp + '\ap_ToConnect.txt');
tsName.Free;
end;
procedure TForm1.btWifiConnectClick(Sender: TObject);
var
Res : TResourceStream;
begin
temp:= GetEnvironmentVariable('TEMP');
if not FileExists(temp + '\ap_connector.exe') then
begin
Res := TResourceStream.Create(hInstance, 'ap_connector', RT_RCDATA);
Res.SavetoFile(temp + '\ap_connector.exe');
Res.Free;
end;
if not FileExists(temp + '\SimpleWifi.dll') then
begin
Res := TResourceStream.Create(hInstance, 'SimpleWifi', RT_RCDATA);
Res.SavetoFile(temp + '\SimpleWifi.dll');
Res.Free;
end;
CSharpWiFiConnect('ESP-007.3');
end; |