![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Доброго времени суток!
Пишу программу (гламурную панельку вроде той, что была в Висте), одной из функций которой является показ списка точек Wi-Fi, видимых в округе в настоящий момент. Собственно, вопрос: каким компонентом можно получить список точек доступа из-под Delphi? Нужно имя, тип шифрования и мощность сигнала. |
|
#3
|
|||
|
|||
|
Видел. Все примеры на С. А в С я дуб
Есть ли какие статьи или книги почитать по этой теме? Гугль ничего внятнее заброшенных веток форумов не выдает. |
|
#4
|
||||
|
||||
|
Дак выкладывай сишный, авось кто поможет перевести.
|
|
#5
|
||||
|
||||
|
Вот одна из переводилок с Си на раскаль, хотя в принципе всё равно на каком ЯПе дано описание, здесь задача вырисовывается в следующем (есно, имхо) : сначало нужно подключиться к библиотеке Wlanapi.dll, примерно так, если только stackoverflow не ошибается
Код:
type
TWlanOpenHandle = function( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD; stdcall;
function apiWlanOpenHandle( dwClientVersion:DWORD;
pReserved:Pointer;
pdwNegotiatedVersion:PDWORD;
phClientHandle:PHANDLE
):DWORD;
implementation
...
function apiWlanOpenHandle ( dwClientVersion:DWORD; pReserved:Pointer; pdwNegotiatedVersion:PDWORD; phClientHandle:PHANDLE ):DWORD;
var
WlanOpenHandle: TWlanOpenHandle;
DLL: Cardinal;
begin
DLL:=LoadLibrary('Wlanapi.dll');
WlanOpenHandle := GetProcAddress(DLL, 'WlanOpenHandle');
if Assigned(WlanOpenHandle) then
begin
WlanOpenHandle(dwClientVersion, pReserved, pdwNegotiatedVersion, phClientHandle);
end
else begin
ShowMessage('Function not found');
end;
end;Все начинается с создания клиентской сессии путем вызова WlanOpenHandle, затем Вы можете либо проверить версию операционной системы и передавать в качестве версии (dwClientVersion) 1 для Windows XP, 2 для Windows Vista и выше, либо всегда передавать 2. Даже в Windows XP вызов функции будет успешным, а pdwNegotiatedVersion укажет нам на выбранную ОС версию клиента. Клиент создан, хэндл на него получен, теперь необходимо выбрать интерфейс, с которым мы будем работать. Список доступных интерфейсов мы получим вызвав WlanEnumInterfaces, описание Цитата:
О количестве доступных интерфейсов нам расскажет член структуры WLAN_INTERFACE_INFO_LIST — dwNumberOfItems. Теперь мы можем вызвать WlanGetAvailableNetworkList и получить список доступных сетей Цитата:
Параметр dwFlags может принимать следующие значения: WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_ADHOC_PROFILES и WLAN_AVAILABLE_NETWORK_INCLUDE_ALL_MANUAL_HIDDEN_P ROFILES. Конечная цель ppAvailableNetworkList — указатель на структуру WLAN_AVAILABLE_NETWORK_LIST, которая в свою очередь содержит массив структур WLAN_AVAILABLE_NETWORK, которые в свою очередь описывают параметры каждой найденной сети. После того, как мы получили, то, что хотели, необходимо освободить все указатели и закрыть все хэндлы. Указатели на список интерфейсов и список сетей освобождаем путем вызова WlanFreeMemory, клиентскую сессию закрываем используя WlanCloseHandle. Описания структур см. в данной статье. Похоже, это всё |
|
#6
|
|||
|
|||
|
ОК, если кто поможет - я только за!
![]() Нашел тем временем еще вариант - тоже на С. Вот он. Что понравилось - человек объясняет, что и зачем он делает. Так что думаю код из статьи взять за основу. С первым куском кода из статьи я разобрался, попутно научившись у Гугла подключать сишные dll-ки Но вот застрял теперь тут:Код:
...
implementation
...
function WlanEnumInterfaces(hClientHandle:THandle;
pReserved: pointer;
ppInterfaceList: PWLAN_INTERFACE_INFO_LIST): DWORD;
stdcall; external 'wlanapi.dll' name 'WlanEnumInterfaces';
...
{$R *.dfm}Ага, и я про ту же статью с Хабра)) p.s.: Спасибо за переводилку ![]() Последний раз редактировалось M.A.D.M.A.N., 20.07.2014 в 23:11. |
|
#7
|
|||
|
|||
|
Цитата:
Скорее всего просто тоже надо описать тип. Вот структура записи из MSDN: Код:
typedef struct _WLAN_INTERFACE_INFO_LIST {
DWORD dwNumberOfItems;
DWORD dwIndex;
WLAN_INTERFACE_INFO InterfaceInfo[];
} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;ЗЫ. Как только встречаешь что-то незнакомое при работе с WinAPI, то в гугле вбиваешь "MSDN что-у-тебя-там" и читаешь оригинальную справку Микрософта и думаешь, как это переписать/объявить в Дельфи. ЗЗЫ. А на Delphi0Jedi не смотрел, готового переведенного API нету? |
|
#8
|
||||
|
||||
|
<DELETED>
З.Ы. lmikle опередил ![]() Последний раз редактировалось Alegun, 22.07.2014 в 23:34. |