作者eliczone (C'est la vie)
看板C_Sharp
標題[問題] wlanapi.dll
時間Mon Aug 6 15:39:45 2007
想要import這個dll 來做一些控制
有去看了MSDN 但有些地方還是不太懂
跑出來的結果不太對 ...
希望有人可以解決我多天的疑惑 謝謝 <(_ _)>
http://msdn2.microsoft.com/en-us/library/ms706613.aspx
-----------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace WindowsApplication27
{
public partial class Form1 : Form
{
public int ierror; //測試看結果對不對
public int ierror2; //同上
public Form1()
{
InitializeComponent();
ierror = 20;
ierror2 = 20;
}
private void Form1_Load(object sender, EventArgs e)
{
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WLAN_CONNECTION_PARAMETERS
{
public
WLAN_CONNECTION_MODE wlanConnectionMode;
[MarshalAs(UnmanagedType.LPWStr, SizeConst = 256)]
public string strProfile;
public IntPtr pDot11Ssid;
public IntPtr pDesiredBssidList;
public
DOT11_BSS_TYPE dot11BssType;
public uint dwFlags;
}
public enum DOT11_BSS_TYPE//因為WLAN_CONNECTION_PARAMETERS中有欄位需要
{ //用到
dot11_BSS_type_infrastructure,
dot11_BSS_type_independent,
dot11_BSS_type_any
}
public enum WLAN_CONNECTION_MODE //因為WLAN_CONNECTION_PARAMETERS中
{ //有欄位需要用到
wlan_connection_mode_profile,
wlan_connection_mode_temporary_profile,
wlan_connection_mode_discovery_secure,
wlan_connection_mode_discovery_unsecure,
wlan_connection_mode_auto,
wlan_connection_mode_invalid
}
[DllImport("Wlanapi.dll", SetLastError = true, CharSet =
CharSet.Auto)]
private static extern int WlanConnect(
[In]
IntPtr hClientHandle,
[In] IntPtr pInterfaceGuid,
[In] IntPtr pConnectionParameters,
out IntPtr pReserved);
[DllImport("wlanapi.dll", EntryPoint = "WlanOpenHandle" ,SetLastError
= true)]
private static extern int WlanOpenHandle(//因為MSDN上說要得到
[In]int dwClientVersion, //hClientHandle要先執行這
[In]IntPtr pReserved, //個function 故
out int pdwNegotiatedVersion,
out IntPtr phClientHandle);
public void MyFunction()
{
int dwClientVersion = 1; //以下四個變數皆是要傳入WlanOpenHandle
IntPtr pReserved =IntPtr.Zero;
int pdwNegotiatedVersion = 0;
IntPtr ClientHandle = IntPtr.Zero;
WLAN_CONNECTION_PARAMETERS pConnectionParameters = new
WLAN_CONNECTION_PARAMETERS();
Guid temp = new Guid();
pConnectionParameters.wlanConnectionMode =
WLAN_CONNECTION_MODE.wlan_connection_mode_profile;
pConnectionParameters.strProfile = null;
pConnectionParameters.pDot11Ssid = IntPtr.Zero;
pConnectionParameters.pDesiredBssidList = IntPtr.Zero;
pConnectionParameters.dot11BssType =
DOT11_BSS_TYPE.dot11_BSS_type_infrastructure;
pConnectionParameters.dwFlags = 0;
IntPtr ptrParam =
Marshal.AllocHGlobal(Marshal.SizeOf(pConnectionParameters));
Marshal.StructureToPtr(pConnectionParameters, ptrParam, true);
IntPtr pInterfaceGuid =
Marshal.AllocHGlobal(Marshal.SizeOf(temp));
Marshal.StructureToPtr(temp, pInterfaceGuid, true);
ierror = WlanOpenHandle(dwClientVersion, pReserved, out
pdwNegotiatedVersion, out ClientHandle);//呼叫function
ierror2 = WlanConnect(ClientHandle, pInterfaceGuid, ptrParam, out
pReserved);
//這個function才是我最終目的 但ierror2跑出來的值是錯誤的@@"
Console.WriteLine("");
}
private void button1_Click(object sender, EventArgs e)
{
MyFunction();
MessageBox.Show(ierror.ToString());
MessageBox.Show(ierror2.ToString());
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.228.145.146
1F:推 EricTsai:沒人知道你想幹嘛 08/06 16:16
2F:推 eliczone:好 那我來講一下 就是想要用WlanConnect連接到特定網路 08/06 16:35
3F:→ eliczone:而因為WlanConnect裡面的參數又需要WlanOpenHandle()執行 08/06 16:36
4F:→ eliczone:才會得到 而因為function中又需要別的列舉或結構 08/06 16:37
5F:→ eliczone:所以就變成這樣@@" 最終目的就是想要連到特定網路 08/06 16:38
※ 編輯: eliczone 來自: 220.228.145.146 (08/06 16:44)
※ 編輯: eliczone 來自: 220.228.145.146 (08/06 16:52)