2009-12-11 93 views
0

有人可以將它轉換爲德爾福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

回答

3

不要尋找wifi,爲WMi做。

使用WMI,你可以得到關於計算機的元素,包括無線網絡的大量信息。

該組件可以幫助你,並與2010年德爾福工作

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

+0

這個指針看起來不錯,我已經下載並播放了。可以使用這種方法枚舉並查找並行端口的已分配I/O地址?布萊恩。 – 2009-12-11 22:17:22

7

轉到安格斯約翰遜的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