文章关键字 ‘VB’

InputBox与两数相加——一个简单的VBS脚本问题

2011年03月9日,星期三

一个昵称为预言家晚报的朋友很喜欢玩SOSO问问,等级LV10,已经算比较高了。晚上挂QQ的时候,看到他的问问有更新,就点进去看了一下,问题是:

我写了如下一段VBS

dim a,b,c
a=inputbox("a","please input")
b=inputbox("b","please input")
c=a+b
msgbox(c)

可是最后结果是11,我知道肯定是倒数第二行的“+”没有作为运算符,请问这段代码该咋么写才正确?

你肯定会不屑一顾,切,那么简单的程序,谁不会?那请你先别往下看,独立写出这个程序,看看到底对不对。注意我的标题是两数相加,而不是两整数相加。

(更多…)

VB调用URLDownloadToFile函数下载文件(带进度条)

2011年02月13日,星期日

今天有个朋友问我VB调用API函数URLDownloadToFile可不可以获取已下载的大小,也就是如何获取下载的进度。

根据MSDN文档,调用函数时要提供第5个参数,即一个指向IBindStatusCallback接口的指针,才能获取下载进度。我对VB也只是略知一二,仅限于与VBS共通的部分,当然不知道用VB怎么实现IBindStatusCallback接口,只好Google了。

Google了半天,总算找到了靠谱点的答案。一篇名为《使用了IBindStatusCallback的URLDownloadToFile函数》的文章,引用如下:

hoho,不好意思搬了一下MSDN。关于这个函数的VB实现,网上已经有很多例子了,不过这些例子都没有使用最后一个参数。近日看到CSDN上有兄弟提问,于是便花了一些时间做了个下载的例子。如果有什么不懂的地方请跟帖…… ^_^

原网站的SEO好像做得不是很好,比较难搜索到(要学会用不同的关键字)。不过代码是很好的,喜欢VB的朋友可以下载来看一下,应该会有所收获。至少对我这样的VB菜鸟而言,里面有好多东西都第一次见过,惭愧。都说VB很简单,但是真正精通的人,又有几个?

用VBS监视进程创建和删除

2011年01月27日,星期四

微软脚本中心里的例子,用到了WMI事件,抄下来备查。

监视进程的创建,在每次创建新的进程时,临时事件消费程序都发出警报。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService. _
    ExecNotificationQuery("select * from __instancecreationevent " _
        & " within 1 where TargetInstance isa 'Win32_Process'")
i = 0
Do While i = 0
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    Wscript.Echo objLatestProcess.TargetInstance.Name
Loop

监视进程的删除,在每次进程终止时,临时事件消费程序都发出警报。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredProcesses = objWMIService. _
    ExecNotificationQuery("select * from __instancedeletionevent " _
            & "within 1 where TargetInstance isa 'Win32_Process'")
i = 0
Do While i = 0
    Set objLatestProcess = colMonitoredProcesses.NextEvent
    Wscript.Echo objLatestProcess.TargetInstance.Name
Loop

参考链接:

  1. 监视进程的创建
  2. 监视进程的删除

用VBS检测U盘插入和弹出事件(二)

2011年01月9日,星期日

鉴于很多人反映之前写的那篇在XP下无效,做了一下修改。说是修改,其实是直接复制粘贴脚本专家的代码。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colEvents = objWMIService.ExecNotificationQuery _
    ("Select * From __InstanceOperationEvent Within 10 Where " _
        & "TargetInstance isa 'Win32_LogicalDisk'")

Do While True
    Set objEvent = colEvents.NextEvent
    If objEvent.TargetInstance.DriveType = 2 Then 
        Select Case objEvent.Path_.Class
            Case "__InstanceCreationEvent"
                Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
                    " has been added."
            Case "__InstanceDeletionEvent"
                Wscript.Echo "Drive " & objEvent.TargetInstance.DeviceId & _
                    " has been removed."
        End Select
    End If
Loop

参考链接:How Can I Determine When a Removable Drive Gets Connected?

用VBS实现PHP的md5_file函数

2011年01月4日,星期二
Function md5_file(filename, raw_output)
    Dim HashedData, Utility, Stream
    Set HashedData = CreateObject("CAPICOM.HashedData")
    Set Utility = CreateObject("CAPICOM.Utilities")
    Set Stream = CreateObject("ADODB.Stream")
    HashedData.Algorithm = 3
    Stream.Type = 1
    Stream.Open
    Stream.LoadFromFile filename
    Do Until Stream.EOS
        HashedData.Hash Stream.Read(1024)
    Loop
    If raw_output Then
        md5_file = Utility.HexToBinary(HashedData.Value)
    Else
        md5_file = HashedData.Value
    End If
End Function

参考链接:HashedData Object