掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
インターネット接続確認をするには? (ID:6307)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
InternetOpenURLでキャッシュを取得するかどうかはちょっとテストしてみます。 結果は後ほど。 別の案を。 GetIfTableを使用すれば、LANの状態は見れそうです。 ダイアルアップの環境がないので、そちらのテストはできていませんが。 うちでは、接続されている場合は、dwOperStatusが5(MIB_IF_OPER_STATUS_OPERATIONAL)が返り、切断されている場合は、dwOperStatusが0(MIB_IF_OPER_STATUS_NON_OPERATIONAL)が返ってきました。 サンプルソースです。 //---------------------------------------------------- //関数の定義Unit unit IPHLPAPI; interface uses Windows, Messages, SysUtils, Variants, Classes; Const MAX_INTERFACE_NAME_LEN = $100; ERROR_SUCCESS = 0; MAXLEN_IFDESCR = $100; MAXLEN_PHYSADDR = 8; MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0 ; MIB_IF_OPER_STATUS_UNREACHABLE = 1; MIB_IF_OPER_STATUS_DISCONNECTED = 2; MIB_IF_OPER_STATUS_CONNECTING = 3; MIB_IF_OPER_STATUS_CONNECTED = 4; MIB_IF_OPER_STATUS_OPERATIONAL = 5; MIB_IF_TYPE_OTHER = 1; MIB_IF_TYPE_ETHERNET = 6; MIB_IF_TYPE_TOKENRING = 9; MIB_IF_TYPE_FDDI = 15; MIB_IF_TYPE_PPP = 23; MIB_IF_TYPE_LOOPBACK = 24; MIB_IF_TYPE_SLIP = 28; MIB_IF_ADMIN_STATUS_UP = 1; MIB_IF_ADMIN_STATUS_DOWN = 2; MIB_IF_ADMIN_STATUS_TESTING = 3; TYPE MIB_IFROW = Record wszName : Array[0 .. (MAX_INTERFACE_NAME_LEN*2-1)] of char; dwIndex : LongInt; dwType : LongInt; dwMtu : LongInt; dwSpeed : LongInt; dwPhysAddrLen : LongInt; bPhysAddr : Array[0 .. (MAXLEN_PHYSADDR-1)] of Byte; dwAdminStatus : LongInt; dwOperStatus : LongInt; dwLastChange : LongInt; dwInOctets : LongInt; dwInUcastPkts : LongInt; dwInNUcastPkts : LongInt; dwInDiscards : LongInt; dwInErrors : LongInt; dwInUnknownProtos : LongInt; dwOutOctets : LongInt; dwOutUcastPkts : LongInt; dwOutNUcastPkts : LongInt; dwOutDiscards : LongInt; dwOutErrors : LongInt; dwOutQLen : LongInt; dwDescrLen : LongInt; bDescr : Array[0 .. (MAXLEN_IFDESCR - 1)] of Char; end; MIB_IFTABLE=record dwNumEntries: DWORD; table: Array[0 .. (MAXLEN_PHYSADDR-1)] of MIB_IFROW; end; PMIB_IFTABLE=^MIB_IFTABLE; Function GetIfTable( pIfTable : Pointer; VAR pdwSize : LongInt; bOrder : LongInt ): LongInt; StdCall; implementation Function GetIfTable; stdcall; external 'IPHLPAPI.DLL'; end. //----------------------------------------------------------- //こちらが使用例 uses IPHLPAPI; procedure TForm1.Button1Click(Sender: TObject); var Buf: array[0..1023] of char; d: Integer; IfTable: PMIB_IFTABLE; i: integer; begin d := 0; GetIfTable(nil, d, 0); IfTable := SysGetMem(d); if Assigned(IfTable) then begin if GetIfTable(IfTable, d,0) = NO_ERROR then begin for i := 0 to IfTable.dwNumEntries - 1 do begin Memo1.Lines.Add(''); Memo1.Lines.Add('dwIndex 0x' + IntToHex(IfTable.table[i].dwIndex, 8)); case IfTable.table[i].dwType of MIB_IF_TYPE_OTHER: Memo1.Lines.Add('dwType MIB_IF_TYPE_OTHER'); MIB_IF_TYPE_ETHERNET: Memo1.Lines.Add('dwType MIB_IF_TYPE_ETHERNET'); MIB_IF_TYPE_TOKENRING: Memo1.Lines.Add('dwType MIB_IF_TYPE_TOKENRING'); MIB_IF_TYPE_FDDI: Memo1.Lines.Add('dwType MIB_IF_TYPE_FDDI'); MIB_IF_TYPE_PPP: Memo1.Lines.Add('dwType MIB_IF_TYPE_PPP'); MIB_IF_TYPE_LOOPBACK: Memo1.Lines.Add('dwType MIB_IF_TYPE_LOOPBACK'); MIB_IF_TYPE_SLIP: Memo1.Lines.Add('dwType MIB_IF_TYPE_SLIP'); end; Memo1.Lines.Add('dwMtu ' + IntToStr(IfTable.table[i].dwMtu)); Memo1.Lines.Add('dwSpeed ' + IntToStr(IfTable.table[i].dwSpeed)); Memo1.Lines.Add('dwPhysAddrLen ' + IntToStr(IfTable.table[i].dwPhysAddrLen)); Memo1.Lines.Add('bPhysAddr ' + IntToHex(Integer(IfTable.table[i].bPhysAddr[0]), 2) + IntToHex(Integer(IfTable.table[i].bPhysAddr[1]), 2) + IntToHex(Integer(IfTable.table[i].bPhysAddr[2]), 2) + IntToHex(Integer(IfTable.table[i].bPhysAddr[3]), 2) + IntToHex(Integer(IfTable.table[i].bPhysAddr[4]), 2) + IntToHex(Integer(IfTable.table[i].bPhysAddr[5]), 2) ); Memo1.Lines.Add('dwAdminStatus ' + IntToStr(IfTable.table[i].dwAdminStatus)); Memo1.Lines.Add('dwOperStatus ' + IntToStr(IfTable.table[i].dwOperStatus)); Memo1.Lines.Add('dwLastChange ' + IntToStr(IfTable.table[i].dwLastChange)); Memo1.Lines.Add('dwInOctets ' + IntToStr(IfTable.table[i].dwInOctets)); Memo1.Lines.Add('dwInUcastPkts ' + IntToStr(IfTable.table[i].dwInUcastPkts)); Memo1.Lines.Add('dwInNUcastPkts ' + IntToStr(IfTable.table[i].dwInNUcastPkts)); Memo1.Lines.Add('dwInDiscards ' + IntToStr(IfTable.table[i].dwInDiscards)); Memo1.Lines.Add('dwInErrors ' + IntToStr(IfTable.table[i].dwInErrors)); Memo1.Lines.Add('dwInUnknownProtos ' + IntToStr(IfTable.table[i].dwInUnknownProtos)); Memo1.Lines.Add('dwOutOctets ' + IntToStr(IfTable.table[i].dwOutOctets)); Memo1.Lines.Add('dwOutUcastPkts ' + IntToStr(IfTable.table[i].dwOutUcastPkts)); Memo1.Lines.Add('dwOutNUcastPkts ' + IntToStr(IfTable.table[i].dwOutNUcastPkts)); Memo1.Lines.Add('dwOutDiscards ' + IntToStr(IfTable.table[i].dwOutDiscards)); Memo1.Lines.Add('dwOutErrors ' + IntToStr(IfTable.table[i].dwOutErrors)); Memo1.Lines.Add('dwOutQLen ' + IntToStr(IfTable.table[i].dwOutQLen)); Memo1.Lines.Add('dwDescrLen ' + IntToStr(IfTable.table[i].dwDescrLen)); IfTable.table[i].bDescr[IfTable.table[i].dwDescrLen]:=#0; Memo1.Lines.Add('bDescr ' + IfTable.table[i].bDescr); end; end; SysFreeMem(IfTable); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.