关于作者

姓名:

性别:其他

出生日期:--

地区:

联系电话:

QQ:--

婚否:保密
用户名:smilecn
笔名:yoco
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:14
评论个数:22
留言条数:8




Powered by BlogDriver 2.1

smilecn的博客

 

欢迎访问smilecn的博客

文章

DELPHI中MessageBox的用法

MessageBox对话框 输入控件的  ImeName属性把输入法去掉就默认为英文输入了
 

 MessageBox对话框是比较常用的一个信息对话框,其不仅能够定义显示的信息内容、信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对话框信息提示图标,而且可以定义按钮组合及对话框的标题,是一个功能齐全的信息对框。
 1、函数原型及参数
 function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer;
 hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
 Text:欲显示的信息字符串。
 Caption:对话框标题字符串。
 Type:对话框类型常量。
 该函数的返回值为整数,用于对话框按钮的识别。
 2、类型常量
 对话框的类型常量可由按钮组合、缺省按钮、显示图标、运行模式四种常量组合而成。
 (1)按钮组合常量
 MB_OK = $00000000;         //一个确定按钮
 MB_OKCANCEL = $00000001;      //一个确定按钮,一个取消按钮
 MB_ABORTRETRYIGNORE = $00000002;  //一个异常终止按钮,一个重试按钮,一个忽略按钮
 MB_YESNOCANCEL = $00000003;     //一个是按钮,一个否按钮,一个取消按钮
 MB_YESNO = $00000004;        //一个是按钮,一个否按钮
 MB_RETRYCANCEL = $00000005;     //一个重试按钮,一个取消按钮
 (2)缺省按钮常量
 MB_DEFBUTTON1 = $00000000;     //第一个按钮为缺省按钮
 MB_DEFBUTTON2 = $00000100;     //第二个按钮为缺省按钮
 MB_DEFBUTTON3 = $00000200;     //第三个按钮为缺省按钮
 MB_DEFBUTTON4 = $00000300;     //第四个按钮为缺省按钮
 (3)图标常量
 MB_ICONHAND = $00000010;        //“×”号图标
 MB_ICONQUESTION = $00000020;      //“?”号图标
 MB_ICONEXCLAMATION = $00000030;    //“!”号图标
 MB_ICONASTERISK = $00000040;      //“i”图标
 MB_USERICON = $00000080;        //用户图标
 MB_ICONWARNING = MB_ICONEXCLAMATION;  //“!”号图标
 MB_IConERROR = MB_ICONHAND;      //“×”号图标
 MB_ICONINFORMATION = MB_ICONASTERISK; //“i”图标
 MB_ICONSTOP = MB_ICONHAND;       //“×”号图标
 (4)运行模式常量
 MB_APPLMODAL = $00000000;    //应用程序模式,在未结束对话框前也能切换到另一应用程序
 MB_SYSTEMMODAL = $00001000;   //系统模式,必须结束对话框后,才能做其他操作
 MB_TASKMODAL = $00002000;    //任务模式,在未结束对话框前也能切换到另一应用程序
 MB_HELP = $00004000;       //Help Button
 3、函数返回值
 0            //对话框建立失败
 idOk = 1        //按确定按钮
 idCancel = 2      //按取消按钮
 idAbout = 3       //按异常终止按钮
 idRetry = 4       //按重试按钮
 idIgnore = 5      //按忽略按钮
 idYes = 6        //按是按钮
 idNo = 7        //按否按钮

- 作者: yoco 2007年12月15日, 星期六 22:34  回复(0) |  引用(0) 加入博采

