上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 

 

    

 

本文对应知识领域
VB常用代码3(二)
作者:未知 申领版权
2010年11月14日 共有 1131 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

 

    
清空回收站
    
    Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias _
    "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal pszRootPath As String, _
    ByVal dwFlags As Long) As Long
    Private Declare Function SHUpdateRecycleBinIcon Lib "shell32.dll" () As Long
    Private Const SHERB_NOCONFIRMATION = &H1
    Private Const SHERB_NOPROGRESSUI = &H2
    Private Const SHERB_NOSOUND = &H4
    Private Sub Command1_Click()
    Dim retval As Long ' return value
    retval = SHEmptyRecycleBin(RecycleBin.hwnd, "", SHERB_NOPROGRESSUI) ' 清空回收站, 确认
    ' 若有错误出现,则返回回收站图示
    If retval <> 0 Then ' error
    retval = SHUpdateRecycleBinIcon()
    End If
    End Sub
    Private Sub Command2_Click()
    Dim retval As Long ' return value
    ' 清空回收站, 不确认
    retval = SHEmptyRecycleBin(RecycleBin.hwnd, "", SHERB_NOCONFIRMATION)
    ' 若有错误出现,则返回回收站图示
    If retval <> 0 Then ' error
    retval = SHUpdateRecycleBinIcon()
    End If
    Command1_Click
    End Sub
    
    
    28.获得系统文件夹的路径
    Private Declare Function GetSystemDirectory Lib "kernel32" Alias _
    "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Sub Command1_Click()
    Dim syspath As String
    Dim len5 As Long
    syspath = String(255, 0)
    len5 = GetSystemDirectory(syspath, 256)
    syspath = Left(syspath, InStr(1, syspath, Chr(0)) - 1)
    Debug.Print "System Path : "; syspath
    End Sub
    
    29.动态增加控件并响应事件
    Option Explicit
    '通过使用WithEvents关键字声明一个对象变量为新的命令按钮
    Private WithEvents NewButton As CommandButton
    '增加控件
    Private Sub Command1_Click()
    If NewButton Is Nothing Then
    '增加新的按钮cmdNew
    Set NewButton = Controls.Add("VB.CommandButton", "cmdNew", Me)
    '确定新增按钮cmdNew的位置
    NewButton.Move Command1.Left Command1.Width 240, Command1.Top
    NewButton.Caption = "新增的按钮"
    NewButton.Visible = True
    End If
    End Sub
    '删除控件(注:只能删除动态增加的控件)
    Private Sub Command2_Click()
    If NewButton Is Nothing Then
    Else
    Controls.Remove NewButton
    Set NewButton = Nothing
    End If
    End Sub
    '新增控件的单击事件
    Private Sub NewButton_Click()
    MsgBox "您选中的是动态增加的按钮!"
    End Sub
    
    30.得到磁盘序列号
    Function GetSerialNumber(strDrive As String) As Long
    Dim SerialNum As Long
    Dim Res As Long
    Dim Temp1 As String
    Dim Temp2 As String
    Temp1 = String$(255, Chr$(0))
    Temp2 = String$(255, Chr$(0))
    Res = GetVolumeInformation(strDrive, Temp1, Len(Temp1), SerialNum, 0, 0, Temp2, _
    Len(Temp2))
    GetSerialNumber = SerialNum
    End Function
    调用形式 Label1.Caption = GetSerialNumber("c:\")
    
    31.打开屏幕保护
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd _
    As Long, ByVal wMsg As Long, ByVal wParam
    
    As Long, lParam As Any) As Long
    '我们将要调用的那个消息,在MSDN中搜索WM_SYSCOMMAND就可以找到具体说明
    Const WM_SYSCOMMAND = &H112
    '这个参数指明了我们让系统启动屏幕保护
    Const SC_SCREENSAVE = &HF140&
    Private Sub Command1_Click()
    SendMessage Me.hwnd, WM_SYSCOMMAND, SC_SCREENSAVE, 0
    End Sub
    
    
    32.获得本机IP地址
    方法一:利用Winsock控件
    winsockip.localip
    方法二:
    Private Const MAX_IP = 255
    Private Type IPINFO
    dwAddr As Long
    dwIndex As Long
    dwMask As Long
    dwBCastAddr As Long
    dwReasmSize As Long
    unused1 As Integer
    unused2 As Integer
    End Type
    Private Type MIB_IPADDRTABLE
    dEntrys As Long
    mIPInfo(MAX_IP) As IPINFO
    End Type
    Private Type IP_Array
    mBuffer As MIB_IPADDRTABLE
    BufferLen As Long
    End Type
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination _
    As Any, Source As Any, ByVal Length As
    
    Long)
    Private Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, _
    pdwSize As Long, ByVal Sort As Long) As Long
    Dim strIP As String
    Private Function ConvertAddressToString(longAddr As Long) As String
    Dim myByte(3) As Byte
    Dim Cnt As Long
    CopyMemory myByte(0), longAddr, 4
    For Cnt = 0 To 3
    ConvertAddressToString = ConvertAddressToString CStr(myByte(Cnt)) "."
    Next Cnt
    ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
    End Function
    
    Public Sub Start()
    Dim Ret As Long, Tel As Long
    Dim bBytes() As Byte
    Dim Listing As MIB_IPADDRTABLE
    On Error GoTo END1
    GetIpAddrTable ByVal 0&, Ret, True
    If Ret <= 0 Then Exit Sub
    ReDim bBytes(0 To Ret - 1) As Byte
    GetIpAddrTable bBytes(0), Ret, False
    CopyMemory Listing.dEntrys, bBytes(0), 4
    strIP = "你机子上有 " & Listing.dEntrys & " 个 IP 地址。" & vbCrLf
    strIP = strIP & "------------------------------------------------" & vbCrLf & vbCrLf
    For Tel = 0 To Listing.dEntrys - 1
    CopyMemory Listing.mIPInfo(Tel), bBytes(4 (Tel * Len(Listing.mIPInfo(0)))), Len _(Listing.mIPInfo(Tel))
    strIP = strIP & "IP 地址 : " & ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr) & vbCrLf
    Next
    Exit Sub
    END1:
    MsgBox "ERROR"
    End Sub
    Private Sub Form_Load()
    Start
    MsgBox strIP
    End Sub
    
    33. 用键盘方向键控制COMBOX
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
    Const CB_SHOWDROPDOWN = &H14F
    Dim bDrop As Boolean
    Private isDo As Boolean
    Private Sub Combo1_Click()
    If Not isDo Then
    isDo = True '<----------回置状态
    Exit Sub
    Else: MsgBox "safd"
    End If
    End Sub
    Private Sub Combo1_DropDown()
    bDrop = True
    End Sub
    Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 40 Then
    isDo = False
    SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 1, 0
    ElseIf KeyCode = 38 Then
    isDo = False
    If Combo1.ListIndex = 0 Then
    If bDrop Then
    bDrop = False
    SendMessage Combo1.hwnd, CB_SHOWDROPDOWN, 0, 0
    End If
    End If
    End If
    End Sub
    Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
    If Combo1.Text = Combo1.List(0) Then
    isDo = True
    End If
    End Sub
    Private Sub Form_Load()
    isDo = True
    Combo1.AddItem "abcd"
    Combo1.AddItem "abcd1"
    Combo1.AddItem "abcd2"
    Combo1.AddItem "abcd3"
    End Sub
    
    
    35.VB下的CRC校验程序
    一 计算法
    计算法就是依据CRC校验码的产生原理来设计程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。为了便于理解,这里假
    
    定了三位数据,而多项式码为A001(hex)。
    在窗体上放置一命令按钮Command1,并添加如下代码:
    
    Private Sub Command1_Click()
    Dim CRC() As Byte
    Dim d() As Byte '待传输数据
    ReDim d(2) As Byte
    d(0) = 123
    d(1) = 112
    d(2) = 135
    CRC = CRC16(d) '调用CRC16计算函数
    'CRC(0)为高位
    'CRC(1)为低位
    End Sub
    注意:在数据传输时CRC的低位可能在前,而高位在后。
    
    Function CRC16(data() As Byte) As String
    Dim CRC16Lo As Byte, CRC16Hi As Byte      'CRC寄存器
    Dim CL As Byte, CH As Byte                '多项式码&HA001
    Dim SaveHi As Byte, SaveLo As Byte
    Dim i As Integer
    Dim Flag As Integer
    CRC16Lo = &HFF
    CRC16Hi = &HFF
    CL = &H1
    CH = &HA0
    For i = 0 To UBound(data)
    CRC16Lo = CRC16Lo Xor data(i) '每一个数据与CRC寄存器进行异或
    For Flag = 0 To 7
    SaveHi = CRC16Hi
    SaveLo = CRC16Lo
    CRC16Hi = CRC16Hi \ 2            '高位右移一位
    CRC16Lo = CRC16Lo \ 2            '低位右移一位
    If ((SaveHi And &H1) = &H1) Then '如果高位字节最后一位为1
    CRC16Lo = CRC16Lo Or &H80      '则低位字节右移后前面补1
    End If                           '否则自动补0
    If ((SaveLo And &H1) = &H1) Then '如果LSB为1,则与多项式码进行异或
    CRC16Hi = CRC16Hi Xor CH
    CRC16Lo = CRC16Lo Xor CL
    End If
    Next Flag
    Next i
    Dim ReturnData(1) As Byte
    ReturnData(0) = CRC16Hi              'CRC高位
    ReturnData(1) = CRC16Lo              'CRC低位
    CRC16 = ReturnData
    End Function
    
    2.查表法
    查表法的优缺点与计算法的正好相反。为了便于比较,这里所有的假定与计算法的完全相同,都而在窗体上放置一个Command1的按钮,其
    
    代码部分与上面的也完全一致。下面只介绍CRC函数的编写源代码。
    
    Private Function CRC16(data() As Byte) As String
    Dim CRC16Hi As Byte
    Dim CRC16Lo As Byte
    CRC16Hi = &HFF
    CRC16Lo = &HFF
    Dim i As Integer
    Dim iIndex As Long
    For i = 0 To UBound(data)
    iIndex = CRC16Lo Xor data(i)
    CRC16Lo = CRC16Hi Xor GetCRCLo(iIndex)        '低位处理
    CRC16Hi = GetCRCHi(iIndex)                    '高位处理
    Next i
    Dim ReturnData(1) As Byte
    ReturnData(0) = CRC16Hi        'CRC高位
    ReturnData(1) = CRC16Lo        'CRC低位
    CRC16 = ReturnData
    End Function
    
    'CRC低位字节值表
    Function GetCRCLo(Ind As Long) As Byte
    GetCRCLo = Choose(Ind 1, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40,
    
    &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1,
    
    &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80,
    
    &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0,
    
    &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0,
    
    &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81,
    
    &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, _
    &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80,
    
    &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0,
    
    &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1,
    
    &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81,
    
    &H40, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H0, &HC1, &H81, &H40, &H1,
    
    &HC0, &H80, &H41, &H0, &HC1, &H81, &H40, &H1, &HC0, &H80, &H41, &H1, &HC0, &H80, &H41, &H0, &HC1, &H81, &H40)
    End Function
    
    'CRC高位字节值表
    Function GetCRCHi(Ind As Long) As Byte
    GetCRCHi = Choose(Ind 1, &H0, &HC0, &HC1, &H1, &HC3, &H3, &H2, &HC2, &HC6, &H6, &H7, &HC7, &H5, &HC5, &HC4, &H4,
    
    &HCC, &HC, &HD, &HCD, &HF, &HCF, &HCE, &HE, &HA, &HCA, &HCB, &HB, &HC9, &H9, &H8, &HC8, &HD8, &H18, &H19, &HD9, &H1B, &HDB,
    
    &HDA, &H1A, &H1E, &HDE, &HDF, &H1F, &HDD, &H1D, &H1C, &HDC, &H14, &HD4, &HD5, &H15, &HD7, &H17, &H16, &HD6, &HD2, &H12, &H13,
    
    &HD3, &H11, &HD1, &HD0, &H10, &HF0, &H30, &H31, &HF1, &H33, &HF3, &HF2, &H32, &H36, &HF6, &HF7, &H37, &HF5, &H35, &H34, &HF4,
    
    &H3C, &HFC, &HFD, &H3D, &HFF, &H3F, &H3E, &HFE, &HFA, &H3A, &H3B, &HFB, &H39, &HF9, &HF8, &H38, &H28, &HE8, &HE9, &H29, &HEB,
    
    &H2B, &H2A, &HEA, &HEE, &H2E, &H2F, &HEF, &H2D, &HED, &HEC, &H2C, &HE4, &H24, &H25, &HE5, &H27, &HE7, &HE6, &H26, &H22, &HE2,
    
    &HE3, &H23, &HE1, &H21, &H20, &HE0, &HA0, &H60, _
    &H61, &HA1, &H63, &HA3, &HA2, &H62, &H66, &HA6, &HA7, &H67, &HA5, &H65, &H64, &HA4, &H6C, &HAC, &HAD, &H6D, &HAF, &H6F, &H6E,
    
    &HAE, &HAA, &H6A, &H6B, &HAB, &H69, &HA9, &HA8, &H68, &H78, &HB8, &HB9, &H79, &HBB, &H7B, &H7A, &HBA, &HBE, &H7E, &H7F, &HBF,
    
    &H7D, &HBD, &HBC, &H7C, &HB4, &H74, &H75, &HB5, &H77, &HB7, &HB6, &H76, &H72, &HB2, &HB3, &H73, &HB1, &H71, &H70, &HB0, &H50,
    
    &H90, &H91, &H51, &H93, &H53, &H52, &H92, &H96, &H56, &H57, &H97, &H55, &H95, &H94, &H54, &H9C, &H5C, &H5D, &H9D, &H5F, &H9F,
    
    &H9E, &H5E, &H5A, &H9A, &H9B, &H5B, &H99, &H59, &H58, &H98, &H88, &H48, &H49, &H89, &H4B, &H8B, &H8A, &H4A, &H4E, &H8E, &H8F,
    
    &H4F, &H8D, &H4D, &H4C, &H8C, &H44, &H84, &H85, &H45, &H87, &H47, &H46, &H86, &H82, &H42, &H43, &H83, &H41, &H81, &H80, &H40)
    End Function
    
    
    36.如何打开光驱
    Public Declare Function CDdoor Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString
    
    As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
    Call CDdoor("set CDAudio door open", 0, 0, 0) '打开光驱
    Call CDdoor("set CDAudio door closed", 0, 0, 0) '关闭光驱
相关新闻

您可能对这些感兴趣  

用VB做定时断线程序
VisualBasic中的界面设计原则和编程技巧
VB6.0与Windows API 间的呼叫技巧
制作可以自动隐藏的弹出式菜单
ListBox中的字符串超长显示的解决方法
VB中的Unicode 和 Ansi 格式
优化程序显示速度
Visual Basic 产生渐层的 Form 背景
用VB实现客户——服务器(TCP/IP)
用VB制作注册软件的方法

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》