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
不要寻找wifi,为WMi做。
使用WMI,你可以得到关于计算机的元素,包括无线网络的大量信息。
该组件可以帮助你,并与2010年德尔福工作
这个指针看起来不错,我已经下载并播放了。可以使用这种方法枚举并查找并行端口的已分配I/O地址?布莱恩。 – 2009-12-11 22:17:22
转到安格斯约翰逊的website和下载MagWMI(免费)。它包含了德尔福的功能从德尔福直接查询WMI和演示程序应该让您同时测试你的机器上的选择和查看结果,并告诉你如何从自己的代码做编程。 (我必须在MagWMI.pas中更改两个过程声明,以便将两个WideString参数更改为简单字符串以便在D2010下编译。)
或者,您可以导入Windows 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
测试这里提出的各种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