QQ堂机械绝招
长龙=(面对着敌人)按住空格键+左+右
凤舞=左下或右下
长龙最好发的方法:按住空格狂按左右键(一起按)直到按暴位置
QQ堂机械绝招:
凤舞 空格 + 下 + 左 + 下 + 左 + 放开空格 一个侧抛的特效,抛出一列糖泡。
长龙 空格 + 右 + 左 + 放开空格 抛出一横线糖泡。
天牢 空格 + 左 + 下 + 右 + 放开空格 身体旋风特效,抛出成梅花形状的 4 格包围糖泡。
暴踢 空格 + 右 + 右 + 放开空格 身体前冲,将前面的炸弹踢回去。
闪避 空格 + 左 + 左 + 放开空格 闪避后退,在闪避的过程中为无敌状态。
希望这些经验能够帮助大家!!现在收集如下[QQ堂]玩QQ堂的决窍!!
抢包子是大家爱玩的一个项目,包子的图三、六、八是大家经常玩。因此,在和高手玩的时候,不要选择这些图,挑一些不经常玩了图。如图五、七、十。这些图容易守,对方不好抢包子。还有一个,就是在玩的中途切记不可随便退出,要不然,再厉害的高手也顶不住一群菜鸟的堵劫。还有,就是道具不要一个人全部吃完,如一双快速鞋就足够,一个刺猬球,或者,一瓶花瓶药水就可以了,其余的给别人。切记,自己人不要都集在一起,要前后分开,不容易一窝被炸光,要不然那你就只有看天了。^_^
英雄传说其实很容易,一个人炸开,找到了石头就采取接力的方式向家里运,不要一个人自己运,要不然时间太长,会给对方机会。
机械世界就是要吃药水,这样你的泡的威力就大,可以覆盖对方的整个屏幕,让他们无处藏身。还有放的方法,什么长龙等等,我想大家都知道,就是熟练的程度不同,就是要多练就行了。自己人一人一个位置放泡,不要挤在一起。这样胜利离你就不会太远了。
其他的就是一吃到变身的道具,如:小鸡、斧头帮、水滴等等,你就立刻冲到对方身边,堵死对方,采取同归于尽的方法,逼死对方,因为你自己有两条命。哈,够阴险的吧……
还有一个就是大家不要怕被炸死,特别是包子和英雄,一定要怀着不怕死的共产党员精神,往前冲,冲的对方会乱的阵脚,嘿嘿,我们的机会就来了。
1抢包子
在抢包子中,常常会看到一些道具(慢慢胶,叉子,香蕉皮),很多人认为没用就先用了.但是,在重要是后这些东西可是非常重要的.在运包子的时候,有香蕉就用它滑到尽头,运回包子笼.在没有人掩护的情况下,慢慢胶可就成了大功臣.别人追你时,你在路上放一个慢慢胶,聪明的就先炸掉,笨的就吃掉了,和你走的一样慢,过一会再放一个,直到运回笼子.再趁机干掉他.(有香蕉皮的先用香蕉 2英雄传说
在英雄中,要靠的是团队合作.一开始,总会炸出些道具,在那些直线的路上,香蕉皮就能帮大忙,和刚才抢包子的方法差不多.不过敌人的基座是最不容易防备的地方,在里面放激光障碍柱,敌人一进去就被果冻包住,再进去杀掉他.聪明的就能看出在基座中有没有激光障碍柱,会先让别人进去,是敌人就杀,是同伴就救.在基座中放慢慢胶也是很有用的,别人吃上慢慢胶,趁机把他干掉.
2夺宝
在这个地图中,它主要是抢宝石,但抢宝石的速度必须快,所以人物也很重要,建议使用海王子,火影,小悟空等跑的比较快的人.如果炸出来的东西有一个威力和一只鞋,要先吃鞋,后吃其他的.在有钻的洞的地图上,把陷阱放到里面去最容易陷害别人,再趁机干掉他们.
3踢炸弹
在这上面,主要也是速度,我就不多说了.还有就是要会躲,要躲的巧妙.而且慢慢胶是最有用的陷害工具,把吃到的慢慢胶放到上面,慢慢胶被炸后会从飞机上落下来,所以飞机上落下来的慢慢胶是不能吃的.
4比武
这个地图非常窄小,要选炮弹多和跑的快的,我建议海王子,玛利亚(在吃到速度,炮弹,威力极限的情况下)和三个隐藏人物,变成任何东西之后(不能是螃蟹)地图中间的上面放8个炮弹,轰一声,只有你自己活着,别人都被炸进果冻,你就尽情体验杀人的快感吧!
5普通地图
这些就好说了,利用上面的一些道理,运用到普通地图中就OK.
在游戏中,如果人多,就要舍身把自己和敌人一同炸起来,等同伴来救.这招对任何地图都有效.

- 作者: yoco 2007年10月11日, 星期四 17:39  回复(0) |  引用(0) 加入博采

十招保护Linux系统安全
Linux是一种类Unix的操作系统。从理论上讲,Unix本身的设计并没有什么重大的安全缺陷。但是因为它不属于某一家厂商,没有厂商宣称对它提供安全保证,因此用户只有自己解决安全问题。
  Linux不论在功能上、价格上或性能上都有很多优点,然而,作为开放式操作系统,它不可避免地存在一些安全隐患。关于如何解决这些隐患,为应用提供一个安全的操作平台,本文会告诉你一些最基本、最常用,同时也是最有效的招数。

  一般来说,对Linux系统的安全设定包括取消不必要的服务、限制远程存取、隐藏重要资料、修补安全漏洞、采用安全工具以及经常性的安全检查等。本文教你十种提高Linux系统安全性的招数。虽然招数不大,但招招奏效,你不妨一试。

  第1招:取消不必要的服务

  早期的Unix版本中,每一个不同的网络服务都有一个服务程序在后台运行,后来的版本用统一的/etc/inetd服务器程序担此重任。Inetd是Internetdaemon的缩写,它同时监视多个网络端口,一旦接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。

  由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetd.conf文件中设定。所以取消不必要服务的第一步就是检查/etc/inetd.conf文件,在不要的服务前加上“#”号。

  一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。

  还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。

  Inetd除了利用/etc/inetd.conf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的端口。因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。

  在Linux中有两种不同的服务型态:一种是仅在有需要时才执行的服务,如finger服务; 另一种是一直在执行的永不停顿的服务。这类服务在系统启动时就开始执行,因此不能靠修改inetd来停止其服务,而只能从修改/etc/rc.d/rc[n].d/文件或用Runleveleditor去修改它。提供文件服务的NFS服务器和提供NNTP新闻服务的news都属于这类服务,如果没有必要,最好取消这些服务。

  第2招:限制系统的出入

  在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过系统验证之后,用户才能进入系统。

  与其他Unix操作系统一样,Linux一般将密码加密之后,存放在/etc/passwd文件中。Linux系统上的所有用户都可以读到/etc/passwd文件,虽然文件中保存的密码已经经过加密,但仍然不太安全。因为一般的用户可以利用现成的密码破译工具,以穷举法猜测出密码。比较安全的方法是设定影子文件/etc/shadow,只允许有特殊权限的用户阅读该文件。

  在Linux系统中,如果要采用影子文件,必须将所有的公用程序重新编译,才能支持影子文件。这种方法比较麻烦,比较简便的方法是采用插入式验证模块(PAM)。很多Linux系统都带有Linux的工具程序PAM,它是一种身份验证机制,可以用来动态地改变身份验证的方法和要求,而不要求重新编译其他公用程序。这是因为PAM采用封闭包的方式,将所有与身份验证有关的逻辑全部隐藏在模块内,因此它是采用影子档案的最佳帮手。

  此外,PAM还有很多安全功能:它可以将传统的DES加密方法改写为其他功能更强的加密方法,以确保用户密码不会轻易地遭人破译; 它可以设定每个用户使用电脑资源的上限; 它甚至可以设定用户的上机时间和地点。

  Linux系统管理人员只需花费几小时去安装和设定PAM,就能大大提高Linux系统的安全性,把很多攻击阻挡在系统之外。

  第3招:保持最新的系统核心

  由于Linux流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经常更新系统内核。

  Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功能。由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。

  早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有2.0.x以上的版本才比较稳定和安全,新版本的运行效率也有很大改观。在设定Kernel的功能时,只选择必要的功能,千万不要所有功能照单全收,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。

  在Internet上常常有最新的安全修补程序,Linux系统管理员应该消息灵通,经常光顾安全新闻组,查阅新的修补程序。

第4招:检查登录密码

  设定登录密码是一项非常重要的安全措施,如果用户的密码设定不合适,就很容易被破译,尤其是拥有超级用户使用权限的用户,如果没有良好的密码,将给系统造成很大的安全漏洞。

  在多用户系统中,如果强迫每个用户选择不易猜出的密码,将大大提高系统的安全性。但如果passwd程序无法强迫每个上机用户使用恰当的密码,要确保密码的安全度,就只能依靠密码破解程序了。

  实际上,密码破解程序是黑客工具箱中的一种工具,它将常用的密码或者是英文字典中所有可能用来作密码的字都用程序加密成密码字,然后将其与Linux系统的/etc/passwd密码文件或/etc/shadow影子文件相比较,如果发现有吻合的密码,就可以求得明码了。

  在网络上可以找到很密码破解程序,比较有名的程序是crack。用户可以自己先执行密码破解程序,找出容易被黑客破解的密码,先行改正总比被黑客破解要有利。

  第5招:设定用户账号的安全等级

  除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。

  在Linux系统上的tcpd中,可以设定允许上机和不允许上机人员的名单。其中,允许上机人员名单在/etc/hosts.allow中设置,不允许上机人员名单在/etc/hosts.deny中设置。设置完成之后,需要重新启动inetd程序才会生效。此外,Linux将自动把允许进入或不允许进入的结果记录到/rar/log/secure文件中,系统管理员可以据此查出可疑的进入记录。

  每个账号ID应该有专人负责。在企业中,如果负责某个ID的职员离职,管理员应立即从系统中删除该账号。很多入侵事件都是借用了那些很久不用的账号。

  在用户账号之中,黑客最喜欢具有root权限的账号,这种超级用户有权修改或删除各种系统设置,可以在系统中畅行无阻。因此,在给任何账号赋予root权限之前,都必须仔细考虑。

  Linux系统中的/etc/securetty文件包含了一组能够以root账号登录的终端机名称。例如,在RedHatLinux系统中,该文件的初始值仅允许本地虚拟控制台(rtys)以root权限登录,而不允许远程用户以root权限登录。最好不要修改该文件,如果一定要从远程登录为root权限,最好是先以普通账号登录,然后利用su命令升级为超级用户。

  第6招:消除黑客犯罪的温床

  在Unix系统中,有一系列r字头的公用程序,它们是黑客用以入侵的武器,非常危险,因此绝对不要将root账号开放给这些公用程序。由于这些公用程序都是用.rhosts文件或者hosts.equiv文件核准进入的,因此一定要确保root账号不包括在这些文件之内。

  由于r字头指令是黑客们的温床,因此很多安全工具都是针对这一安全漏洞而设计的。例如,PAM工具就可以用来将r字头公用程序的功力废掉,它在/etc/pam.d/rlogin文件中加上登录必须先核准的指令,使整个系统的用户都不能使用自己home目录下的.rhosts文件。

  第7招:增强安全防护工具

  SSH是安全套接层的简称,它是可以安全地用来取代rlogin、rsh和rcp等公用程序的一套程序组。SSH采用公开密钥技术对网络上两台主机之间的通信信息加密,并且用其密钥充当身份验证的工具。

  由于SSH将网络上的信息加密,因此它可以用来安全地登录到远程主机上,并且在两台主机之间安全地传送信息。实际上,SSH不仅可以保障Linux主机之间的安全通信,Windows用户也可以通过SSH安全地连接到Linux服务器上。

第8招:限制超级用户的权力

  我们在前面提到,root是Linux保护的重点,由于它权力无限,因此最好不要轻易将超级用户授权出去。但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户的权限。Sudo就是这样的工具。

  Sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。例如,应用sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。

  Sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。在大型企业中,有时候有许多人同时管理Linux系统的各个不同部分,每个管理人员都有用sudo授权给某些用户超级用户权限的能力,从sudo的日志中,可以追踪到谁做了什么以及改动了系统的哪些部分。

  值得注意的是,sudo并不能限制所有的用户行为,尤其是当某些简单的指令没有设置限定时,就有可能被黑客滥用。例如,一般用来显示文件内容的/etc/cat指令,如果有了超级用户的权限,黑客就可以用它修改或删除一些重要的文件。

  第9招:追踪黑客的踪迹

  当你仔细设定了各种与Linux相关的组态,并且安装了必要的安全防护工具之后,Linux操作系统的安全性的确大为提高,但是却并不能保证防止那些艺高人胆大的网络黑客的入侵。

  在平时,网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。例如:

  ·正常用户在半夜三更登录;

  ·不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;

  ·用户从陌生的网址进入系统;

  ·因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模式的试错法;

  ·非法使用或不正当使用超级用户权限su的指令;

  ·重新开机或重新启动各项服务的记录。

  第10招:共同防御,确保安全

  从计算机安全的角度看,世界上没有绝对密不透风、百分之百安全的计算机系统,Linux系统也不例外。采用以上的安全守则,虽然可以使Linux系统的安全性大大提高,使顺手牵羊型的黑客和电脑玩家不能轻易闯入,但却不一定能阻挡那些身怀绝技的武林高手,因此,企业用户还需要借助防火墙等其他安全工具,共同防御黑客入侵,才能确保系统万无一失。

- 作者: yoco 2007年09月5日, 星期三 21:50  回复(0) |  引用(0) 加入博采

嘿!奔奔!

小时候看的动画片《嘿!奔奔》

一直不能忘记,今天在网上看到了《奔奔》的歌词,贴过来,一起回忆一下幼年看的动画片:)

