タイトル | : Re: Vb6)時間制限ありping応答確認する方法 |
記事No | : 16261 |
投稿日 | : 2016/10/04(Tue) 10:14 |
投稿者 | : 魔界の仮面弁士 |
> 端末番号指定 ここでいう「端末番号」とは何を指していますか? IPv6 アドレスのことでしょうか。IPv4 アドレスのことでしょうか。 それとも別の何か?
> Win32_PingStatusclassを使うやり方を見つけましたが、私の方では上手くいきませんでした。 Win32_PingStatusclass というのは Win32_PingStatus クラスのことだと思いますが、 具体的には、何が問題になっているのでしょうか?
Option Explicit Private Sub Command1_Click() Dim wql As String wql = "SELECT * FROM Win32_PingStatus" _ & " WHERE (Address = '8.8.8.8' OR Address = 'google.co.jp' OR Address='www.microsoft.com' OR Address = 'hanatyan.sakura.ne.jp')" _ & " AND TimeToLive=32" _ & " AND BufferSize=64" _ & " AND Timeout=1000" _ & " AND TimestampRoute=0"
Dim tm As Single tm = Timer
Dim oSet As Object Set oSet = GetObject("winmgmts:").ExecQuery(wql)
Dim o As Object, v As Variant Dim msg As String msg = "" For Each o In oSet If o.StatusCode = 0 Then msg = msg & (vbCrLf & "◎ " & o.Address & " => [" & o.ProtocolAddress & "] " & CStr(o.ResponseTime) & "ミリ秒, TTL=" & o.ResponseTimeToLive) Else msg = msg & (vbCrLf & "× " & o.Address & " => エラー" & o.StatusCode) End If If IsArray(o.TimeStampRecordAddress) Then For Each v In o.TimeStampRecordAddress msg = msg & (vbCrLf & vbTab & v) Next End If Next msg = ("実行時間:" & Format(Timer - tm, "0.000000") & "秒") & msg
MsgBox msg, vbInformation End Sub
WMI の Win32_PingStatus 以外の手段としては、 WMI の netDiagnostics クラスの Ping メソッドを使うとか、 ICMP.DLL の IcmpSendEcho API を呼ぶといった手がありますが、 何が問題になっているのかを示して貰わないと、代案も立てられません。
どうしても駄目なら、面倒でも raw socket を投げるか…。
|