有人可以将此转换为Delphi 2010吗?在无法找到delphi代码以返回WiFi信号强度后,我找到了这个基本代码。有人可以将其转换为Delphi吗?
'**************************************
' 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 :(得分:7)
转到Angus Johnson的website并下载MagWMI(免费软件)。它包含用于直接从Delphi查询WMI的Delphi函数,演示应用程序应该允许您在计算机上测试SELECT并查看结果,并向您展示如何通过自己的代码以编程方式执行此操作。 (我必须在MagWMI.pas中更改两个过程声明的版本,以便将两个WideString参数更改为简单字符串,以便在D2010下进行编译。)
或者,您可以导入Windows WMI脚本库(组件|导入组件|导入类型库,并搜索“WBEM”),并使用Delphi在导入过程中为您创建的类。
最后,您可以使用ComObj单元并使用CreateOleObject()函数返回OleVariant,使用它来执行查询,并处理使用OleVariants和SafeArrays进行迭代的混乱。我开始为你写这篇文章,并认为这不好。 &LT g取代;
MagWMI单元将您发布的所有代码更改为几个语句,类似于此(几乎从MagWMI演示中获取,我无法使用您的精确选择,因为此桌面上没有无线):< / p>
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
答案 1 :(得分:3)
不要寻找wifi,为WMi做。
使用WMI,您可以获得有关计算机大量元素的信息,包括无线网络。
此组件可以帮助您,它可以与Delphi 2010一起使用。