《嘿!奔奔》

剧集总数:130集    每集只有10分钟

一个从蛋里出来的小汽车,会说话,会肚子饿,会吃饭,闻了花香就特别有劲儿。

奔奔遇到了一个小男孩,好像叫做阿健吧,还有一条小狗,他们一起结伴去找奔奔的妈妈。

但是,大鼻头的坏博士总是想抓住奔奔去进行研究,于是,奔奔他们就在找妈妈的路上,一边跟坏博士斗智斗勇,一边助人为乐。

当然,奔奔和阿健这对好伙伴也产生过矛盾,但是他们最终都是理解彼此,互相谅解,友情也越来越深了。

这部动画片,除了卡通造型可爱,而且还富有教育意义,实在是不可多得的一部好片子。在我看来,比《圣斗士》一类的更有益于少年儿童的成长吧。

还有主题曲:P

奔…奔,奔奔奔奔奔奔奔奔奔,我名叫奔奔,奔奔。
圆圆的轮子,凹凸的山路也不怕,我也不怕,凹凸的山路也不怕。
我要到哪就到哪,就到哪。
奔…奔,奔奔奔奔奔奔奔奔奔,我会跑又会游泳又会飞翔,一张大嘴巴还会说话。
奔…奔,奔奔奔奔奔奔奔奔奔,我会跑又会游泳又会飞翔,踏遍天涯海角找妈妈。

片尾曲:P

晴空万里晴空万里微风荡漾
朵朵白云朵朵白云阳光灿烂
只要我跃上你的你的背梁
这就是啊四海
来吧快出发

奔奔奔奔奔奔奔
管它是天涯海角
奔奔奔奔奔奔奔
管它是天涯海角
天涯海角

没有道路问问小鸟就知道
踏遍五洲也要找到梦中的乐园

- 作者: yoco 2007年06月11日, 星期一 11:24  回复(17) |  引用(0) 加入博采

交叉编译场景分析(arm-linux)(一)--基本知识

转载时请注明出处:http://blog.csdn.net/absurd

 


1.基本知识

