tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^6: VB2010 internetsetoption
投稿日: 2015/04/17(Fri) 09:17
投稿者D
全体的に修正して確認致しました。
InternetSetOpenがTrueを返す場合とFlaseを返す場合がありますが、
その後、InternetQueryOptionで設定を取得すると60000が必ず返ってきています。
Trueが返って来ている場合でも、設定変更できていいないのではないかと考えています。

現時点でのコードを記載させていただきます。
////////////////////////////////////////////////////////////////////

    Public Const INTERNET_OPTION_CONNECT_TIMEOUT As Integer = 2 '接続タイムアウト

    Private Declare Function InternetOpen Lib "wininet.dll" Alias _
        "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, _
         ByVal sProxyName As String, ByVal sProxyBypass As String, _
         ByVal lFlags As Integer) As Integer
    Private Declare Function InternetConnect Lib "wininet.dll" Alias _
        "InternetConnectA" (ByVal hInternetSession As Integer, _
         ByVal sServerName As String, ByVal nServerPort As Integer, _
         ByVal sUsername As String, ByVal sPassword As String, _
         ByVal lService As Integer, ByVal lFlags As Integer, _
         ByVal lContext As Integer) As Integer
    Private Declare Auto Function InternetSetOption Lib "wininet.dll" _
        (ByVal hInternet As Integer, ByVal dwOption As Integer, _
         ByVal lpBuffer As Integer, ByVal lpdwBufferLength As Integer) As Boolean
    Private Declare Auto Function InternetQueryOption Lib "wininet.dll" _
        Alias "InternetQueryOptionA" (ByVal hInternet As Integer _
        , ByVal lOption As Integer, ByRef sBuffer As Integer _
        , ByRef lBufferLength As Integer) As Boolean

    Private Const USER_AGENT = "WININET"            'ユーザーエージェント名
    Private hOpen As Integer                        ' オープンハンドル
    Private hConnect As Integer                     ' コネクトハンドル

    Public Function FtpPortOpen() As Boolean

        'ポ-トオープン
        hOpen = InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
        '結果判断
        If hOpen = 0 Then
            FtpPortOpen = False
        Else
      dim timeout as integer
            timeout = 9999
            If FtpSetOption(INTERNET_OPTION_CONNECT_TIMEOUT, timeout ) Then
                FtpPortOpen = True
            Else
                FtpPortOpen = False
            End If
        End If

     End Function

    Function FtpSetOption(pOption As Integer, pValue As Integer) As Boolean
        Dim i As Integer
        Dim b as boolean
        b = InternetSetOption(hOpen, pOption, pValue, Marshal.SizeOf(pValue))
        call InternetQueryOption(hOpen, pOption, i, Marshal.SizeOf(i))

        Return b
    End Function
////////////////////////////////////////////////////////////////////

timeoutの値を1000にするとInternetSetOptionはFalseを返し、
99999にするとTrueを返します。
しかしながら、InternetQueryOptionで取得するiは変わらず60000を返します。

また、少し気になる記事を見つけました。
hhttps://support.microsoft.com/en-us/kb/176420/ja

本ケースに該当するように思いますが、
具体的な解決法がイメージできておりません。
設置値によって返り値が変動することも考慮すると、
上記記事以外にもまだ不備があるようです。

引き続きアドバイス頂ければ幸いです。
よろしくお願い致します。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。