2010年08月 存档

VC编写在Windows 7下需要管理员权限的程序

2010年08月26日,星期四

和实现XP风格一样,也是通过manifest文件,下面的manifest包括了XP风格的选项

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
          manifestVersion="1.0"> 
<dependency> 
    <dependentAssembly> 
        <assemblyIdentity 
            type="win32" 
            name="Microsoft.Windows.Common-Controls" 
            version="6.0.0.0" 
            processorArchitecture="X86" 
            publicKeyToken="6595b64144ccf1df" 
            language="*" 
        /> 
    </dependentAssembly> 
</dependency> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel 
                level="requireAdministrator" 
                uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
</assembly>

保存为uac.manifest,导入到资源文件中,资源类型为24,ID为1(必须为1),重新编译即可。

参考链接:Vista UAC: The Definitive Guide

VC实现XP风格控件效果

2010年08月25日,星期三

要在VC6、VC2003、VC2005、VC2008程序中使用XP风格首先要创建一个manifest文件,将下面代码保存为xpstyle.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" 
          manifestVersion="1.0"> 
<dependency> 
    <dependentAssembly> 
        <assemblyIdentity 
            type="win32" 
            name="Microsoft.Windows.Common-Controls" 
            version="6.0.0.0" 
            processorArchitecture="X86" 
            publicKeyToken="6595b64144ccf1df" 
            language="*" 
        /> 
    </dependentAssembly> 
</dependency> 
</assembly>

完成以后导入到资源文件中,资源类型为24,ID为1(必须为1),重新编译即可。

参考链接:Using Windows XP Styles in your MFC/WIN32 Applications

VBS调用CAPICOM对象实现SHA1&MD5加密

2010年08月23日,星期一

MD5算法的VBS代码在网上可以找到很多,这些代码都是按照“算法”写出来的,所以都很长,更重要的是,找不到SHA1算法的VBS实现。本来打算自己写的,但是看到复杂的算法描述就知难而退了。算了吧,有现成的COM对象调用,又何必去关心算法呢,直接拿来使用就行了。如果下面的例子代码提示无法创建对象,需要下载CAPICOM组件并注册。

Const CAPICOM_HASH_ALGORITHM_MD2 = 1
Const CAPICOM_HASH_ALGORITHM_MD4 = 2
Const CAPICOM_HASH_ALGORITHM_MD5 = 3
Const CAPICOM_HASH_ALGORITHM_SHA1 = 0
Const CAPICOM_HASH_ALGORITHM_SHA_256 = 4
Const CAPICOM_HASH_ALGORITHM_SHA_384 = 5
Const CAPICOM_HASH_ALGORITHM_SHA_512 = 6

'Author: Demon
'Website: http://demon.tw

Dim HashedData
Set HashedData = CreateObject("CAPICOM.HashedData")
HashedData.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
HashedData.Hash "Demon"
WScript.Echo HashedData.Value

需要指出的是VBS的字符串是Unicode编码的,例如上面的字符串"Demon"在内存中的十六进制是4400 6500 6D00 6F00 6E00,这些Hash算法只关心数据的二进制值,不同编码的同一字符串的二进制值是不一样的,这就是算出来的值和PHP中(PHP默认的编码是UTF-8)的sha1("Demon")的值不一样的原因。更多CAPICOM的用法请自行查阅MSDN参考文档

VBS中的左移位&右移位运算

2010年08月22日,星期日

之前用VBS写UTF-16编码转UTF-8编码的时候要用到移位运算,但是VBS中没有移位运算符,就用简单的乘除运算实现了移位运算函数。而移位运算并不仅仅是简单的乘除而已,这样写可能会有未知的错误。现在知道了MSScriptControl.ScriptControl对象,实现左移位、右移位是如此的简单。

Function LShift(Value, Shift)
	Set sc = CreateObject("MSScriptControl.ScriptControl")
	sc.Language = "JScript"
	LShift = sc.Eval(Value & "<<" & Shift)
End Function

Function RShift(Value, Shift)
	Set sc = CreateObject("MSScriptControl.ScriptControl")
	sc.Language = "JScript"
	RShift = sc.Eval(Value & ">>" & Shift)
End Function

在VBS中执行Javascript语句

2010年08月21日,星期六

一直想写一个VBS版的六维空间作弊程序,无奈没有找到现成的VBS版Sha1函数,也许是VBS没有位操作符的缘故吧。而JavaScript版的早已实现,然后就想能不能在VBS中执行JavaScript代码,这样就可以变相实现了,当时知道的方法是WSC文件,但是我不喜欢额外的文件,只好作罢。最近偶然发现一个MSScriptControl.ScriptControl对象,可以实现这个功能,简单的示例如下,更高级的用法自己查阅帮助文档。

Dim sc
Set sc = CreateObject("MSScriptControl.ScriptControl")
sc.Language = "JScript"
result = sc.Eval("encodeURIComponent('恶魔');")
WScript.Echo result