“程序设计”目录存档

用VBS解压缩ZIP文件

2010年12月13日,星期一

用VBS解压ZIP文件,网上搜到的多数是调用WinRAR,一点技术含量也没有。Google一下“VBS 解压ZIP”,第二是搜搜问问“vbs实现解压缩zip文件”,满意答案是“所以想用vbs来解压这两种格式的文件,至少要有两种命令行解压工具,否则是绝对不可以的”。绝对不可以的,回答的人好自信啊,笑而不语~

(更多…)

没有main函数的C程序

2010年12月12日,星期日

在Visual C++中新建一个Console Application工程,添加一个.c文件,代码如下:

#pragma comment(linker, "/Entry:demon")

void demon()
{
    __asm ret;
}

严格的说这好像已经不是C程序了,而且和编译器有关。没错,这只是标题党。

WMI中的Win32_PingStatus类

2010年12月8日,星期三

平时很少用到ping命令,所以这个类也没怎么用过,测试了一下,好像效率比ping要高。计算ping 100次demon.tw延迟的平均值。

IP = "demon.tw"
WQL = "Select * from Win32_PingStatus Where Address = '$IP'"
WQL = Replace(WQL,"$IP",IP)
n = 0 : s = 0
Do Until n = 100
    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.ExecQuery(WQL,,48)
    For Each objItem in colItems
        If objItem.StatusCode = 0 Then
            s = s + objItem.ResponseTime
            n = n + 1
        End If
    Next
Loop
WScript.Echo "Average:" & s / n

参考链接:Win32_PingStatus Class

你可以分配多大的内存?

2010年12月7日,星期二

《C专家编程》中的一个程序,觉得挺有意思,记录一下。

运行下列程序,看看在你的进程中可以分配多大的内存。

#include <stdio.h>
#include <stdlib.h>
main() {
    int Mb = 0;
    while ( malloc(1<<20)) ++Mb;
    printf("Allocated %d Mb total\n", Mb);
}

总共分配的内存量取决于交换区和你的系统配置中的进程限制。如果实际分配的内存块小于1M字节,你实际得到的内存是否比这要多一些?为什么?

为了让这个程序能够在有内存限制的MS-DOS上运行,把每次分配的单元从1MB改为1KB(就是把1<<20改为1<<10,并用KB代替MB)。

在我的系统物理内存为2GB,可以分配的内存大概是1880MB,你的系统呢?

另,在Windows系统中把1<<20改为1<<10会有很神奇的事情发生哦~

伪造电子邮件发送时间

2010年12月6日,星期一

今天发短信问同学才知道经济法(开学到现在只去过两次)有小论文布置,而且老师要求在12月3日之前把论文的电子版发到他的邮箱,否则平时成绩按0分处理。

天啊,今天可是12月6日!平时成绩可是30分啊!没有平时成绩的话基本是不可能及格了!怎么办?根据爱因斯坦的相对论,时间是不可能倒流的,但是这并不表示我们不能向“过去”发邮件。在网络的世界,时间只不过是0和1罢了。

Const Email_From = "still.demon@gmail.com"
Const Password = "password"
Const Email_To = "jingjifa@163.com" '只是假想的邮箱
Set CDO = CreateObject("CDO.Message")
CDO.Subject = "From The Future"
CDO.From = Email_From
CDO.To = Email_To
CDO.TextBody = "Hello world!"
Const schema = "http://schemas.microsoft.com/cdo/configuration/"
With CDO.Configuration.Fields
    .Item(schema & "sendusing") = 2
    .Item(schema & "smtpserver") = "smtp.gmail.com"
    .Item(schema & "smtpauthenticate") = 1
    .Item(schema & "sendusername") = Email_From
    .Item(schema & "sendpassword") = Password
    .Item(schema & "smtpserverport") = 465
    .Item(schema & "smtpusessl") = True
    .Item(schema & "smtpconnectiontimeout") = 60
    .Update
End With
CDO.Send

把系统时间改成12月3日,用上面的代码发送邮件(理论上用邮件客户端也行,但是我没有测试),在163邮箱显示的发送时间是12月3日哦。幸好老师的邮箱是163的~