WifiSignalStrength基本德尔福Converstion

问题描述:

有人可以将它转换为德尔福2010年?无法找到delphi代码返回WiFi信号强度后,我发现这个基本代码。有人可以将其转换为Delphi吗?WifiSignalStrength基本德尔福Converstion

'************************************** 
' Name: WiFi Signal Strength 
' Description:Returns the Wifi signal st 
'  rength in bars (1 to 5, 5 being good) 
' By: Techni Rei Myoko 
' 
'This code is copyrighted and has' limited warranties.Please see http://w 
'  ww.Planet-Source-Code.com/vb/scripts/Sho 
'  wCode.asp?txtCodeId=71872&lngWId=1'for details.'************************************** 

Option Explicit 
Public WiFiHardwareName As String, WiFiDecibals As Long 
Dim objWMIService As Object, isSet As Boolean 
Public Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long, ByVal dwReserved As Long) As Long 

Public Enum ConnectedState 
    INTERNET_CONNECTION_MODEM = &H1 
    INTERNET_CONNECTION_LAN = &H2 
    INTERNET_CONNECTION_PROXY = &H4 
    INTERNET_CONNECTION_MODEM_BUSY = &H8 
    INTERNET_RAS_INSTALLED = &H10 
    INTERNET_CONNECTION_OFFLINE = &H20 
    INTERNET_CONNECTION_CONFIGURED = &H40 
End Enum 

Public Function WifiSignalStrength(Optional Computer As String = ".") As Long 
    On Error Resume Next 
    Dim colItems As Object, objItem As Object 
    WifiSignalStrength = IIf(isConnected, 5, 0) 

    If Not isSet Then 
     Set objWMIService = GetObject("winmgmts:\\" & Computer & "\root\wmi") 
     isSet = True 
    End If 

    Set colItems = objWMIService.ExecQuery("Select * From MSNdis_80211_ReceivedSignalStrength") 

    For Each objItem In colItems 
     WiFiDecibals = objItem.NDIS80211ReceivedSignalStrength 
     WiFiHardwareName = objItem.InstanceName 

     Select Case WiFiDecibals 
      Case 0: WiFiHardwareName = "Ethernet" 
      Case Is > -57: WifiSignalStrength = 5 ' -56 To 0 
      Case Is > -68: WifiSignalStrength = 4 '-67 To -57 
      Case Is > -72: WifiSignalStrength = 3 '-71 To -68 
      Case Is > -80: WifiSignalStrength = 2 '-79 To -72 
      Case Is > -90: WifiSignalStrength = 1 '-89 To -80 
      Case Else: WifiSignalStrength = 0 
     End Select 
Next 

End Function 

'Connection 

Public Function isConnected() As Boolean 

    Dim dwFlags As Long, retval As Long 
    retval = InternetGetConnectedState(dwFlags, 0&) 
    isConnected = retval = 1 
End Function 
+0

测试这里提出的各种suggestons,两个不同的开发者在我们的研究团队发现,经过“检测无线上网使用Delph的网络我和Native Wifi API“是我们使用Delphi 2007和Delphi 2010在Vista上测试2台测试PC上的WiFi信号强度的最佳方式......可以在这里找到这篇文章:http://theroadtodelphi.wordpress.com/ 2009/10/07/detection-wifi-networks-using-delphi/ 作者介绍的代码很容易编译,对于我们检测信号强度非常有效。 感谢所有谁帮助! – 2009-12-12 17:43:01

不要寻找wifi,为WMi做。

使用WMI,你可以得到关于计算机的元素,包括无线网络的大量信息。

该组件可以帮助你,并与2010年德尔福工作

http://www.magsys.co.uk/delphi/magwmi.asp

+0

这个指针看起来不错,我已经下载并播放了。可以使用这种方法枚举并查找并行端口的已分配I/O地址?布莱恩。 – 2009-12-11 22:17:22

转到安格斯约翰逊的website和下载MagWMI(免费)。它包含了德尔福的功能从德尔福直接查询WMI和演示程序应该让您同时测试你的机器上的选择和查看结果,并告诉你如何从自己的代码做编程。 (我必须在MagWMI.pas中更改两个过程声明,以便将两个WideString参数更改为简单字符串以便在D2010下编译。)

或者,您可以导入W​​indows WMI脚本库(组件|导入组件|导入类型库并搜索“WBEM”),并使用Delphi在导入过程中为您创建的类。

最后,您可以使用ComObj单元并使用CreateOleObject()函数返回OleVariant,使用它来执行查询,并处理使用OleVariants和SafeArrays进行迭代的混乱情况。我开始为你写这篇文章,并认定它不好。 <g>

MagWMI单元将您发布的所有代码更改为几条语句,与此类似(MagWMI演示中采用的内容很相似,而且我无法使用您的确切选择,因为此时没有无线台式):

var 
    Select: string; 
    WMIResults := T2DimStrArray; // MagWMI defined two dimensional string array 
    Instances, Rows, i, j: Integer; 
begin 
    Select := 'SELECT * FROM Win32_OperatingSystem"'; 
    Rows := MagWMIGetInfo('', 'root\CIMV2', '', '', Select, WMIResults, Instances); 
    if Rows > 0 then 
    begin 
    if Instances >= ListView1.Columns.Count then 
     Instances := ListView1.Columns.Count - 1; 
    for J := 0 to Instances do 
     ListView1.Columns.Items[j].Caption := WMIResults[j, 0]; 
    for i := 1 to Rows do 
    begin 
     with ListView1.Items.Add do 
     begin 
     Caption := WMIResults[0, i]; 
     for j := 0 to Instances do 
      SubItems.Add(WMIResults[j, i]); 
     end; 
    end; 
    end; 
end; 

上面的代码会产生类似的输出(有很多更多的行),以这样的:

Instance    1 
========    ==================== 
BootDevice   \Device\HarddiskVolume1 
BuildNumber   2600 
BuildType    Multiprocessor Free 
Caption    Microsoft Windows XP Professional 
CodeSet    1252 
// Snip about 50 more lines