![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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; |