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