在linux下,绝大部分的软件包都是用autoconf配置的。除此之外,比较有名的就是X11的imake配置方式,imake实际上有点过时了,用起来很不方便,所以xfree86已经计划向autoconf移植了。还有极少的直接使用Makefile编译,通过环境变量或者不同的Makefile配置,当然这只适用于简单的软件包。

Autoconf是一个非常有用的配置工具,原理有点复杂,全面了解它要花不少时间,但使用很方便。这里简单介绍一下autoconf交叉编译的基本知识。

下载软件包无非两种方式,一种是直接从cvs里取最新版本,另一种是取发布的稳定版本。除非你想测试最新版本,否则后者是比较安全的方式。但有的软件包不提供发布的版本,这时就只能退而求其次了-使用cvs版本了。

编译cvs版本有一点不同,cvs版本通常不带configure脚本的,自己要重新产生configure脚本。当然这并不困难,多数开发人员都会在自己的软件包里,放上一个autogen.sh或者bootstartup之类的脚本。利用这个脚本可以自动产生configure脚本。下面是一个autogen.sh脚本示例,若软件包里没有提供这样的文件,可以仿照写一个:

#!/bin/sh
# $Id: autogen.sh,v 1.3 2005/02/26 01:47:22 kergoth Exp $
autoreconf -f -i -I `pwd`/m4
exit $?
echo -n "Libtoolize..."
libtoolize --force --copy
echo "Done."
echo -n "Aclocal..."
aclocal
echo "Done."
echo -n "Autoheader..."
autoheader
echo "Done."
echo -n "Automake..."
automake --add-missing --copy
echo "Done."
echo -n "Autoconf..."
autoconf
echo "Done."
#./configure $*
echo "Now you can do ./configure, make, make install."

 


正式发布的软件包里,已经有做好的configure脚本了。接下来我们要做的就是利用configure进行配置。对于交叉编译来说,最重要的配置选项有以下几个:

--host:指定目标机的平台类型。一般格式为CPU类型-操作系统名称。比如,目标机的CPU为arm,操作系统为linux,可以这样写--host=arm-linux。

--prefix:这是安装路径的前缀,即编译结果放置的位置。默认值是/usr或者/usr/local,交叉编译时不能使用默认值,否则它会覆盖你本机的文件,所以要指定一个路径。比如,可以指定为--prefix=/work/cross/rootfs/usr。

配置完成后,运行make编译,运行make install安装。
(pkg-config也是一个非常重要的工具,关于pkg-config的使用,可以参考笔者另外一篇文章,这里不再多说。)


2. 文档惯例及隐含前提:

交叉编译器名称:arm-linux-gcc
交叉编译器版本:3.4.3
目标操作系统版本:2.6.9
默认依赖关系:依赖glibc


隐含环境变量:

WORK_DIR:工作目录,设置为/work/cross
ROOTFS_DIR:编译结果根目录,设置为$WORK_DIR/rootfs
ARCH:目标平台的体系架构,设置为arm
建立一个脚本用于设置变量和建立必要的目录,在编译前,先运行. corss.env。 其内容如下:


cross.env
export WORK_DIR=/work/cross
export ROOTFS_DIR=$WORK_DIR/rootfs
export ARCH=arm
export PKG_CONFIG_PATH=$ROOTFS_DIR/usr/local/lib/pkgconfig:$ROOTFS_DIR/usr/lib/pkgconfig:$ROOTFS_DIR/usr/X11R6/lib/pkgconfig
if [ ! -e "$ROOTFS_DIR/usr/local/include" ]; then mkdir -p $ROOTFS_DIR/usr/local/include;fi;
if [ ! -e "$ROOTFS_DIR/usr/local/lib" ]; then mkdir -p $ROOTFS_DIR/usr/local/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/etc" ]; then mkdir -p $ROOTFS_DIR/usr/local/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/bin" ]; then mkdir -p $ROOTFS_DIR/usr/local/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/share" ]; then mkdir -p $ROOTFS_DIR/usr/local/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/local/man" ]; then mkdir -p $ROOTFS_DIR/usr/local/man; fi;
if [ ! -e "$ROOTFS_DIR/usr/include" ]; then mkdir -p $ROOTFS_DIR/usr/include; fi;
if [ ! -e "$ROOTFS_DIR/usr/lib" ]; then mkdir -p $ROOTFS_DIR/usr/lib; fi;
if [ ! -e "$ROOTFS_DIR/usr/etc" ]; then mkdir -p $ROOTFS_DIR/usr/etc; fi;
if [ ! -e "$ROOTFS_DIR/usr/bin" ]; then mkdir -p $ROOTFS_DIR/usr/bin; fi;
if [ ! -e "$ROOTFS_DIR/usr/share" ]; then mkdir -p $ROOTFS_DIR/usr/share; fi;
if [ ! -e "$ROOTFS_DIR/usr/man" ]; then mkdir -p $ROOTFS_DIR/usr/man; fi;
颜色字体含义

红颜色字体 表示错误信息。
蓝颜色字体 表示命令行脚本。
黄颜色字体 表示文件内容。

文档格局:


1. 基本信息:
软件名称

功能简述
 
下载地址
 
软件版本
 
依赖关系
 
前置条件

 

2.过程分析

构建过程中遇到的问题分析。

3.构建处方

通常是一个可用的Makefile,用它可以编译这个模块。或者一些patch文件。


 

- 作者: yoco 2007年02月27日, 星期二 16:53  回复(0) |  引用(0) 加入博采

Bash readline 使用技巧

很多人会用 Bash,但是很少有人知道 readline 是怎么回事。readline 是一个强大的库,只要使用了它的程序,都可以用同一个配置文件配置,而且用同样的方法操作命令行,让你可以方便的编辑命令行。 Readline 软件包是一个提供命令行编辑和历史纪录功能的库集合。

使用 readline 的程序现在主要有 Bash, GDB,ftp 等。readline 付予这些程序强大的 Emacs 似的命令行编辑方式,你可以随意绑定你的键盘。

术语解释

在下文中,我们经常提到 "C-x r" 这类键操作。"C-x r" 其实就是按Ctrl-x,然后按 r。同理 "C-M-@" 就是按 ctrl-alt-@(M表示meta, 在 PC 上就是 Alt 键),但是其实 @ 是shift-2 (看看你的键盘)。所以 "C-M-@" 实际上要你按 ctrl-alt-shift-2。

但是在配置文件里的键序列中,我们把 "C-x r" 表示为 "\C-xr", 把 "C-M-@" 表示为 "\C-\M-@",你自己看看就知道怎么回事了。同理 "Esc a" 别表示成 "\ea"。

