互联网连接状态是什么意思?
我无法弄清楚哪个状态代表路由器,3号?
4是什么意思?
uses
WinInet;
const
MODEM = 1;
LAN = 2;
PROXY = 4;
BUSY = 8;
function GetConnectionKind(var strKind: string): Boolean;
var
flags: DWORD;
begin
strKind := '';
Result := InternetGetConnectedState(@flags, 0);
if Result then
begin
if (flags and MODEM) = MODEM then strKind := 'Modem';
if (flags and LAN) = LAN then strKind := 'LAN';
if (flags and PROXY) = PROXY then strKind := 'Proxy';
if (flags and BUSY) = BUSY then strKind := 'Modem Busy';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
strKind: string;
begin
if GetConnectionKind(strKind) then
ShowMessage(strKind);
end;
答案 0 :(得分:6)
[InternetGetConnectedState](http://msdn.microsoft.com/en-us/library/aa384702(VS.85%29.aspx)在第一个参数中返回一个位掩码,如下所示:
76543210 <-- bit numbers
|| ||||
|| |||+- INTERNET_CONNECTION_MODEM
|| ||+-- INTERNET_CONNECTION_LAN
|| |+--- INTERNET_CONNECTION_PROXY
|| +---- INTERNET_CONNECTION_MODEM_BUSY (No longer used)
|+------ INTERNET_CONNECTION_OFFLINE
+------- INTERNET_CONNECTION_CONFIGURED
如果设置了给定位,则连接属于该类型。所以,如果位nr。设置为2,您通过代理连接。
此外,该函数返回TRUE / FALSE值,表示您是否已连接到互联网。
您的代码中的值1,2,4,8对应于这些位的十进制值,从右侧开始计算。
基本上,代码依次检查每个位,并将strKind变量设置为指示连接性质的文本。
你问的是“哪个是路由器?3?”,我认为你的意思是“我怎么知道我的连接是通过路由器的?”。我认为这与局域网连接是一样的,可能是局域网有一个通过互联网访问互联网的桥梁。
答案 1 :(得分:6)
代码1,2,4,8代表位掩码。我通常更喜欢总是使用十六进制的位掩码来避免任何混淆,因为模式在半字节(4个二进制位的集合)中继续存在,所以它很容易记住。
HEX BINARY DEC
$01 00000001 1
$02 00000010 2
$04 00000100 4
$08 00001000 8
$10 00010000 16
$20 00100000 32
$40 01000000 64
$80 10000000 128
如果您想一次检查两个值,可以将它们组合在一起,例如$ 01或$ 02 = $ 03(二进制00000011)。因此,3将是一个调制解调器和一个局域网。
查看是否设置了某些内容的常见做法是将其与掩码进行对比。例如,如果我的数字是3,并且i“和”这个带有$ 02,那么结果是$ 02,因为掩码和值的位都被设置了。如果我的数字是4,并且我“和”这个带有$ 02,那么结果是$ 00,因为掩码和值的位都没有设置。
当然,这并没有回答我认为你真正的问题。仅通过检查此掩码就无法确定路由器。此掩码只是告诉您是通过调制解调器(也称为拨号)或网络适配器连接。路由器将超出网络适配器,并且需要进一步分析网络以准确确定。
答案 2 :(得分:0)
常量值是标志,表示两件事:(1)你不能有“3”值;(2)你可以在“flags”结果中有多个值。例如,对于结果9(二进制1001),第一次和最后一次检查都是真的。
有关结果含义的详细信息,请查看InternetGetConnectedState的MSDN参考。