前几天程序上出了点小小的问题,打不开,总是一直在下载,最后服务器超时,汗!!
在服务器上弄一个独立的进程也没有解决问题!
今天把以前的备份传上去了,好了,
,真是莫名其妙啊!
思考ing!
前几天程序上出了点小小的问题,打不开,总是一直在下载,最后服务器超时,汗!!
在服务器上弄一个独立的进程也没有解决问题!
今天把以前的备份传上去了,好了,
,真是莫名其妙啊!
思考ing!
前几天从朋友那里买了个小玩具,很便宜,很不起眼的一个塑料小人,可是,当你拿到手里的时候,你就会发现仅仅这么一个小人,体现了人类的智慧是多么的伟大.我把他起名叫蜘蛛侠!
他的两个手和两只脚都有一个粘性的小球,很软,能够很轻易的粘到任何光滑的表面物质上,比如窗户的玻璃上,然后根据万有引力,他会自己慢慢的没有规律的往下滑,还会翻跟头,很是滑稽,让你看了忍不住想笑,哈哈大笑,天真的哈哈大笑,他让你回到了儿童时代!我敢保证,无论你是再大的年龄,看了他都会是同一个反应,笑,一直在笑!
买一个USB的蓝牙适配器,类似U盘,价格几十到几百不等,插到电脑上,安装蓝牙适配器驱动,就可以了
蓝牙连接本身不需要驱动的,只要开启手机的蓝牙,然后搜索设备,手机就能找到电脑,这时候就可以进行一些简单的传输操作。
现在科技太发达了,蓝牙无线传输速度太快了!
今天的天气真好啊,今天的心情真好啊!!!!
因为我的网站又恢复了,时隔八天,终于重见天日了,唉,说起来命苦啊,免费的空间就是靠不住啊!!!我哭!
不过现在可以笑了,开心的笑,
,以后这样的问题不会出现了!!!我笑!
到最后,也就是现在,Blog的相册[Album]终于弄好了,增加了列表浏览方式,支持按分类,推荐等方式进行浏览
现在已经OK了,快去看看吧.
现如今这社会时髦这个词用的可是多啊,那到底什么叫时髦,如何定义,如何诠释呢?
下面这些是百度到的
●时髦起源于创造服装行业(社会心理学)
●社会中对于时尚极端注意与极端不注意的属于少数人,而绝大多数人是随着少数时尚分子转移〈社会心理学〉
●风俗是历代相传的行为规则,而时尚则是现时流行的行为规则
●时兴的风靡是贫者的巧智向富人的虚荣心收税(桑弗)
●流行是不显眼的人模仿引人注目者的行为。其结果流行将自动地变化(瓦莱里)
●流行聪明人虽然嘲笑它,却还是服从这暴君命令(毕尔斯)
●时髦是摆脱了粗俗之后的优雅;因而,它最怕被新的时髦所代替(威·赫兹里特)
●高雅时髦与丑陋粗俗是人性这块普通硬币的两面—-(赫·乔·威尔斯)
●时髦永远是个任性的孩子(威·梅森)
●时髦是仲裁者,是衡量是非的标尺(斯梯尔)
●一代人眼中的新奇往往只是重新复活的上一代人的时髦—-(肖伯纳)
●追逐“流行”的女人,经常是恋着自己的(托罗什富科)
●一切时髦的东西都会过时,所以倘若你追时髦,那么你老了以后,就会变成一个谁也不肯信任的、徒有外表的人(舒曼)
●时髦的玩艺儿,只要表面的光彩一脱,显然就无价值可言—(莫里斯)
●时髦往往同无知结伴,而无知的时髦则加倍卑俗(苏联)
●一个人不可能是既时髦又出类拔萃(洛·史密斯)
●时髦常常发出阵阵刺耳的吆喝,使唤我们这些多变的瘦马,像愚人一样去追逐最破烂的废物和最廉价的玩偶(沃尔科特)
●我们真实的愿望仅仅是求异,从这一边摇摆到那一边,而且每一次新的摇摆都受到热烈欢呼,前一次摇摆得到的却是蔑视—-(伯纳德·贝伦)
●时髦虽然是愚蠢的产儿,傻瓜的向导,但它却能主宰最聪明的人,主宰学界(乔·布莱克)
发生在自己身边的时髦事有吗?有,前些日子网上刮起一阵博客风,好大啊,我也被卷进来了,弄了个博客;后来看人打网球,心理就痒痒了,心想这么好的运动怎能不玩,虽然网球这项运动不是新兴的,但是是有地域性的,至少在烟台这个地方还没有那么普及,我们一伙人也打,而且现在已经打的很好了,也叫时髦吧,呵呵.
随着时间的推移,还会有更多的时髦的事要发生,但不是所有的时髦都适合自己,这就需要自己去判断,盲目的跟随时髦可不是好事啊.
静观其变吧!
这是一篇笔记,是迷糊师姐的,嘿嘿,先这么叫着吧,她接触Instalshield比较早,因此有很多经验,这是其中的一部分,再与大家分享!
===============================================================================
InstallshieldX安装制作杂记(实例之自定义对话框)
如何调用自定义对话框?Installshield帮助中有说明,但有一些环节弄不好就无法实验成功。比如ControlID,DialogID等。
通过自己的摸索,我完成了自定义对话框的建立、事件编写已经调用,现整理出来,希望能给大家提供帮助。
1.新建对话框
(1)在User Interface->dialogs中新建一个Dialog,命名为fbysssDialog;
(2)通过Control tool bar加入一个Text Area,Text属性填入"我的自定义对话框";
(3)加入三个Push Button,分别设置Text属性为Back,OK,Next,Control Identifier分别设置为14,13,15。其他控件可以根据需要添加;
(4)Additional Tools->Direct Editor找到Dialog,设置fbysssDialog的ISResourceID为10333(如果有重复就改变数字)。
2.编写对话框事件
新建一个脚本文件,命名,比如叫"fbysssDialog.rul"
粘贴如下代码:
#define RES_DIALOG_ID 10333//对话框的ID
#define RES_PBUT_NEXT 15 // Next 按钮的ID
#define RES_PBUT_OK 13 // OK按钮的ID
#define RES_PBUT_BACK 14 // BACK按钮的ID
#include "Ifx.h"
export prototype ExFn_DefineDialog(HWND);
function ExFn_DefineDialog(hMSI)
STRING szDialogName, szDLLName, szDialog;
NUMBER nDialog, nResult, nCmdValue;
BOOL bDone;
HWND hInstance, hwndParent;
// STRING sValue;
begin
szDialogName = "fbysss的自定义对话框";
hInstance = 0;//默认值
szDLLName = ""; ////默认值
szDialog = "";//如果指定了对话框的ID,这里就设置为空字符串。
hwndParent = 0;//保留参数,必须为0
nResult = DefineDialog (szDialogName, hInstance, szDLLName,
RES_DIALOG_ID, szDialog, hwndParent,
HWND_INSTALL, DLG_MSG_STANDARD|DLG_CENTERED);
// 错误检查
if (nResult < 0) then
MessageBox ("出错了.", SEVERE);
bDone = TRUE;
abort;
endif;
bDone = FALSE;
//循环
repeat
//显示对话框,nComValue返回在对话框中的事件,如果正常,返回Control ID
nCmdValue = WaitOnDialog(szDialogName);
//NumToStr(sValue,nCmdValue);
//MessageBox(sValue,INFORMATION);
switch (nCmdValue)
case DLG_CLOSE:
// 关闭窗口
Do (EXIT);
case DLG_ERR:
MessageBox ("无法显示自定义对话框,安装取消.", SEVERE);
abort;
case DLG_INIT: ;
//初始化,啥不不干
case RES_PBUT_OK:
// OK按钮被按下
MessageBox("OK按钮被按下了。",INFORMATION);
case RES_PBUT_NEXT:
MessageBox("Next按钮被按下了。",INFORMATION);
bDone = TRUE;
case RES_PBUT_BACK:
MessageBox("BACK按钮被按下了。",INFORMATION);
bDone = TRUE;
endswitch;
until bDone;
//关闭对话框
EndDialog (szDialogName);
//释放内存
ReleaseDialog (szDialogName);
end;
3.调用对话框
在Setup.rul头部加入#include “fbysssDialog.rul“
ExFn_DefineDialog(0);//调用,这句话根据需要写在相应的地方。比如一开始就显示,写在function OnFirstUIBefore() 的begin之后。
编译运行,是不是看到效果了?cool!
InstallshieldX安装制作杂记(实例之安装完成)
我们可以看到,很多软件在安装完成之后,可以有一些选项,比如“查看ReadMe”,“运行程序”等等,这是怎么做到的呢?
关键词:OnMoved、SdFinish
1.InstallShieldX脚本中有一个OnMoved事件。这个事件在需要安装的文件拷贝完成之后触发;
2.SdFinish是一个标准对话框函数,函数原型为SdFinish ( szTitle, szMsg1, szMsg2, szOpt1, szOpt2, bvOpt1, bvOpt2 );从参数中可以发现,这里只提供最多两个选项。
实例代码如下:
function OnMoved()
STRING szTitle;
STRING szMsg1, szMsg2,szOpt1,szOpt2;
BOOL bvOpt1, bvOpt2;
STRING szApplicationPath,szApplicationCmdLine,szCmdLine;
begin
if (MAINTENANCE) then return 0;endif;//如果不是安装状态,比如修改/卸载状态的时候,则不执行。
szTitle = "安装完成";//对话框的标题
szMsg1 = "%P 安装已经完成.\n" +
"请根据需要选择下面的选项.";//%P为软件产品名称
//如果要单独在这里设置产品名称,在之前使用如下两句
// szProductName = "某某软件";
// SdProductName (szProductName);
szMsg2 = "点击‘完成’按钮完成%P安装.";
szOpt1 = "阅读自述文件";//如果这里为空,则表示只有一个选项
szOpt2 = "运行程序";
SdFinish (szTitle, szMsg1, szMsg2, szOpt1, szOpt2, bvOpt1, bvOpt2);
if (bvOpt1) then
LaunchApp (‘notepad.exe’,TARGETDIR ^ "\\readme.txt");//LaunchApp 用来运行某外部程序
endif;
if (bvOpt2) then
LaunchApp (TARGETDIR ^ "\\App.exe","");
endif;
end;
InstallshieldX安装制作杂记(经验点滴)
1. 安装类型:
Universal Project是为了适应不同操作系统而作。
InstallScript Project最为灵活,Windows Installer页中的project需要 windows installer server 支持,但有速度快,文件小的优点。
2. InstallScript MSI project 可以转换为InstallScript Project:菜单project->Convert to InstallScript Project.
3.常用函数:
NumToStr,StrToNum 整型和字符串相互转换。
InstallShield X制作安装程序杂记(7.Behavior and Logic节点)
1.InstallScript(安装脚本):安装文件是InstallScript Project的重头戏,可以通过编写安装脚本文件,来对安装程序进行深层次的处理。其中提供了一些标准函数、事件,也可以自定义函数,代码风格有点类似C。
如何使用脚本来“滋润”安装程序,后文将用专门篇幅实例说明。
2.Support Files/Billboards(支持文件,后面的不知道咋翻译好):一些安装过程中需要读写的文件,可以添加到这里。后文实例中将有说明。
InstallShield X制作安装程序杂记(6.Server Configuration节点)
1.Internet Information Services(IIS配置):主要是给Web项目制作使用的。
这里有一个根IIS Configuration,右键->Add web side(建立web站点),建立站点时候,可以在站点上面建立虚拟目录(New Virtual Directory)。右边的Key-Value表中有很多条目,只要你会设置IIS,这些都是小菜了。
2.SQL Servers(MS SQL Server配置):用于SQL Server的配置,我看了一下,好像可以通过SQL脚本(script)在安装时建库,建表等。一言以蔽之,可以作为数据库的初始化。
在根节点SQL Servers上,右键->new SQL Connection,填写相应数据即可。
--这个大节点,我没有实际测试,不过比较简单,属于一看就明白的,就不一一翻译了,有问题单独交流。
InstallShield X制作安装程序杂记(5.System Configuration节点)
1.Shortcuts(快捷方式):快捷方式主要是以下几个地方:
Start Menu(开始菜单)/Programs Menu(程序菜单)/Startup(启动)/Desktop(桌面)
(1)Start Menu,如果你装了UtraEdit就知道了,点击开始菜单,在上方就可以看到,这是比较cool的一种方式,堪称最快捷。而且很多软件都不往那里装,比较显眼,好找。
(2)Programs Menu,是大多数软件都采用的快捷方式位置,即在开始->程序中所列出。
(3)Startup,如果你的软件希望用户开机就运行,可以在这里建立,位于开始->程序->启动。
(4)Desktop,在桌面创建快捷方式。
几种快捷方式的配置方式都一样,在相应节点上点击右键,有一个New Shortcut(但我这里不知道什么原因该项无效),我使用的是New Advertised Shortcut,建立以后,右边会出现一个Key-Value表项,这里挑几个说说。
Display Name:快捷方式的名称。
Target:这里写快捷方式指向的文件名,对应快捷方式中的“目标”。比如<TARGETDIR>\bin\pmain.exe
Arguments:参数。比如主程序的运行参数是pmain -start,那这里就填写-start。
Working Directory:对应快捷方式中的“起始位置”,比较重要,如果不设置,而程序中使用GetCurrentPath可能获得的是快捷方式所在的位置(如桌面,而不是目标所在目录),从而导致程序路径错误。对应上面的Target,这里应该填写 <TARGETDIR>\bin。
2.Registry(注册表):可以把一些信息写入注册表。这个节点的工作区布局,和上篇所说的Files and Folders很相似,上面是源(Recource),下面是目的(Destination),如果要复制注册表项名称,用法很简单,在Source computer’s Registery view中选定要修改的注册表项,按紧鼠标,拖拽到Destination computer’s Registry中的相应节点中就可以;如果要新建表项,在Destination computer’s Registry节点中点击右键,new->Key,如果要指定key值,使用相应的菜单项,跟在注册表中直接操作差不多,这里就不多说了。
----以下几个节点在MSI Project中有,InstallScript Project中却没有。关于××× Project,我一直很困惑,我到时专门写一个文章,提出我的困惑。
3.ODBC Resources(ODBC 源)
4.INI File Changes(ini文件更改)
5.Environment Variables(环境变量)
这几个节点的配置很简单,我就不说了。
InstallShield X制作安装程序杂记(4.Application Data节点)
1.Files and Folders(文件与文件夹):这个一看就明白,有四个区域Source computer’s folders(源机器文件夹,即制作安装程序的机器中的文件夹),Source Computer’s files(源文件,列出源文件夹中的文件)
Destination computer’s folders(目标机器文件夹,即要安装的机器上的文件夹),Destination computer’s files(目标文件)。
(1) 前两个,跟资源管理器没多大区别,重点说说Destination computer’s folder,这里一般会列出[AppDataFolder],[Common FilesFolder],[INSTALLDIR],如果需要其他文件夹,可以通过在根节点Destination Computer上点击右键->Show Predifined Folder来选择,这样就可以把文件安装到相应的系统预定义文件夹中。
(2) 对于一般的安装制作,用最后一个就可以。方法:在Source computer’s folders中选定源文件夹,按紧鼠标,拖拽到[INSTALLDIR]节点下面,拖拽过来时,会弹出一个对话框,询问你是否要使用动态文件链接,我建议采用动态文件链接,这样,如果源文件发生了变化,都可以在编译时自动更新。接下来还会出现一个对话框,可以设定是否包含子目录(Include subfolders),是否自动注册所有的文件(Self-Register all files)等,一般说来,按Y,然后按一个OK就可以了。
(3) 如果要指定目的文件夹的读写权限,通过右键->Properties->Permissions来进行设置。
(4)一旦加入了文件夹,InstallshieldX就自动建立了一个Component,上一篇中已经说明了Component和Feature的关系。所以这里,特别要注意的是,要看清楚最上面的那一行字“Add new components to the feature”后面的下拉框,(2)中的文件,将和指定的Feature相关联,如果这里指定得不对,假如用户没有选定这个Feature,那这些文件就不会安装到指定的目录。
2.Redistributables: 直译是‘重新分配表’,我理解的就是安装所需要的一些附带包,可以翻译为‘分发包’点击就可以看到一个列表,把需要的包打勾就可以。
InstallShield X制作安装程序杂记(3.Orgnization节点)
(一)Setup Design 安装设计,这个节点实际是Features和Components的一个树结构
(二)Features 这个节点很重要。不知怎么翻译比较好,暂且叫‘安装部分’比如你的软件有几个部分,可以由用户选择安装,就需要在这里分别设置。各个Features之间可以有依赖关系,一个Features可以包括多个Components。(通过new Component就可以建立。) 从用户角度来看,这是产品的最小组成部分。
(三)Components 安装零件。可以是文件、快捷方式、注册表项等。多个Components组成一个Feature,从制作者角度来看,是安装程序的最小组成部分。
(四)Setup Types 安装类型。可以在这里维护安装类型,比如添加一个‘完整安装’,‘自定义安装’,‘最小安装’等。这个节点很简单,点击每个安装类型,可以选择相应的Feature,右边可以设置显示和描述的文字。
InstallShield X制作安装程序杂记(2.Installation Information节点)
Installation Information,即安装信息。
(一).General Information:
1. Project Properties,
Author Name中填写作者姓名;Setup Languages,下面会列出一个语言列表,你可以根据需要进行勾选,InstallShield X默认的语言是English,如果你只要简体中文的话,需要先选中Chinese(Simplified),然后把在‘String Tables’下把Chinese(Simplified)设置为默认(点击右键,Make Default),再把English从列表中去掉。如果选择了多种语言,安装时会出现语言选择对话框。
PlatForms 选择这个安装程序可以在哪些操作系统中进行安装。
2.Add or Remove Programs:这栏信息与控制面板->添加/删除程序相关
Display Icon:选择在‘添加/删除程序’列表中显示的图标
Disable Change Button 是否让‘添加/删除程序’列表中的‘更改’按钮是否无效,默认为NO,即不Disable,有效。
Disable Remove Button 是否让‘添加/删除程序’列表中的‘删除’按钮是否无效,默认为NO,即不Disable,有效。
Publisher/Product URL 发行商/产品 网址
Read Me 可以填写readme文件名。
。。。接下来的几个都是类似的信息,不再一一列出,这些信息,将在‘添加/删除程序’列表中点击‘支持’信息弹出的对话框中出现。
3.Product Properties 产品属性
这个很简单,挑几个重要的说说:
TARGETDIR 目标文件夹。比如
<FOLDER_APPLICATIONS>\<IFX_COMPANY_NAME>\<IFX_PRODUCT_NAME> 这几个括号中的是变量。分别代表应用 程序文件夹\公司名称\产品名称,你也可以修改这个值,如去掉公司名称变量。
Executable File 主程序名称
Application Type 应用程序类型 我选的是Standard Windows Application 。这个值有对安装有什么影响,还没有试验。
4.String Tables 字串表。
点击下面的Chinese(Simplified)节点,可以看到字符定义表,这些变量,可能影响你安装的显示。你可以进行相应的修改、添加。
(二)Update Service更新服务 如果选了Enable Update Service为True,可以设置Host(主机)/Update Check Interval(更新检查间隔时间)等来配置更新服务。这个功能,由于我还没有加以试验。先不多说,以后再补充。
InstallShield X制作安装程序杂记(1.视图概貌)
把视图篇写在首位,主要是我当时在看帮助的时候,看到很多诸如installscript view,dialog view之类的字眼,可我在面板上不能很快的找到,好像这帮助写的不是这个版本似的,这让我感觉很郁闷。而后来发现,这还是和不熟悉有很大关系。废话少说,咱们先来看看视图。
打开菜单View,第三个菜单项为View Bar,点击之后,在窗口左边会出现一个视图列表条,分Installshield,View list steps和Workspace三栏,Installshield栏中主要是一些简介、帮助信息,不必多看。View list steps里面即是installation Designer中的一级视图导航。Workspace栏,这正是关键所在。我所疑惑的帮助中所说的view,指的就是这里,这里列出了常用的二级视图。请记住:View Bar
另外一个重要的视图是Project Assistant(工程助理视图),在Workspace栏中有入口,但是可能出现你点击了那个按钮,却没有任何反应的情况,是为什么呢,原来问题还在View菜单,看最后一个菜单项Project Assistant,把它选中就可以了。
主工作区,有几个切换页(Start page/Project Assistant/Installation Designer)Start Page是可以不用看,其中Installation Designer是最主要的工作视图。
本篇主要给新手刚进入系统进行环境熟悉,具体视图的内容,将在后面的文章进行介绍。
InstallShield X制作安装程序杂记(前言)
公司要做一个应用软件产品包装,产品本身的质量,实在是不好意思说什么,那就不说了。我的任务就是要把这个产品包装得大气一点。软件的安装程序制作,有很多工具可以使用,但头儿指定了InstallShield X,那咱就硬着头皮上吧!(以下简称X)
X的安装,一看就与众不同,蓝色的背景,感觉很新颖。对于这个新版的安装制作工具,对我还是有很大的吸引力的。而正因为是‘新版本’,其组织结构和以前的版本有很大不同,所以可查的资料很少,无论是英文还是中文。当时只有http://blog.joycode.com/hopeq/archive/2004/08/02/29325.aspx
上有一点比较简单的介绍,所以主要还得靠自己了,经过大概一周的努力,遇到不少问题,总算是把一个比较常见的完整安装过程完成了。写下这些东西的目的,不光是给自己记录,还可以给像我当时那样的新手以一定的参考。文章组织也许不是很有逻辑性,所以叫‘杂记’,只要能给别人有一点用处,不至于误导,我心足矣。如果有不正确的地方,还请大家指出。
说明:本人的安装工程是ScriptInstallProject,所以文中的视图、功能项均以ScriptInstallProject为准。
前天玩了一趟过山车,爽呆了,不过爽过了,由于速度太快,一时间没接受的了,脑部充血了,弄得头皮疼得要命,一碰就像针扎的似的,好难受啊.
![]()
今天感觉好多了,头顶不疼了,可是耳朵后面还是刺痛,慢慢恢复中……
偶感冒了,好难受啊,还有好多工作没做完呢,
IS12已经装上了,但是没发觉比IS10.5多了哪些功能,慢慢研究中! ![]()
最近这几天,系统做完了,优化也做好了,剩下的工作就是打包了,在网上找了好多制作安装软件的工具,setupFactory,Advanced Installer ,Wise Installation System ,可惜都不理想,关键的问题是不能在IIS中建立虚拟站点,还有将安装中的变量写入到指定的文件中,看来还是技术不到位啊,继续研究中……
![]()
最终选择使用InstalShiel10.5英文版.
通过几天的研究,现在已经初步的解决了问题,建立虚拟目录,不过还有一个问题,通过IS建立的虚拟目录,默认用户没有NETWORK,而且没有启用父路径.
通过对话框获得的用户变量不能写入到ASP文件中,这仍然是个问题.
经过一天的研究,终于成功了,关键在CHRB()和CHR()的用法上,我都做了注释,各位拿了去自己研究研究吧.
另外我这还有VB版的,可以生成DLL然后与ASP结合使用,需要的朋友留个声儿,说一下.
‘================================================
‘Edit by jena.want at 2006-09-07
‘=============http:www.ishere.cn=================
‘================================================
Dim sBASE_64_CHARACTERS
sBASE_64_CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
sBASE_64_CHARACTERS = strUnicode2Ansi(sBASE_64_CHARACTERS)
Private Function strUnicode2Ansi(asContents)
‘convert unicode string to ansi string
strUnicode2Ansi = ""
len1 = Len(asContents)
For i = 1 To len1
VarChar = Mid(asContents, i, 1)
varasc = Asc(VarChar)
If varasc < 0 Then varasc = varasc + 65536
If varasc > 255 Then
varHex = Hex(varasc)
varlow = Left(varHex, 2)
varhigh = Right(varHex, 2)
strUnicode2Ansi = strUnicode2Ansi & ChrB("&H" & varlow) & ChrB("&H" & varhigh)
Else
strUnicode2Ansi = strUnicode2Ansi & ChrB(varasc)
End If
Next
End Function
Private Function strAnsi2Unicode(asContents)
‘convert ansi string to unicode string
strAnsi2Unicode = ""
len1 = LenB(asContents)
If len1 = 0 Then Exit Function
For i = 1 To len1
VarChar = MidB(asContents, i, 1)
varasc = AscB(VarChar)
If varasc > 127 Then
strAnsi2Unicode = strAnsi2Unicode & Chr(AscW(MidB(asContents, i + 1, 1) & VarChar))
i = i + 1
Else
strAnsi2Unicode = strAnsi2Unicode & Chr(varasc)
End If
Next
End Function
Public Function EncryptText(asContents)
‘let the ansicode string put up coding with base64bit
Dim lnPosition
Dim lsResult
Dim Char1
Dim Char2
Dim Char3
Dim Char4
Dim Byte1
Dim Byte2
Dim Byte3
Dim SaveBits1
Dim SaveBits2
Dim lsGroupBinary
Dim lsGroup64
Dim M4, len1, len2
len1 = LenB(asContents)
If len1 < 1 Then
EncryptText = ""
Exit Function
End If
M3 = len1 Mod 3
‘If M3 > 0 Then asContents = asContents & String(3 – M3, Chrb(0))
‘Don’t use Chrb() In Ansicode format case , use chr() , and convert to Ansicode format later .2006-09-08 jena.want
If M3 > 0 Then asContents = asContents & strUnicode2Ansi(String(3 – M3, Chr(0)))
‘complement digit easy to count
If M3 > 0 Then
len1 = len1 + (3 – M3)
len2 = len1 – 3
Else
len2 = len1
End If
lsResult = ""
For lnPosition = 1 To len2 Step 3
lsGroup64 = ""
lsGroupBinary = MidB(asContents, lnPosition, 3)
Byte1 = AscB(MidB(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = AscB(MidB(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = AscB(MidB(lsGroupBinary, 3, 1))
Char1 = MidB(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
Char2 = MidB(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = MidB(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
Char4 = MidB(sBASE_64_CHARACTERS, (Byte3 And 63) + 1, 1)
lsGroup64 = Char1 & Char2 & Char3 & Char4
lsResult = lsResult & lsGroup64
Next
‘dispose the last residual chars
If M3 > 0 Then
lsGroup64 = ""
lsGroupBinary = MidB(asContents, len2 + 1, 3)
Byte1 = AscB(MidB(lsGroupBinary, 1, 1)): SaveBits1 = Byte1 And 3
Byte2 = AscB(MidB(lsGroupBinary, 2, 1)): SaveBits2 = Byte2 And 15
Byte3 = AscB(MidB(lsGroupBinary, 3, 1))
Char1 = MidB(sBASE_64_CHARACTERS, ((Byte1 And 252) \ 4) + 1, 1)
Char2 = MidB(sBASE_64_CHARACTERS, (((Byte2 And 240) \ 16) Or (SaveBits1 * 16) And &HFF) + 1, 1)
Char3 = MidB(sBASE_64_CHARACTERS, (((Byte3 And 192) \ 64) Or (SaveBits2 * 4) And &HFF) + 1, 1)
If M3 = 1 Then
lsGroup64 = Char1 & Char2 & ChrB(61) & ChrB(61) ‘use "=" complement digit
Else
lsGroup64 = Char1 & Char2 & Char3 & ChrB(61) ‘use "=" complement digit
End If
lsResult = lsResult & lsGroup64
End If
‘convert ansicode format to unicode format and put out
EncryptText = strAnsi2Unicode(lsResult)
End Function
Public Function DecryptText(asContents)
‘let the base64bit format string convert to ansicode format
asContents = strUnicode2Ansi(asContents)
Dim lsResult
Dim lnPosition
Dim lsGroup64, lsGroupBinary
Dim Char1, Char2, Char3, Char4
Dim Byte1, Byte2, Byte3
Dim M4, len1, len2
len1 = LenB(asContents)
M4 = len1 Mod 4
‘the string’s length should be multiple with 4
If len1 < 1 Or M4 > 0 Then
DecryptText = ""
Exit Function
End If
‘judge the last bit is "=" or not
‘judge the reciprocal second bit is "=" or not
‘this "m4" means the count of chars where last residual width dispose by oneself
If MidB(asContents, len1, 1) = ChrB(61) Then M4 = 3
If MidB(asContents, len1 – 1, 1) = ChrB(61) Then M4 = 2
If M4 = 0 Then
len2 = len1
Else
len2 = len1 – 4
End If
For lnPosition = 1 To len2 Step 4
lsGroupBinary = ""
lsGroup64 = MidB(asContents, lnPosition, 4)
Char1 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 1, 1)) – 1
Char2 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 2, 1)) – 1
Char3 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 3, 1)) – 1
Char4 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 4, 1)) – 1
Byte1 = ChrB(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & ChrB(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
Byte3 = ChrB((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
lsGroupBinary = Byte1 & Byte2 & Byte3
lsResult = lsResult & lsGroupBinary
Next
‘dispose the last residual chars
If M4 > 0 Then
lsGroupBinary = ""
lsGroup64 = MidB(asContents, len2 + 1, M4) & ChrB(65) ‘chr(65)=A convert to value is 0
If M4 = 2 Then ‘complement digit to 4 for easy to count
lsGroup64 = lsGroup64 & ChrB(65)
End If
Char1 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 1, 1)) – 1
Char2 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 2, 1)) – 1
Char3 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 3, 1)) – 1
Char4 = InStrB(sBASE_64_CHARACTERS, MidB(lsGroup64, 4, 1)) – 1
Byte1 = ChrB(((Char2 And 48) \ 16) Or (Char1 * 4) And &HFF)
Byte2 = lsGroupBinary & ChrB(((Char3 And 60) \ 4) Or (Char2 * 16) And &HFF)
Byte3 = ChrB((((Char3 And 3) * 64) And &HFF) Or (Char4 And 63))
If M4 = 2 Then
lsGroupBinary = Byte1
ElseIf M4 = 3 Then
lsGroupBinary = Byte1 & Byte2
End If
lsResult = lsResult & lsGroupBinary
End If
DecryptText = strAnsi2Unicode(lsResult)
End Function
最近的这个项目需要在VB中把中文字符串加密解密,有时间总出现乱码,百度了好长时间,原来是出在编码机制上,没有转换.这编文章转自网上,放到这里以备后用.
Unicode vs Ansi
*******************************************************************************
Visual Basic 32-bit 版本的字串处理采用 Unicode,也就是说字串在 VB 内部是以
Unicode 的格式来存放。
何谓 Unicode?简单的说,就是每一个字元都是以 2-byte 的型式表示,而每个「实
体字元」就是一个「字元」。因此,
Len(“大家好”)
Len(“abc”)
所传回的值都是 3,因为「大」和「a」都是一个字元。
但是这对一些中文字串处理,例如纯文字的资料档,却是一个大灾难,因为你必须以
byte 来定位每个字元,可是 Unicode 却把一切的处理全搞砸了。例如:
Len(“Good Morning”) 传回 12,而
Len(“今天天气很好”) 传回 6
对初学者而言,好不容易能使用 VB 来写程式已经是件了不起的事了,却马上在中文
处理上挨了一记闷棍,所受到的打击实在不小。但是不要怕,事实上只要再多了解一
些指令,就可以把中文处理的问题解决了。
是什麽指令呢?最重要的莫过於 StrConv 了。StrConv 函式的语法为:
StrConv(待转换字串, 转换格式)
其中转换格式在这里用到的是:
vbUnicode 将 Ansi 字串转换为 Unicode
vbFromUnicode 将 Unicode 字串转换为 Ansi
将字串转成 Ansi 之後,所有的字串处理指令都要加个 B,例如:LeftB, RightB,
MidB, ChrB, InstrB, LenB, InputB 等。例用这些指令来处理就行了。
当你处理完毕之後,你可以再将它再转回 Unicode,这样就可以使用一般的字串处理
指令了。
这样讲看得懂吗?如果还是不了解,看看下面的实例说明:
[●] 简易使用范例
看看下面的基本范例您应该就会对 VB 的字串处理方式有些概念。
Private Sub Command1_Click ()
Dim sUnicode As String
Dim sAnsi As String
' Unicode 运算
sUnicode = “王小明,A123456789,651023,台北市中山路100号,(02)2345678″
Debug.Print Len(sUnicode) ' 传回 44
Debug.Print Mid$(sUnicode, 5, 10) ' 传回 A123456789
Debug.Print Instr(sUnicode, “台北市”) ' 传回 23
' 将 Unicode 字串转成 Ansi
sAnsi = StrConv(sUnicode, vbFromUnicode)
' Ansi 运算
Debug.Print LenB(sAnsi) ' 传回 54
Debug.Print MidB$(sAnsi, 8, 10) ' 传回 ?????,因为忘了转回 Unicode
Debug.Print StrConv(MidB$(sAnsi, 8, 10), vbUnicode) ' 传回 A123456789,请注意转回 Unicode 的动作一定要做
Debug.Print InStrB(sAnsi, StrConv(“台北市”, vbFromUnicode)) ' 传回 23, 不要忘了要把”台北市”也转成 Ansi,否则会找不到
End Sub
我是个音乐迷,特别喜欢音乐,特别喜欢纯音乐,雅尔的,雅尼的,神秘园,恩雅的等等,为了能更好的享受这些音乐,更好的发展的我爱好,哈哈,我准备买个音箱,再说了,前些天买了电脑了,怎么地也得配个音箱啊.
兜里的银两不多,那就只能买个便宜的啊,昨天大润发送的海报,上面有一款漫步者R201T-III的,搞特价128,我看挺值,从网上一查,大都在140-160之间,行,就买它了.
唉,终于要有音箱了,我那机器里的好音乐可以大放光芒了.
HOHO ![]()
N天过后……..
音箱买回来了,目前正处于磨合期,但是效果已经很好了.
N天过后……..
经过这些天的磨合,现在音箱的效果已经完全的显现出来了,高音,低音表现都很出色!我满意!
这几天没怎么写东西,是因为忙着做OA系统,每天晚上都弄到12点才睡,现在都好困啊,值得欣慰的是马上要做完了啊.终于看到希望了,这套系统做的时候可够长的了.
功能方面也挺全面的:
1,新闻,政策法规,通知发布
2,工作计划,日程安排,项目列表
3,内部邮件,在线即时聊天,用户留言,员工论坛,在线会议
4,通讯录,客户群组
5,资料档案管理,公司车辆管理,资源管理
6,公文流转,工作流发布
7,部门管理,用户组管理,
8,个人信息管理-基本信息,详细信息,登录信息
9,系统权限管理,分模块权限管理,系统基本信息管理
10,办公助手-各地区邮编区号查询,航班信息查询
……
![]()
=====================================
参数和属性
下列标记属性和参数描述了由“发布”命令创建的 HTML 代码。在编写自己的用于显示 Flash 内容的 HTML 时,可以参考此列表。除非特别说明,否则所有条目都同时适用于 object 标记和 embed 标记。可选条目也在此列出。Internet Explorer 可以识别用于 object 标记的参数,而 Netscape 则可以识别用于 embed 标记的参数。属性既可用于 object 标记,也可用于 embed 标记。当自定义模板时,可以用此处列出的模板变量替代相应的值。请参阅自定义 HTML 发布模板。
注意:此部分中列出的属性和参数特意以小写字母显示,以符合 XHTML 标准。
devicefont 属性/参数
值: true | false
模板变量:$DE
说明:
(可选)对于未选定“设备字体”选项的静态文本对象,指定是否仍使用设备字体进行绘制(如果操作系统提供了所需字体)。
src 属性
值: movieName.swf
模板变量:$MO
说明 : 指定要加载的 SWF 文件的名称。仅适用于 embed。
movie 参数
值: movieName.swf
模板变量:$MO
说明: 指定要加载的 SWF 文件的名称。仅适用于 object。
classid 属性
值: clsid:D27cdb6e-ae6d-11cf-96b8-444553540000
说明: 标识浏览器的 ActiveX 控件。输入的值必须与上面的显示完全一致。仅适用于 object。
width 属性
值: n 或 n%
模板变量:$WI
说明:以像素值或浏览器窗口的百分比值来指定应用程序的宽度。
height 属性
值: n 或 n%
模板变量:$HE
说明: 以像素值或浏览器窗口的百分比值来指定应用程序的高度。
注意:因为 Flash 应用程序是可缩放的,所以只要高宽比保持不变,不论以任何尺寸播放,它们的品质都不会降低。(例如,以下尺寸的高宽比都是 4:3:640 x 480 像素、320 x 240 像素和 240 x 180 像素。)
codebase 属性
值: active.macromedia.com/flash7/cabs/swflash.cab#version=7,0,0,0
说明: 标识 Flash Player ActiveX 控件的位置,以便在尚未安装该控件时,浏览器可以自动下载它。输入的值必须与上面的显示完全一致。仅适用于 object。
pluginspage 属性
值: www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash
说明: 标识 Flash Player 插件的位置,以便在尚未安装该插件时,用户可以下载它。输入的值必须与上面的显示完全一致。仅适用于 embed 。
swliveconnect 属性
值: true | false
说明: (可选)指定第一次加载 Flash Player 时浏览器是否应启动 Java。如果忽略此属性,默认值为 false。如果在同一页面上同时使用 JavaScript 和 Flash,Java 必须处于运行状态,FSCommand() 函数才能起作用。但是,如果您运行 JavaScript 只是为了检测浏览器或用于其他与 fscommand() 动作无关的目的,则可以通过将 SWLIVECONNECT 设置为 false,从而防止 Java 启动。当没有将 JavaScript 和 Flash 一起使用时,也可以通过将 SWLIVECONNECT 属性明确设置为 true,强制 Java 启动。启动 Java 会显著增加启动 SWF 文件所需的时间,因此,只有在必要时才应将此标记设置为 true。仅适用于 embed。
使用 fscommand() 动作可从独立的放映文件中启动 Java。
play 属性/参数
值: true | false
模板变量:$PL
说明:(可选)指定应用程序是否在浏览器中加载时就开始播放。如果您的 Flash 应用程序是交互式的,则可以让用户通过单击按钮或执行某些其他任务来开始播放。在这种情况下,将 play 属性设置为 false 可禁止应用程序自动开始播放。如果忽略此属性,默认值为 true。
loop 属性/参数
值: true | false
模板变量:$LO
说明: (可选)指定 Flash 内容在它到达最后一帧后是无限制重复播放还是停止。如果忽略此属性,默认值为 true。
quality 属性/参数
值: low | medium | high | autolow | autohigh | best
模板变量:$QU
说明: (可选)指定在应用程序回放期间使用的消除锯齿级别。因为消除锯齿需要更快的处理器先对 SWF 文件的每一帧进行平滑处理,然后再将它们呈现到观众屏幕上,所以需要根据要优化速度还是优化外观来选择一个值:
“Low”使回放速度优先于外观,而且从不使用消除锯齿功能。
“Autolow”优先考虑速度,但是也会尽可能改善外观。回放开始时,消除锯齿功能处于关闭状态。如果 Flash Player 检测到处理器可以处理消除锯齿功能,就会打开该功能。
“Autohigh”在开始时是回放速度和外观两者并重,但在必要时会牺牲外观来保证回放速度。回放开始时,消除锯齿功能处于打开状态。如果实际帧频降到指定帧频之下,就会关闭消除锯齿功能以提高回放速度。使用此设置可模拟 Flash 中的“消除锯齿”命令(“查看”>“预览模式”>“消除锯齿”)。
“Medium”会应用一些消除锯齿功能,但并不会平滑位图。该设置生成的图像品质要高于“Low”设置生成的图像品质,但低于“High”设置生成的图像品质。
“High”使外观优先于回放速度,它始终应用消除锯齿功能。如果 SWF 文件不包含动画,则会对位图进行平滑处理;如果 SWF 文件包含动画,则不会对位图进行平滑处理。
“Best”提供最佳的显示品质,而不考虑回放速度。对所有输出都进行消除锯齿处理,并且对所有位图都进行平滑处理。
如果忽略 quality 属性,其默认值为 high。
bgcolor 属性/参数
值: #RRGGBB(十六进制 RGB 值)
模板变量:$BG
说明: (可选)指定应用程序的背景色。使用此属性来覆盖在 Flash SWF 文件中指定的背景色设置。此属性不影响 HTML 页面的背景色。
scale 属性/参数
值: showall | noborder | exactfit
模板变量:$SC
说明: (可选)当 width 和 height 值是百分比时,定义应用程序如何放置在浏览器窗口中。
“Showall”(默认值)使整个 Flash 内容显示在指定区域中,且不会发生扭曲,同时保持它的原始高宽比。边框可能会出现在应用程序的两侧。
“Noborder”对 Flash 内容进行缩放以填充指定区域,不会发生扭曲,它会使应用程序保持原始高宽比,但有可能会进行一些裁剪。
“Exactfit”使整个 Flash 内容显示在指定区域中,但不尝试保持原始高宽比。可能会发生扭曲。
如果忽略此属性(而且 width 和 height 值是百分比),则它的默认值是 showall。
align 属性
值: Default | L | R | T | B
模板变量:$HA
说明: 指定 object、embed 和 img 标记的 align 值,并确定如何在浏览器窗口内放置 Flash SWF 文件。
“默认”使应用程序在浏览器窗口内居中显示,如果浏览器窗口小于应用程序,则会裁剪边缘。
L、R、T 和 B 让应用程序分别沿着浏览器窗口的左、右、上、下边缘对齐,
这两天在更新网站相册的时候,遇到了网页编码的问题.整个网站都是采用utf-8编码,但是相册是后来客,原本使用的相册分类页面是gb2312的,所以相册的分类在显示的时候就成了乱码,用英文虽然可以,但是并不是所有的人都喜欢英文,所以这个问题必需得解决.仔细琢磨了一番,问题就在生成网页文件时使用的方法,FSO不能设置编码的格式,搜遍了整个脚本帮助文档也没有答案,唉,只能用adodb.stream了,这组件有一个charset属性值,可以指定生成页面使用utf-8或者是gb2312,这下问题解决了.现在把代码帖出来,希望对大家有帮助.
'————————————————-
'函数名称:ReadFile
'作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件
'—————————————————-
function ReadFile(FileUrl,CharSet)
dim str
set stm=server.CreateObject(“adodb.stream”)
stm.Type=2 '以本模式读取
stm.mode=3
stm.charset=CharSet
stm.open
stm.loadfromfile server.MapPath(FileUrl)
str=stm.readtext
stm.Close
set stm=nothing
ReadFromTextFile=str
end function
'————————————————-
'函数名称:WriteToFile
'作用:利用AdoDb.Stream对象来写入UTF-8格式的文本文件
'参数:FileUrl-文件相对路径;Str-文件内容;CharSet-编码格式(utf-8,gb2312…..)
'—————————————————-
function WriteToFile (FileUrl,byval Str,CharSet)
set stm=server.CreateObject(“adodb.stream”)
stm.Type=2 '以本模式读取
stm.mode=3
stm.charset=CharSet
stm.open
stm.WriteText str
stm.SaveToFile server.MapPath(FileUrl),2
stm.flush
stm.Close
set stm=nothing
end function