这就是 Emacs 里的按键的通常标记方法。EMACS = Esc Meta Alt Ctrl Shift :)

技巧篇

在自己配置命令行之前,我们先来看看利用缺省的键绑定能够进行的一些巧妙的用法:

第一招:使用以前的命令行参数

你是否经常出现这种情况?你想把 ~/text-browser/ 目录下的3个.tar.gz文件搬到/sr3/software/,于是你输入:

$mv ~/text-browser/*.tar.gz /usr3/software/

我想你一定已经知道,打入 ~/text 之后按 TAB 就可以补全text-browser这个长文件名吧?这是Bash 的基本功能。我废话?好了,就当你知道吧。不过今天我要讲的东西比这个复杂一些。

Go on! 刚刚输入到这里,你突然想起,应该在 /usr3/software/ 下先建立一个目录叫browsers,这样放进去的文件比较好管理。

于是你 Ctrl-u,删掉了这行命令。唉呀,这么长的命令一下就没了。是不是有点可惜?这还不算麻烦。然后你

mkdir /usr3/software/browser
mv ~/text-browser/*.tar.gz /usr3/software/browser
嗯。TAB 是帮了你不少忙。可是你实际上有更好的办法来完成这项工作。好吧,看看 readline 怎样神奇的完成你的任务:

我们回到这种情况:

$mv ~/text-browser/*.tar.gz /usr3/software/
你刚才是按了 Ctrl-u 删除了所有输入的东西。可惜啊!你要是按 M-#(也就是按住 PC 机的 Alt 键,再按 #,实际上就是 Alt-Shift-3),那么 Bash 就会在这样最开头插入一个 "#",然后输入这行。这样命令就被作为一行注释载入了历史。

这有什么好处?这样你的这行命令里的内容就可以被再次利用。看着:你接着输入:

mkdir ...
等等,你是不是想输入 /usr3/software/?你不用再敲一遍了!直接按 M-.(Alt 加句号),看看, /usr3/software/ 是不是出现在命令行上了?M-. 就是调用了 yank-last-arg 函数,把上一条命令的最后一个参数放在命令行上。好了,回车吧!

你接着输入:

mv ...
等等,这下是该输入 ~/text-browser/*.tar.gz 了。烦不烦啊?换一种方式吧。请按:"M-1 M-."(把上一条命令的第一个参数放在命令行上)。这样命令行成为了:
mv /usr3/software/browser
怎么成这样了?看看你的“上一条命令”是什么吧?是……你自己看。所以这个参数不是你想要的。那么继续再按一次 "M-."。看到了吧?你的命令行已经成为:
mv ~/text-browser/*.tar.gz
好。打一个空格。再按一下 "M-."。命令行变成了:
mv ~/text-browser/*.tar.gz /usr3/software/browser
这就是你想要的!

是不是看起来你还是花了不少工夫?但是想一想,如果你是要执行这样一个命令呢?

mv /data/ftp/pub/TUG/texmf/tex/latex/CJK/GB/GB.cap \
 /usr/local/texlive/texmf-local/tex/latex/CJK/GB/
嗯。记住这个有用命令:M-. , 它的前面可以用 M-0, ... 作为数字参数。

第二招:补全命令名,文件名和变量名

你知道 TAB 可以补全命令行上很多东西。可是你遇到这种情况的时候怎么办?

man a-very-very-long-command-name
你输入了 man a-ver... 之后,按 TAB,什么反应也没有。因为 TAB 执行的是 “按情况补全”(complete),它看到 man,知道这应该是一个命令,那么它认为: “后面应该是一个文件名参数。” 但是你想要的是命令的名字怎么办?答案:按 "M-!".

再来看:你需要设置 XMODIFIERS="@im=fcitx"。你输入了

export XM...
按 TAB? 没有反应。为什么呢?因为 TAB 的补全想要一个文件名,而当前目录没有开头是 "XM..." 的文件。那么你怎么补全?答案:"M-$"。

其实 readline 的补全方式被 Bash 扩充了很多。看看有多少吧!

"TAB": complete
"\M-!": complete-command
"\M-/": complete-filename
"\M-@": complete-hostname
"\M-~": complete-username
"\M-$": complete-variable
自己试试吧!

第三招:扩展命令行

你的一个目录里有很多类似的文件,名字叫 T12.txt, T12.log, T23.txt, T23.log, T13.txt, T13.log…… 有后缀 txt 的,也有后缀 log 的。... 你想把其中的某些 T*.txt 都移动到另外一个目录,而T*.log都不动。但是T*.txt 也不是全部都要移动。所以你想把T*.txt 都放在命令行上,然后选择其中一些。你输入:

mv T...
接着按 "M-*"(insert-completions)。结果 T 开头的文件都被放到命令行上了。嗯。这在某些时候是有用的,可是现在它把 T*.log 的文件也放上去了。不行。我们于是继续输入:
mv T*.txt 
好了,现在我们可以使用 "C-x*"(先按ctrl-x,然后按*)。结果所有名字T*.txt 的文件都被放到了命令行上面。"C-x*" 执行的函数叫做 glob-expand-word.

配置篇

你是不是觉得那些命令很难记住?不顺手?别怕!它们都是可以改变的,就像Emacs的键绑定那样,可以被任意的改变!

所有使用readline的程序,都使用一个配置文件来决定它的行为和键绑定。这个文件一般是 INPUTRC 环境变量确定的。如果这个环境变量没有值,那么缺省使用 ~/.inputrc。

~/.inputrc 文件很简单,只有4种语句:

  1. 注释
  2. 变量设置语句(set variable value)
  3. 键绑定("keyseq":function)
  4. 条件语句($if ... $endif)
我们先不说其它的,先来看看键绑定吧!

键绑定

  1. 绑定语句。

    你现在就可以动手设置你喜欢的控制方式。比如,我发现有些时候我需要在命令行上做上 mark(Emacs 术语),然后把mark 和光标之间的 region(Emacs术语) 删掉,这个操作在 Emacs 里叫做kill-region. 但是我们发现这个函数在 Bash 里缺省是没有绑定的。如果我希望得到跟 Emacs 一样的绑定 C-w 的话,就把这行插入到 ~/.inputrc:

    "\C-w":kill-region
    
  2. 使绑定生效。为了使这个键绑定生效,你需要执行 re-read-init-file 函数。这个函数缺省绑定在了 "C-x C-r"。你修改 ~/.inputrc 之后在 Bash 里输入 "C-x C-r" 就可以使新的配置生效了。
  3. 列出可用的函数。

    不过你怎么知道那些函数可以被绑定呢?readline 的 info 页列出了很多函数,可是你不会每次都去info里查询吧,很麻烦啊。其实你可以使用bash的 bind 命令来得到所有的键绑定:

    $bind -p
    
    可以显示所有现有的已经绑定和没有绑定的函数。没有被绑定的函数被显示为 "(not bound)",并被加上了注释。就像这样:
    "\C-g": abort
    "\C-x\C-g": abort
    "\M-\C-g": abort
    "\C-j": accept-line
    "\C-m": accept-line
    # alias-expand-line (not bound)
    # arrow-key-prefix (not bound)
    # backward-byte (not bound)
    "\C-b": backward-char
    "\M-OD": backward-char
    "\C-h": backward-delete-char
    "\C-?": backward-delete-char
    
    你可以把这个命令的输出作为一个模板,嵌入到 ~/.inputrc 文件。把你喜欢的函数绑定到方便的按键。

    其实 readline 有三个函数可以让你方便的查询函数,变量和宏的绑定情况,它们是:

    dump-functions
    dump-variables
    dump-macros
    
    可是它们缺省都没有被绑定到任何按键。你可以为它们分别设置类似 "C-xf", "C-xv", "C-xm" 这样容易记忆的绑定。
  4. 如果忘了绑定……

    这样你就可以设置你需要的绑定啦!但是你还是有可能在需要的时候突然记不起哪些键绑定可以补全。这时候你输入:

    $bind -p | grep compl
    
    得到结果:
    "\C-i": complete
    "\M-\e": complete
    "TAB": complete
    "\M-!": complete-command
    "\M-/": complete-filename
    "\M-@": complete-hostname
    "\M-{": complete-into-braces
    "\M-~": complete-username
    "\M-$": complete-variable
    "\M-\C-i": dynamic-complete-history
    "\M-g": glob-complete-word
    "\M-*": insert-completions
    .......
    
    这样你记不住一个键的时候就可以方便的查询,这样几次之后,你就会把自己需要的按键都记住了。

配置变量

  1. 体验:

    Bash 的 readline 有一些变量可以控制它的行为。比如:

    bell-style 可以控制出错时是 audible(发出响声),visible(闪动屏幕),还是none(什么都不做);editing-mode 可以控制你是用 Emacs 的输入方式还是用 vi 的;

    completion-query-times 的值控制在补全的个数超过多少N时,bash 提示: “Display all N possibilities? (y or n)”;

    如果我设置 expand-tilde 为 on,当输入“ls ~/doc”,按 TAB 时,命令行会自动变成 "ls /home/wy/doc".

    如果把 visible-stats 设置为 on,那么列出补全的时候,目录,可执行文件,符号连接,会被分别使用 /, *, @ 来标记,就像 ls -F 的到的结果。

  2. 设置:

    设置的方法极其简单,就在 ~/.inputrc 文件里写入类似语句:

    set visible-stats on
    
    然后 "C-x C-r" 使设置生效。
  3. 怎样知道有哪些设置?

    可以设置的参数是很多的。使用命令

    $bind -v
    
    就可以得到所有这些可以设置的变量和它们的值了。

- 作者: yoco 2007年01月24日, 星期三 15:14  回复(2) |  引用(0) 加入博采

《悟空的回信》

亲爱的师父:因为我们那里在搞拆迁,所以我现在不住花果山了。但是,因为没有门牌号,我也不知道我住在哪,感谢中国邮政,我收到了你的邮件,那件外套,因为我不会缝扣子,所以我把他改成背心了,好暖和。师傅,我现在过得很好,经常去肯德基里吃吃麦当劳。师傅,我很想你,等中国移动降了漫游费,我会给你打电话。嫦娥姐姐生小孩的事情先不要跟八戒说,他感情比较脆弱。    悟空  

《悟空的回信》
师傅:
     您好!
    上次的信收到了,寄来的东西也收到了。这次我给您寄去了一个摄像头和一副耳麦,以后咱们视频吧。我写字还是不行,每次还得总麻烦人家代笔。qq号我也给你申请了12315密码是你的生日。要是八戒和沙师弟也一起的话就更好了,八戒自从回了高老庄就再也没有和我联系过,这个呆子,大概还在生我的气,沙师弟去年带着他的小儿子来过一次,这家伙快要做爷爷了。
    前一阵我去看玉帝了,他很烦,现在到处都在全球化,他手底下的那些公务员不是跟不上形势,就是被形势腐化,弄得他很无奈。
    杨二郎您知道吧,因为嫖娼,刚被放出来,一只天眼也瞎了,据说是警察冲进来时他逃跑结果眼睛正好撞到一枝树杈上。被拘了15天。本来找找人罚款就没事的,可他的狼狗咬坏了一个警察的下半身,人家家属不干,媒体也跟着推波助澜,这次我看他非倾家荡产不可。玉帝想保也没法保,刚出来时想让他去做个弼马温,但纪检部门始终不下结论,他也不好轻易安排。
    还有托塔天王李静,因涉嫌侵吞国有资产,买官卖官,接受巨额贿赂,结果被审计署的李金华大哥曝了光,中纪委接着就成立了专案组,和反贪部门一起联手调查,不久就把他双规了。还带出了一大堆买官者,可笑的是买官的里面竟然还有太白金星,文武两个曲星,媒体把这事热炒了好一阵。
    此事把他3个儿子都给气坏了,尤其哪吒,本来他们父子感情就不好,这次他索性直接从家里搬了出来,他昨天给我打电话特别想到我这里来喝酒,可警察限制他们家人离境,转移财产。连他的工作都受到了影响,他现在是高新技术开发区的主任,和我是很要好的朋友。自从他父亲出事以后好多投资意向都取消或延后了。他父亲的二奶整天带个孩子来找他哭哭啼啼的,弄得他一点招没有,因为家产被封,他的那个小弟弟连学费都交不起了,他只好背着老婆从家里拿了2万块给他们,还不敢让老娘知道。
    牛郎和织女也离婚了,长期两地分居,听说男的在外面包了二奶,七月七那天耽搁了见面。女的去找结果人家一家还在睡大觉。女方看事已至此,也只好认了。没想这事被月老知道了,跑来非要和我撮合,被我给挡了。因为我.....,还是留在最后说吧 。
    现在最烦的可能是东海龙王,他现在和环保局一起和沿海几省打官司,他的海全被污染了,鱼虾也快死光了,报纸说,他不久就快成一条死龙了。他的3个儿子也因为98年那场大水现在还在被公安部通缉,因为他们涉嫌酒后纵水为患,给人民造成了天文数字的损失。那天我见到他时他的须发全白了,完全不像个水利部长的模样。
    这次去看玉帝,他很高兴,他说他没想到我会去看他,说我自从入了党以后比以前可进步多了。他让我好好把握这次保持党员先进性教育的机会。看得出来他有点感动,还问我想不想回去任职,他那儿正好有个机会,他想换掉足协的谢亚龙,说他和阎世铎一样,一点创意没有,想让我去接这个掌门的位置。原本是让赵本山的,可这家伙招呼也不打就跑到辽足当了董事长,为此惹得国家体育总局那边好多人对他有意见。如果换了我相信会赢得好多人的支持,毕竟我跟师傅西天取过经。我婉言谢绝了,我哪懂什么足球啊,尤其这么敏感的位置,干不好还会连累了师傅您的名声,我干不了。
    对了,师傅,您应该去看看太上老君,他快不行了,是铅中毒,医生说他的仙丹里含铅量1000倍超标。现在医生每天给他排铅,但没人时他还是总偷着吃仙丹,他家人说他现在是得了仙丹妄想症。医生也说在这样下去估计熬不过今夏。为这事我专门跑去问过如来,因为当年我也......,呵呵。如来说我没有事的,当年我偷吃的那些仙丹全是假的,当时他根本就没有练出什么仙丹,全是骗人的。临走时还说我的筋斗云不如以前了让我抓紧时间练习。
    最后我要告诉师傅一件喜事,我想要结婚了,女的你认识的,白骨精。我们是从网上认识的,起初只是聊得很投缘。原来她身世很惨,出生时因为是女孩,就被父母抛弃了,被一个拾荒的老太好心收养可十岁时,老太得病死去,她从此无依无靠,先后几次被人贩子拐卖,长大后嫁了一户人家,没想这人吸毒,还强迫她去卖淫供他吸毒,她不肯就被毒打,她性子烈,就跳楼了。我还记得我们第一次见面时的情景,他看到我就跑,我使劲追才拦住了她。她看着我,我看着她。当时我们就认定了对方就是我们彼此一直要找的人,因为已聊得太久太熟悉了,所以我们以前的那段经历就成了一段不打不相识的爱恋。
     师傅,现在就等着您来给我们主持婚礼了,我的把兄弟牛魔王还提前送了一辆奥迪A8给我。他现在是牛魔王奶业的董事局主席,就在花果山的山下,我们常在一起。他建议让我再办个旅游公司,名字都想好了叫唐僧佛旅公司,旅游线路就叫西天取经缅怀之旅。我也做过调查,到时一定很火爆。我已给白龙马师弟打过电话了,让他继续给您开车,您做董事长,A8做您的专车。不过这事还得等您来了我们再细商量。
    另外,您来时千万不要走海上,因为中俄两国马上要在海上进行联合军演了,我怕您过不来。
       此致
敬礼!
                                                                   想念您的悟空 
                                                             2月15日姜太公代笔

- 作者: yoco 2006年12月19日, 星期二 19:47  回复(1) |  引用(0) 加入博采

《唐僧的家书》

《唐僧的家书》

    亲爱的悟空:
    我这封信写的很慢,因为知道你看字不快。我们已经搬家了,不过地址没改,因为搬家的时候把门牌带来了。这礼拜下两次雨,第一次下3天,第二次下4天。昨天我们去买比撒,店员我要切成8片还是12片,我说8片就成了,12片吃不完。我给你寄去件外套,怕邮寄时超重,把扣子剪下来放口袋里了。嫦娥生了,因为不知道是男是女,所以不知道你是该当舅舅还是阿姨。最后告诉你本来想给你寄钱。可是信封已经封上了~~
   元旦快到了,别忘了给孩子们讲讲很久很久很久以前我们过年的事情(祝:圣诞开心 元旦快乐 

- 作者: yoyo 2006年12月19日, 星期二 19:46  回复(0) |  引用(0) 加入博采

修改/清除Administrator帐户的密码

修改:控制面板中的“用户帐户”,可以修改用户帐户的密码,但是不能修改Administrator帐户的密码,假如你要把Administrator的密码改为abc,可以这样:进入MS-DOS模式,键入命令net user Administrator abc回车即可。

清除:要清除Administrator帐户密码,你可以进入系统所在盘,删除系统安装目录(Windows\system32\config)下的SAM文件;重启电脑后,Administrator帐户就没有密码了,如果此时你用Administrator帐户登陆系统,无需输入任何密码即可进入系统。

注意:只对2000有用,XP上删除SAM后,系统再无法进入,总是提示:安全账户初始化失败.....

 XP上误删除SAM文件解决方法:
1,试着用windows xp安装盘放入光驱(先设为光驱优先启动)在自动读取安装文件后,出现Windows XP的安装界面。有三个选项:
(1)要现在开始安装Windows XP,请按“Enter”键。
(2)要用“恢复控制台”修复Windows XP安装,按“R”键。
(3)要退出安装程序,不安装Windows XP,按“F3”键;
2.按“R”键,进入“Microsoft Windows XP (TM)故障恢复控制台”界面;故障恢复控制台提供系统修复和故障恢复功能。系统这时会搜寻已安装的Windows XP系统文件,然后显示搜寻结果,并询问“要登录到哪个Windows XP安装(要取消,请按Enter)”,选择1. C:\Windows,回车,系统会再询问“管理员密码”,再键入安装Windows XP时设置的管理员密码,回车,出现C:\Windows〉,这时需要输入修复命令Fixboot,后面的参数为启动扇区要写入的磁盘盘符,这里填入C:,回车。修复完成,键入Exit退出。重启后系统就自己建立了这个菜单。

方法2,下一个系统急救盘(U盘版)安到自己的U盘上,设为USB优先启动,先从别的机子的C:\Windows\repair下考一个备用的SAM文件到盘里,重启后进入DOS拷贝文件到
C:\Windows\system32\config里面
方法3, 在安装完后先在密码为空的时候先在DOS下备份到别的文件夹,在DOS下把一个密码为空的SAM COPY到相应的文件夹内.

- 作者: yoco 2006年12月16日, 星期六 10:36  回复(0) |  引用(0) 加入博采

RUNDLL32.EXE 是什么程序

Rundll32.exe是什么?顾名思意,“执行32位的DLL文件”。它的作用是执行DLL文件中的内部函数,这样在进程当中,只会有Rundll32.exe,而不会有DLL后门的进程,这样,就实现了进程上的隐藏。如果看到系统中有多个Rundll32.exe,不必惊慌,这证明用Rundll32.exe启动了多少个的DLL文件。当然,这些Rundll32.exe执行的DLL文件是什么,我们都可以从系统自动加载的地方找到。

现在,我来介绍一下Rundll32.exe这个文件,意思上边已经说过,功能就是以命令行的方式调用动态链接程序库。系统中还有一个Rundll.exe文件,他的意思是“执行16位的DLL文件”,这里要注意一下。在来看看Rundll32.exe使用的函数原型:
Void CALLBACK FunctionName (
HWND hwnd,
HINSTANCE hinst,
LPTSTR lpCmdLine,
Int nCmdShow
);

其命令行下的使用方法为:Rundll32.exe DLLname,Functionname [Arguments]
DLLname为需要执行的DLL文件名;Functionname为前边需要执行的DLL文件的具体引出函数;[Arguments]为引出函数的具体参数。


略谈Rundll32.exe的作用


常用Windows9x的朋友一定对Rundll32.exe和Rundll.exe这两个档案不会陌生吧,不过,由於这两个程式的功能原先只限於在微软内部使用,因而真正知道如何使用它们的朋友想必不多。那么好,如果你还不清楚的话,那么就让我来告诉你吧。

 
首先,请你做个小实验(请事先保存好你正在执行的程式的结果,否则...):点击“开始-程式-Ms-Dos方式”,进入Dos视窗,然後键入rundll32.exe user.exe,restartwindows,再按下回车键,这时你将看到,机器被重启了!怎么样,是不是很有趣?


当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是: RUNDLL.EXE ,,

 
这里要注意三点:1.Dll档案名中不能含有空格,比如该档案位於c:\ProgramFiles\目录,你要把这个路径改成c:\Progra~1\;2.Dll档案名与Dll入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点:Rundll不能用来呼叫含返回值参数的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指令Shell,格式为:Shell “命令列”


如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果:仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句: Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了?

实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows API的时间!!),供大家在程式设计中引用:
命令列: rundll32.exe shell32.dll,Control_RunDLL
功能: 显示控制面板
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
功能: 显示“控制面板-辅助选项-键盘”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
功能: 显示“控制面板-辅助选项-声音”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
功能: 显示“控制面板-辅助选项-显示”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL accesscpl,,4
功能: 显示“控制面板-辅助选项-滑鼠”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
功能: 显示“控制面板-辅助选项-传统”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
功能: 执行“控制面板-添加新硬体”向导。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
功能: 执行“控制面板-添加新印表机”向导。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
功能: 显示 “控制面板-添加/删除程式-安装/卸载” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
功能: 显示 “控制面板-添加/删除程式-安装Windows” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
功能: 显示 “控制面板-添加/删除程式-启动盘” 面板。
命令列: rundll32.exe syncui.dll,Briefcase_Create
功能: 在桌面上建立一个新的“我的公文包”。
命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
功能: 显示复制软碟视窗
命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
功能: 显示“建立快捷方式”的对话框,所建立的快捷方式的位置由%1参数决定。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
功能: 显示“日期与时间”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
功能: 显示“时区”选项视窗。
命令列: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称]
功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。
命令列: rundll32.exe rnaui.dll,RnaWizard
功能: 显示“新建拨号连接”向导的视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
功能: 显示“显示属性-背景”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
功能: 显示“显示属性-萤屏保护”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
功能: 显示“显示属性-外观”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
功能: 显示显示“显示属性-属性”选项视窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
功能: 显示Windows的“字体”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 同样是显示Windows的“字体”档案夹。
命令列: rundll32.exe shell32.dll,SHformatDrive
功能: 显示格式化软碟对话框。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
功能: 显示“控制面板-游戏控制器-一般”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
功能: 显示“控制面板-游戏控制器-进阶”选项视窗。
命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文档)
功能: 列印HTML文档。
命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
功能: 显示Microsoft Exchange一般选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
功能: 显示“控制面板-滑鼠” 选项 。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
功能: 显示 “控制面板-键盘属性-速度”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
功能: 显示 “控制面板-键盘属性-语言”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
功能: 显示Windows“印表机”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 显示Windows“字体”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
功能: 显示“控制面板-输入法属性-输入法”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
功能: 执行“添加新调制解调器”向导。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
功能: 显示“控制面板-多媒体属性-音频”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
功能: 显示“控制面板-多媒体属性-视频”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
功能: 显示“控制面板-多媒体属性-MIDI”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
功能: 显示“控制面板-多媒体属性-CD音乐”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
功能: 显示“控制面板-多媒体属性-设备”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
功能: 显示“控制面板-声音”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
功能: 显示“控制面板-网路”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
功能: 显示ODBC32资料管理选项视窗。
命令列: rundll32.exe shell32.dll,OpenAs_RunDLL {drive:\path\filename}

功能: 显示指定档案(drive:\path\filename)的“打开方式”对话框。
命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
功能: 显示“控制面板-密码”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
功能: 显示“控制面板-电源管理属性”选项视窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
功能: 显示Windows“印表机”档案夹。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2)
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
功能: 显示“控制面板-区域设置属性-区域设置”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
功能: 显示“控制面板-区域设置属性-数字”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
功能: 显示“控制面板-区域设置属性-货币”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
功能: 显示“控制面板-区域设置属性-时间”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
功能: 显示“控制面板-区域设置属性-日期”选项视窗。
命令列: rundll32.exe desk.cpl,InstallScreenSaver [萤屏保护档案名]
功能: 将指定的萤屏保护档案设置为Windows的屏保,并显示萤屏保护属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
功能: 显示“控制面板-系统属性-传统”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
功能: 显示“控制面板-系统属性-设备管理器”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
功能: 显示“控制面板-系统属性-硬体配置档案”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
功能: 显示“控制面板-系统属性-性能”属性视窗。
命令列: rundll32.exe user.exe,restartwindows
功能: 强行关闭所有程式并重启机器。
命令列: rundll32.exe user.exe,exitwindows
功能: 强行关闭所有程式并关机。
命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
功能: 显示“拨号属性”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
功能: 显示“桌面主旨”选项面板
当然,不止是VisualBasic,象Delphi.VisualC++等其他程式设计语言也可以通过呼叫外部命令的方法来使用Rundll的这些功能,具体方法这里就不再详细叙述了。灵活的使用Rundll,一定会使你的程式设计轻轻松松,达到事半功倍的效果!

- 作者: yoyo 2006年12月16日, 星期六 10:27  回复(0) |  引用(0) 加入博采