1,183
社区成员
发帖
与我相关
我的任务
分享
_WLAN_INTERFACE_STATE = (
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
);
//} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
WLAN_INTERFACE_STATE = _WLAN_INTERFACE_STATE;
PWLAN_INTERFACE_STATE = ^_WLAN_INTERFACE_STATE;
_WLAN_INTERFACE_INFO = packed record
InterfaceGuid: TGUID;
strInterfaceDescription: array[0..255] of WideChar;
isState: WLAN_INTERFACE_STATE;
end;
//} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
WLAN_INTERFACE_INFO = _WLAN_INTERFACE_INFO;
PWLAN_INTERFACE_INFO = ^_WLAN_INTERFACE_INFO;
_WLAN_INTERFACE_INFO_LIST = packed record
dwNumberOfItems: DWORD;
dwIndex: DWORD;
InterfaceInfo: PWLAN_INTERFACE_INFO;
end;
//} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
WLAN_INTERFACE_INFO_LIST = _WLAN_INTERFACE_INFO_LIST;
PWLAN_INTERFACE_INFO_LIST = ^_WLAN_INTERFACE_INFO_LIST;
PPWLAN_INTERFACE_INFO_LIST = ^PWLAN_INTERFACE_INFO_LIST;
function WlanOpenHandle(dwClientVersion: DWORD; pReserved: Pointer;
pdwNegotiatedVersion: PDWORD; phClientHandle: PHandle
): DWORD; stdcall;
function WlanCloseHandle(hClientHandle: THandle;
pReserved: Pointer): DWORD; stdcall;
function WlanSetProfile(hClientHandle: THandle; const pInterfaceGuid: PGUID;
dwFlags: DWORD; strProfileXml: LPCWSTR; strAllUserProfileSecurity: LPCWSTR;
bOverwrite: BOOL; pReserved: Pointer; var pdwReasonCode: DWORD
): DWORD; stdcall;
function WlanEnumInterfaces(hClientHandle: THandle; pReserved: Pointer;
ppInterfaceList: PPWLAN_INTERFACE_INFO_LIST): DWORD; stdcall;
function WlanGetProfile(hClientHandle: THandle;
const pInterfaceGuid: PGUID; strProfileName: LPCWSTR;
pReserved: Pointer; var pstrProfileXml: PWideChar;
var pdwFlags: DWORD; var pdwGrantedAccess: DWORD): DWORD; stdcall;
var
dwVer, dwRet, dwFlag, dwAccess: DWORD;
phClient: THandle;
pList: PWLAN_INTERFACE_INFO_LIST;
pInfo: WLAN_INTERFACE_INFO;
i: Integer;
profile: PWideChar;
begin
dwRet := WlanOpenHandle(1, nil, @dwVer, @phClient);
if dwRet <> ERROR_SUCCESS then
Exit;
pList := nil;
dwRet := WlanEnumInterfaces(phClient, nil, @pList);
if dwRet <> ERROR_SUCCESS then
begin
OutputDebugString(PChar(IntToStr(dwRet)));
Exit;
end;
for i := 0 to pList.dwNumberOfItems - 1 do
begin
pInfo := pList.InterfaceInfo^;
lst1.Items.Add(GUIDToString(pInfo.InterfaceGuid));
dwFlag := 0;
dwAccess := 0;
profile := nil;
dwRet := WlanGetProfile(phClient, @pInfo.InterfaceGuid, 'vlan', nil,
profile, dwFlag, dwAccess);
if dwRet = ERROR_SUCCESS then
begin
lst1.Items.Add(profile);
end;
Inc(pList.InterfaceInfo);
end;
WlanCloseHandle(phClient, nil);
_WLAN_INTERFACE_STATE = (
wlan_interface_state_not_ready = 0,
wlan_interface_state_connected = 1,
wlan_interface_state_ad_hoc_network_formed = 2,
wlan_interface_state_disconnecting = 3,
wlan_interface_state_disconnected = 4,
wlan_interface_state_associating = 5,
wlan_interface_state_discovering = 6,
wlan_interface_state_authenticating = 7
);
//} WLAN_INTERFACE_STATE, *PWLAN_INTERFACE_STATE;
WLAN_INTERFACE_STATE = _WLAN_INTERFACE_STATE;
PWLAN_INTERFACE_STATE = ^_WLAN_INTERFACE_STATE;
_WLAN_INTERFACE_INFO = packed record
InterfaceGuid: TGUID;
strInterfaceDescription: array[0..255] of WCHAR;
isState: WLAN_INTERFACE_STATE;
end;
//} WLAN_INTERFACE_INFO, *PWLAN_INTERFACE_INFO;
WLAN_INTERFACE_INFO = _WLAN_INTERFACE_INFO;
PWLAN_INTERFACE_INFO = ^_WLAN_INTERFACE_INFO;
_WLAN_INTERFACE_INFO_LIST = packed record
dwNumberOfItems: DWORD;
dwIndex: DWORD;
InterfaceInfo: array[0..SizeOf(_WLAN_INTERFACE_INFO)] of WLAN_INTERFACE_INFO;
end;
//} WLAN_INTERFACE_INFO_LIST, *PWLAN_INTERFACE_INFO_LIST;
WLAN_INTERFACE_INFO_LIST = _WLAN_INTERFACE_INFO_LIST;
PWLAN_INTERFACE_INFO_LIST = ^_WLAN_INTERFACE_INFO_LIST;
PPWLAN_INTERFACE_INFO_LIST = ^PWLAN_INTERFACE_INFO_LIST;
function WlanOpenHandle(dwClientVersion: DWORD; pReserved: Pointer;
pdwNegotiatedVersion: PDWORD; phClientHandle: PHandle
): DWORD; stdcall;
function WlanCloseHandle(hClientHandle: THandle;
pReserved: Pointer): DWORD; stdcall;
function WlanSetProfile(hClientHandle: THandle; const pInterfaceGuid: PGUID;
dwFlags: DWORD; strProfileXml: LPCWSTR; strAllUserProfileSecurity: LPCWSTR;
bOverwrite: BOOL; pReserved: Pointer; var pdwReasonCode: DWORD
): DWORD; stdcall;
function WlanEnumInterfaces(hClientHandle: THandle; pReserved: Pointer;
ppInterfaceList: PPWLAN_INTERFACE_INFO_LIST): DWORD; stdcall;
function WlanGetProfile(hClientHandle: THandle;
const pInterfaceGuid: PGUID; strProfileName: LPCWSTR;
pReserved: Pointer; pstrProfileXml: PPWideChar;
pdwFlags: PDWORD; pdwGrantedAccess: PDWORD): DWORD; stdcall;
procedure WlanFreeMemory(pMemory: Pointer); stdcall;
//获取一个无线网络的设置
function GetWifiProfile(AName: PWideChar): string;
var
dwVer, dwRet, dwFlag: DWORD;
dwAccess: DWORD;
phClient: THandle;
pList: PWLAN_INTERFACE_INFO_LIST;
pInfo: WLAN_INTERFACE_INFO;
i: Integer;
profile: PWideChar;
begin
dwRet := WlanOpenHandle(1, nil, @dwVer, @phClient);
if dwRet <> ERROR_SUCCESS then
Exit;
pList := nil;
dwRet := WlanEnumInterfaces(phClient, nil, @pList);
if dwRet <> ERROR_SUCCESS then
begin
OutputDebugString(PChar(IntToStr(dwRet)));
Exit;
end;
for i := 0 to pList.dwNumberOfItems - 1 do
begin
pInfo := pList.InterfaceInfo[i];
dwFlag := 0;
dwAccess := 0;
profile := nil;
dwRet := WlanGetProfile(phClient, @pInfo.InterfaceGuid, AName, nil,
@profile, @dwFlag, @dwAccess);
if dwRet = ERROR_SUCCESS then
Result := profile;
end;
WlanFreeMemory(pList);
WlanCloseHandle(phClient, nil);
end;
{
添加一个无线网络
AName:无线网络名称
APass:无线网络密码 长度大于等于8
}
function SetWifiProfile(AName, APass: string): Boolean;
const
CsProfile = '<?xml version="1.0"?>'
+ '<WLANProfile xmlns="http://www.microsoft.com/networking/WLAN/profile/v1">'
+ '<name>%s</name>'
+ '<SSIDConfig>'
+ '<SSID>'
+ '<name>%s</name>'
+ '</SSID>'
+ '</SSIDConfig>'
+ '<connectionType>ESS</connectionType>'
+ '<MSM>'
+ '<security>'
+ '<authEncryption>'
+ '<authentication>WPAPSK</authentication>'
+ '<encryption>TKIP</encryption>'
+ '<useOneX>false</useOneX>'
+ '</authEncryption>'
+ '<sharedKey>'
+ '<keyType>networkKey</keyType>'
+ '<protected>false</protected>'
+ '<keyMaterial>%s</keyMaterial>'
+ '</sharedKey>'
+ '</security>'
+ '</MSM>'
+ '</WLANProfile>';
var
dwVer, dwRet, dwReason: DWORD;
phClient: THandle;
profileXml: PWideChar;
pList: PWLAN_INTERFACE_INFO_LIST;
pInfo: WLAN_INTERFACE_INFO;
begin
Result := False;
dwRet := WlanOpenHandle(1, nil, @dwVer, @phClient);
if dwRet <> ERROR_SUCCESS then
Exit;
pList := nil;
dwRet := WlanEnumInterfaces(phClient, nil, @pList);
if dwRet <> ERROR_SUCCESS then
begin
OutputDebugString(PChar(IntToStr(dwRet)));
Exit;
end;
if pList.dwNumberOfItems > 0 then
begin
pInfo := pList.InterfaceInfo[0];
profileXml := PWideChar(Format(CsProfile,
[AName, AName, APass]));
dwRet := WlanSetProfile(phClient, @pInfo.InterfaceGuid, 0, profileXml, nil,
True, nil, dwReason);
Result := dwRet = ERROR_SUCCESS;
end;
WlanFreeMemory(pList);
WlanCloseHandle(phClient, nil);
end;
_WLAN_INTERFACE_INFO_LIST = packed record
dwNumberOfItems: DWORD;
dwIndex: DWORD;
InterfaceInfo: array[0..SizeOf(_WLAN_INTERFACE_INFO)] of WLAN_INTERFACE_INFO;
end;