“程序设计”目录存档

TLI.TLIApplication,被遗忘的COM组件

2010年12月5日,星期日

TLI.TLIApplication是一个能获取COM组件Type Library Information(类型库信息)的COM组件。曾经一直很好奇VbsEdit的代码自动补全是怎么实现的,现在看来,大约的确用的就是这个COM。

比如我想知道scrrun.dll(提供fso对象的dll)这个COM组件提供了哪些接口,可以用下面的代码:

'By Demon
'https://demon.tw
Set tli = CreateObject("TLI.TLIApplication")
Set Info = tli.TypeLibInfoFromFile("scrrun.dll")
For Each Interface In Info.Interfaces
    WScript.Echo Interface.Name 
Next

或者我忘记了fso对象有哪些属性和方法,而又没有参考文档,可以用下面的代码:

'By Demon
'https://demon.tw
Dim fso
Set fso = CreateObject("scripting.filesystemobject")
Set tli = CreateObject("TLI.TLIApplication")
Set Info = tli.ClassInfoFromObject(fso)
For Each Member In Info.DefaultInterface.Members
    WScript.Echo Member.Name 
Next

时间和篇幅有限,举的例子比较简单,更详细的请查阅文档(参考链接2为下载地址)。

参考链接:

  1. RunTime COM Object Inspection
  2. FILE: Tlbinf32.exe : Help Files for Tlbinf32.dll
  3. Visual Basic: Inspect COM Components Using the TypeLib Information Object Library

用VBS创建环境变量

2010年12月3日,星期五

今天和一个高手讨论了一下WMI里WQL查询的时间问题,无果。Google时无意中搜到这段代码,mark一下。

strComputer = "."
Set objWMIService = GetObject _
("winmgmts:\\" & strComputer & "\root\cimv2")
Set objVariable = objWMIService._
Get("Win32_Environment").SpawnInstance_
objVariable.Name = "TestValue"
objVariable.UserName = "System"
objVariable.VariableValue = "This is a test"
objVariable.Put_

参考链接:如何使用脚本创建环境变量?

各浏览器禁止内容选中的方式

2010年12月2日,星期四

今天在Linkanyway博客看到《Javascript之禁止右键禁止选取》,高手都喜欢装菜鸟。

禁用右键确实没什么难度,虽然oncontextmenu事件是HTML5里面的,但是现在主流的浏览器都支持。

<script type="text/javascript">
document.oncontextmenu = function(e) {
    return false;
}
</script>

禁止内容选中相对就比较复杂了,标准中没有定义,各浏览器对禁止内容选中,各有各自的办法:

  • Firefox Chrome Safari都有私有CSS样式控制
  • IE通过标签属性和标签方法控制
  • Opera通过标签属性控制

至于具体代码,请查看参考链接。

参考链接:BX2050: 各浏览器禁止内容选中的方式不同

注意PHP的下一个千年虫:Y2K38

2010年12月1日,星期三

我不想危言耸听,先在你的环境下试试如下代码的运行结果吧:

<?php
$date = '2040-02-01';
$format = 'l d F Y H:i';
$mydate1 = strtotime($date);
echo '<p>', date($format, $mydate1), '</p>';
?> 

如果一切正常的话,你会看到如下输出"Wednesday 1 February 2040 00:00″。如果你看到了一个60年代到70年代之间的日期,那说明你的PHP应用存在一个叫Y2K38的安全漏洞!

(更多…)

C语言中的字符串常量

2010年11月30日,星期二

说起字符串常量,学过C语言的人都不陌生。字符串常量的书写方式是一对双引号包围一串字符,如:

"Hello, world"

当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所储存的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符的指针”,后者指向这些字符所储存的地址,如:

char *str = "Hello, world";

但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。简单的说,字符串常量的值是这些字符在内存中的地址。

现在考虑下面一段代码:

if("Demon")
    printf("true");
else
    printf("false");

你认为会输出什么,true or false?