| タイトル | : Re^6: VB2010 internetsetoption |  
| 記事No | : 11405 |  
| 投稿日 | : 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
  本ケースに該当するように思いますが、 具体的な解決法がイメージできておりません。 設置値によって返り値が変動することも考慮すると、 上記記事以外にもまだ不備があるようです。
  引き続きアドバイス頂ければ幸いです。 よろしくお願い致します。 
 
 |