首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

vb.net 2003 api 编程有关问题

2011-12-30 
vb.net 2003 api 编程问题要实现的功能1.将一个文件上传至FTP服务器上2.查找FTP服务器当前目录下最旧的1个

vb.net 2003 api 编程问题
要实现的功能
1.将一个文件上传至FTP服务器上
2.查找FTP服务器当前目录下最旧的1个或几个文件
3.删除旧文件
查了好多资料   感觉用wininet.dll编写最简单了
不过我对API不怎么了解
谁能给个完整点的代码啊


[解决办法]
给你段hook的代码吧,大了点,hoho,你学学api是怎么声明的,wininet.dll是个什么东东,不知道里面的声明


Imports System.Runtime.InteropServices

Public Class MyHook

'Hook键盘
Private Const WH_KEYBOARD As Integer = 2
'Hook返回值
Private hHook As Integer = 0
'定义引用变量防止CallbackOnCollectedDelegate错误的产生
Private HookProc As CallBack
'回调函数
Public Delegate Function CallBack(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
'事件
Public Event KeyDown As System.Windows.Forms.KeyEventHandler
Public Event KeyUp As System.Windows.Forms.KeyEventHandler

'获取线程ID的API声明
<DllImport( "kernel32.dll ", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function GetCurrentThreadId() As Integer
End Function

'设置Hook的API声明
<DllImport( "User32.dll ", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function SetWindowsHookEx(ByVal idHook As Integer, ByVal HookProc As CallBack, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
End Function

'处理下一Hook的API声明
<DllImport( "User32.dll ", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function CallNextHookEx(ByVal idHook As Integer, ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
End Function

'移除Hook的API声明
<DllImport( "User32.dll ", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function UnhookWindowsHookEx(ByVal idHook As Integer) As Boolean
End Function

'安装Hook,类型键盘线程钩子,失败返回0,成功返回钩子句柄
Public Function SetHook() As Integer
HookProc = New CallBack(AddressOf KeyBoardProc)
hHook = SetWindowsHookEx(WH_KEYBOARD, HookProc, IntPtr.Zero, GetCurrentThreadId)
Return hHook
End Function

'钩子处理子程
Private Function KeyBoardProc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
If nCode = 0 Then
If lParam.ToInt32 > 0 Then
RaiseEvent KeyDown(Me, New Windows.Forms.KeyEventArgs(CType(wParam, Windows.Forms.Keys)))
End If
If lParam.ToInt32 < 0 Then
RaiseEvent KeyUp(Me, New Windows.Forms.KeyEventArgs(CType(wParam, Windows.Forms.Keys)))
End If
End If

Return CallNextHookEx(hHook, nCode, wParam, lParam)

End Function

'移除Hook,成功返回True,失败返回False
Public Function UnHook() As Boolean
Return UnhookWindowsHookEx(hHook)
End Function

End Class


[解决办法]
studying
[解决办法]
函数是完成功能的,首先你要知道wininet.dll是干什么的啊
[解决办法]
确认ftp服务器是否允许下载
确认远程文件地址是否正确
确认ftp服务器是否支持ASCII模式
确认ie选项中被动模式是否勾选
确认是否有拦截软件(呵呵,没试过,谁知道有没有这么强功能的软件)
确认本地是否有创建文件的权限
确认本地文件名是否有问题,去掉d:\试一下
------解决方案--------------------


csdn里面的分可以干什么?是不是有分才可以提问题?

Module FTP


Public 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

Public 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

Public Declare Function FtpGetFile Lib "wininet.dll " Alias "FtpGetFileA " (ByVal hConnect As Int32, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Int32, ByVal dwFlagsAndAttributes As Int32, ByVal dwFlags As Int32, ByRef dwContext As Int32) As Boolean
Public Declare Function FtpPutFile Lib "wininet.dll " Alias "FtpPutFileA " (ByVal hConnect As Integer, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile As String, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean

Public Declare Function InternetCloseHandle Lib "wininet.dll " (ByVal hInet As Long) As Integer

Private Const FTP_TRANSFER_TYPE_ASCII = &H1
Public Const FILE_ATTRIBUTE_NORMAL = &H80


Public Sub GetFileByFTP()
'Try
Dim intinet As Integer = InternetOpen( "FTP Control ", 1, vbNullString, vbNullString, 0)
If intinet > 0 Then
'参数:intinet的session值,ftp地址,端口,用户名,密码,LService,LFlags,LContext
Dim intinetconn As Integer = InternetConnect(intinet, "***.***.***.77 ", 0, "username ", "passwd ", 1, 0, 0)
'MsgBox(intinetconn)
If intinetconn > 0 Then
'下载某个文件到指定文件夹
Dim ret As Boolean = FtpGetFile(intinetconn, "index.htm ", "c:\index.htm ", True, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII, 0)

If ret Then
MsgBox( "文件下载成功 ", MsgBoxStyle.OKOnly, "提示: ")
Else
MsgBox( "文件下载失败 ", MsgBoxStyle.OKOnly, "提示: ")
End If
InternetCloseHandle(intinetconn)
InternetCloseHandle(intinet)
Else
MsgBox( "连接失败 ", MsgBoxStyle.OKOnly, "提示: ")
End If

Else
MsgBox( "FTP出错 ", MsgBoxStyle.OKOnly, "提示: ")

End If
'Catch ex As Exception

'End Try
End Sub
Public Sub PutFileByFTP()
Dim intinet As Integer = InternetOpen( "FTP Control ", 1, vbNullString, vbNullString, 0)
If intinet > 0 Then
'参数:intinet的session值,ftp地址,端口,用户名,密码,LService,LFlags,LContext
Dim intinetconn As Integer = InternetConnect(intinet, "***.***.***.77 ", 0, "user ", "passwd ", 1, 0, 0)
'MsgBox(intinetconn)
If intinetconn > 0 Then
'下载某个文件到指定文件夹
Dim ret As Boolean = FtpPutFile(intinetconn, "c:\1.txt ", "1.txt ", FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_ASCII)

If ret Then
MsgBox( "文件上传成功 ", MsgBoxStyle.OKOnly, "提示: ")
Else
MsgBox( "文件上传失败 ", MsgBoxStyle.OKOnly, "提示: ")


End If
InternetCloseHandle(intinetconn)
InternetCloseHandle(intinet)
Else
MsgBox( "连接失败 ", MsgBoxStyle.OKOnly, "提示: ")
End If

Else
MsgBox( "FTP出错 ", MsgBoxStyle.OKOnly, "提示: ")

End If
End Sub

End Module
[解决办法]
Dim internet As Long -> Dim internet As Int32

热点排行