星期六, 十二月 22, 2007
罗马数字的表示方法
II - 2 duo
III - 3 tres
IV - 4 quattuor
V - 5 quinque
VI - 6 sex
VII - 7 septem
VIII - 8 octo
IX - 9 novem
X - 10 decem
XI - 11 undecim
XII - 12 duodecim
XIII - 13 tresdecim
XIV - 14 quattuordecim
XV - 15 quindecim
XVI - 16 sedecim
XVII - 17 septendecim
XVIII - 18 duodeviginti
XIX - 19 undeviginti
XX - 20 viginti
XXI - 21 viginti unus
XXII - 22 viginti duo
XXVIII - 28 duodetriginta
XXIX - 29 undetriginta
XXX - 30 triginta
XL - 40 quadraginta
L - 50 quinquaginta
1~10: I II III IV V VI VII VIII IX X
11~20: XI XII XIII XIV XV XVI XVII XVIII XIX XX
21~30: XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX
31~40: XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL
41~50: XLI XLII XLIII XLIV XLV XLVI XLVII XLVII XLIX L
其中,I 为1
V为5
X为10
L为50
星期五, 十二月 21, 2007
Hibernate的数据库事务处理
1. 介绍数据库事务、事务隔离级别、悲观锁、乐观锁等概念。
2.数据库ACID特征:
Atomic(原子性):指整个数据库事务是不可分割的工作单元。
Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
Durability(持久性):指的是只要事务成功结束,它对数据库所作的更新就必须永久保存下来。
3.数据库系统支持两种事务模式:
自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。
4.MySQL中数据库表分为3种类型:INNODB、BDB和MyISAM,其中MyISAM不支持数据库事务。MySQL中create table 语句默认为MyISAM类型。
5.对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类:
A.第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
B.脏读:一个事务读到另一个事务为提交的更新数据。
C.虚读:一个事务读到另一个事务已提交的新插入的数据。
D.不可重复读:一个事务读到另一个事务已提交的更新数据。
E.第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。
6.数据库系统提供了四种事务隔离级别供用户选择:
A.Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。
B.Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。
C.Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。
D.Read Uncommitted(读未提交数据):一个事务在执行过程中可以拷打其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以有优先考虑把数据库系统的隔离级别设为Read Commited,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场 合,可以由应用程序采用悲观锁或乐观锁来控制。
7.当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类:
A.悲观锁:指在应用程序中显示的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。
B.乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。
8.悲观锁有两种实现方式:
A.在应用程序中显示指定采用数据库系统的独占所来锁定数据资源。SQL语句:select ... for update,在Hibernate中使用get,load时如session.get(Account.class,new Long(1),LockMode,UPGRADE)
B.在数据库表中增加一个表明记录状态的LOCK字段,当它取值为“Y”时,表示该记录已经被某个事务锁定,如果为“N”,表明该记录处于空闲状态,事务可以访问它。增加锁标记字段就可以实现。
9.利用Hibernate的版本控制来实现乐观锁
乐观锁是由程序提供的一种机制,这种机制既能保证多个事务并发访问数据,又能防止第二类丢失更新问题。
在应用程序中可以利用Hibernate提供的版本控制功能来视线乐观锁,OR映射文件中的
星期三, 十二月 19, 2007
VBA.Vbscript的定时器timer.任务安排功能的实现
Application.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
因为可以有许多的任务,所以默认的索引任务的唯一key,就是该任务开始的时间。就是:EarliestTime,如果想可以控制一个任务,必须保留下来开始任务的时间。
vba中需要申明一个全局的public变量来保存,
例子:
Public RunWhen As Double
找一个地方调用下面的方法就可以了。
sub msgMovie
RunWhen = Now + DateTime.TimeValue("00:00:05")
Application.OnTime RunWhen, "msgMovie"
end sub
如果要停止这个任务,需要调用以下方法:
sub stopTime()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:="msgMovie", Schedule:=False
end Sub
VBA/Vbscript 如何彻底关闭一个UserForm实例
当点击close按钮的时候,往往是调用me.hide方法来隐藏。单这样不能完全清楚当前
实例,当再次调用me.show的时候,只是将该窗口重新显示。
所以,如果需要在隐藏窗口的时候动态修改了内容,当再次显示的时候,
想显示出来的时候,必须加入unload me代码
如下:
Private Sub okbutton_Click()
aboutForm.Hide
Unload Me
End Sub
星期一, 十一月 19, 2007
Mathematica 6 帮助搜索没有反应
星期五, 十一月 09, 2007
配置Jboss web 虚拟目录
deploy/jboss-web.deployer/server.xml
加入下面类似的红色代码行。
<Host name="localhost"
autoDeploy="false" deployOnStartup="false" deployXML="false"
configClass="org.jboss.web.tomcat.security.config.JBossContextConfig"
>
......
<context path="/help" docbase="/home/jb/jboss/server/mrp_guide" debug="0" reloadable="true">
</host >
星期五, 十月 26, 2007
网络Vbscript函数库大全
不过现在还不太清楚如何在一个vbscript调用另外一个vbscript文件里的函数呢?
需要研究一下
星期二, 十月 23, 2007
Sqlite3 3.5.1 如何读取汉字?
当进入管理界面通过.read sql.txt运行的命令或insert into插入的汉字,sqlite3认为是"合格"的
UTF-8字符串。
所以需要,使用UltraEdit之类的软件,首先把sql.text转换为标准的utf-8的编码,然后再用.read读取
在powershell读取sqlite.net的数据库代码:
1.首先需要建立一个数据库,名字叫szsk.db3,只要在sqlite3.exe 后面跟随数据库名就可以了。
sqlite3.exe szsk.db3 ,然后敲入.quit推出,就发现szsk.db3已经被建立了。
sqlite3.exe可以从www.sqlite.org下载最新的window 版本。
把System.Data.SQLite.dll文件放在当前目录下.
SQLITE.NET 2.0 下载地址: http://sourceforge.net/projects/sqlite-dotnet2
cls
$global:sdb="$pwd\szsk.db3"
$global:url="$pwd\System.Data.SQLite.dll"
$createTable=@"
CREATE TABLE IF NOT EXISTS DoubleBall (
id integer primary key AUTOINCREMENT,
_Year varchar(4),
_Month varchar(2),
_Day varchar(2),
_Term varchar(3),
_N1 varchar(2),
_N2 varchar(2),
_N3 varchar(2),
_N4 varchar(2),
_N5 varchar(2),
_N6 varchar(2),
_Blue varhcar(2)
)
"@
$dropit= "drop table doubleball"
$command="";
trap [exception]
{
write-host "Exception"
}
function initdb
{
[void][system.reflection.Assembly]::LoadFile($url)
if ((test-path $sdb) -eq $FALSE)
{
$global:conn=new-object System.Data.SQLite.SQLiteConnection("data source="+$sdb+";Version=3;New=TRUE;")
}else
{
$global:conn=new-object System.Data.SQLite.SQLiteConnection("data source="+$sdb+";Version=3;New=false;")
}
}
function getDBConnection
{
$conn=new-object System.Data.SQLite.SQLiteConnection("data source="+$sdb+";Version=3;New=false;")
}
initdb
$command=new-object System.Data.SQLite.SQLiteCommand
if($args.count -eq 0)
{
return $conn
}else
{
$sql="select * from stocklist where stockCode='" + $args[0]+".sz'"
$command.CommandText =$sql
$command.Connection=$conn
$conn.open()
$dataReader =$command.ExecuteReader()
$script:cnName=$args[0]
while($dataReader.Read() )
{
$script:cnName $dataReader.GetString(1)
}
$dataReader.close()
$conn.close()
return $cnName
}
星期五, 十月 19, 2007
Vbscript 实现 cls命令
Set WshShell = CreateObject("wscript.shell")
WshShell.SendKeys "%( )+E+P{ENTER}CLS{ENTER}{TAB}",True
Wscript.Sleep 5000
但是这个代码有一个问题就是键盘缓冲区是在当前VBS执行完成后,才被发送到当前cmd
窗口,因此是一种后script方式,不是希望在执行其他vbscript之前清空的方式。
经过努力,发现没有其他办法实现。
星期三, 十月 17, 2007
如何在vbscript/cscript 中调用.dll
必须是通过regsvr32 可以注册的dll才能在vbscript中被调用,应为createobject必须是 ActiveObject dll,如果是标准的函数库,则无法使用。必须包装成Activexobject
2..NET Dll
必须通过 regasm注册后,就可以在vbscript中使用了?
regasm System.Data.SQLite.DLL /tlb:System.Data.SQLite.tlb /codebas
星期三, 十月 10, 2007
Powershell .ps1 如何得到返回的对象?
其他命令的输出需要同管道|out-null,来回避。
比如下面:
[system.reflection.Assembly]::LoadFrom($url) |out-null
$conn=new-object System.Data.SQLite.SQLiteConnection("data source="+$sdb+";Version=3;New=TRUE;")
如果想返回一个connection object
就在ps1文件的最后一行写明
$conn就可以了。
星期一, 十月 08, 2007
PowerShell如何处理HTMLDocument Object
HTMLDocument对象。
但是速度上同同样的VBS代码比感觉差太多。所以始终想使用"HTMLFILE"来处理HTML Document.
最终通过get-member发现了 在PowerShell里使用的IHTMLDocument2_write方法可以用来初始化HTMLDocument对象内容。
如下代码,可以在POWERSHELL里使用了。
$htmlDoc= New-Object -com "HTMLFILE"
$page = "<html><body>this is a test</body></html>"
$htmlDoc.IHTMLDocument2_write($page)
$htmlDoc.close
如何在PowerShell调用Dll文件。
[system.reflection.Assembly]::LoadFrom("dll所在绝对路径");
但是传统的非.NET生成的Dll库如何使用呢?
比较复杂,基本可以按照下列语句来使用:
$dir="C:\\curl-7.16.4\\FTCTRLPRO3.dll"
$ctor = [Runtime.InteropServices.DllImportAttribute].GetConstructor([string])
$attr = New-Object Reflection.Emit.CustomAttributeBuilder $ctor, $dir
这只能简单载入Dll,如果想使用Dll的具体的函数,可以参看如下文章:
http://www.leeholmes.com/blog/ManagingINIFilesWithPowerShell.aspx
##############################
##
## Invoke-WindowsApi.ps1
##
## From PowerShell Cookbook (O'Reilly)
## by Lee Holmes (http://www.leeholmes.com/guide)
##
## Invoke a native Windows API
##
## ie:
##
## ## Prepare the parameter
## CreateHardLink function
## $parameterTypes = [string],
## $parameters = [string]
##
## ## Call the CreateHardLink
## $result = Invoke-WindowsApi
## $parameterTypes
##
##############################
param(
[string] $dllName,
[Type] $returnType,
[string] $methodName,
[ Type[]] $parameterTypes,
[Object[]] $parameters
)
## Begin to build the dynamic
$domain = [AppDomain]::CurrentDomain
$name = New-Object Reflection.AssemblyName 'PInvokeAssembly'
$assembly = $domain.DefineDynamicAssembly( $name, 'Run')
$type = $module.DefineType('PInvokeType', "Public,BeforeFieldInit")
## Go through all of the
## we clone the user's inputs
## the P/Invoke call.
$inputParameters = @()
$refParameters = @()
for($counter = 1; $counter -le $parameterTypes.Length; $counter++)
{
## If an item is a PSReference
## wants an [out] parameter.
if($parameterTypes[$counter - 1] -eq [Ref])
{
## Remember which parameters
$refParameters += $counter
## On the cloned array, we
## .Net reference type that
## and the value with the
$parameterTypes[ $counter - 1] =
$parameters[$counter - 1 ].Value.GetType().MakeByRefType
$inputParameters += $parameters[$counter - 1].Value
}
else
{
## Otherwise, just add their
## input array.
$inputParameters += $parameters[$counter - 1]
}
}
## Define the actual P/Invoke
## attribute for any parameters
## parameters.
$method = $type.DefineMethod( $methodName, 'Public,HideBySig,Static
$returnType, $parameterTypes )
foreach($refParameter in $refParameters)
{
}
## Apply the P/Invoke construct
$ctor = [Runtime.InteropServices.DllImportAttribute ].GetConstructor([string])
$attr = New-Object Reflection.Emit.CustomAttribute
$method.SetCustomAttribute($attr)
## Create the temporary type,
$realType = $type.CreateType()
$inputParameters)
## Finally, go through all of
## values of the PSReference
foreach($refParameter in $refParameters)
{
$parameters[$refParameter - 1].Value = $inputParameters[$refParameter - 1]
}
星期五, 十月 05, 2007
Akashic records
阿 克夏的概念起源于印度。在婆罗门教的文献中,“阿克夏”被描述为“宇宙的精神—物质”,它包括了所有的存在与发展。与之类似的“梵”(婆罗门教与印度教的 主神之一,为创造之神,亦指终生之本)在实质上通常被视作非个人的、无法识别的最高宇宙原理,万物来源于它,万物又回归于它。它非实体、非物质、非先天而 又永恒存续,无始无终。按照古老的印度学说,梵“能够穿透一切,赋予至高无上的天神或是小到极点的矿物原子以生机。”古印度秘密学说最后明确指出,“阿克 夏就是一切创造物的起源于回归之地”,阿克夏“比一切万物都更古老”,简直就是“最后的终点”。阿克夏就是世间万物的根源(荒耶宗莲竭尽全力所追求的,想 必就是这个东西了);而阿克夏记录则使得任何时刻——包括过去、现在和未来——所发生的任何事情都不致归于遗忘之中,它记录了一切的信息。
当 然在客观上,没有确切的证据能证明这样一种所谓的“宇宙记忆”确实存在,或者证明这个世界上从一开始曾经发生的一切都被记录了下来。但若仅仅因此就认为阿 克夏记录是不存在的,同样不能令人信服。即使是现代,这种现象也能得到共鸣和认同,只是换了一个完全不同的名字:形态发生场。
剑桥大学的 生化学家鲁伯特·谢尔德雷克在其著作《创造性的宇宙》中写道,形态发生场能够摆脱时间和空间发挥作用。具体地说,如果一个生物种类的成员获得了一种新的行 为,那么它自己的形态发生场会由此改变。只要这种新的行为在足够长的时间里得到了坚持,物种成员之间就会形成一种相互影响,进而影响整个物种。实际的例子 是:一只老鼠一旦学会了在一明一暗的信号下告到黄油,其他老鼠就会越来越快地掌握这个方法。直到最后,所有的老鼠——即便不是由最初的那只生出来的,也不 曾与它有过接触——都学会了这种行为。
按照谢尔德雷克的观点,自然是具有“记忆”的,我们通常视作自然法则的东西只不过是“习惯”。自然存在与“习惯”也就是“行为模式”之中。根据这一构想,自然界中的每一类事物都必须按照它那一类的“集体记忆”内容来行事,从有生命的事物到无生命的物质都是如此。
调试.NET错误工具
Dll 函数查看工具
才寻找到了一些Dll函数查看器。
都挺不错的。
DLL Export Viewer
http://www.nirsoft.net/utils/dll_export_viewer.html
国产的。
http://www.onlinedown.net/soft/17471.htm
星期四, 十月 04, 2007
在Powershell里访问Mysql 5.0 数据库
下载地址:http://www.mysql.org/downloads/connector/net/5.0.html
然后编写如下代码。
[void][system.reflection.Assembly]::LoadFrom("D:\mysql\MySQL Connector Net 5.0.8.1\Binaries\.NET 2.0\MySQL.Data.dll")
$myconnection = New-Object MySql.Data.MySqlClient.MySqlConnection
$myconnection.ConnectionString = "server=localhost;user id=root;password=root;database=mrpII;pooling=false"
$myconnection.Open()
$mycommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$mycommand.Connection = $myconnection
$mycommand.CommandText = "SELECT * from MRP_BOM"
$adapter = new-object MySql.Data.MySqlClient.MySqlDataAdapter
$adapter.SelectCommand = $mycommand
$ds = new-object System.Data.DataSet
$adapter.Fill($ds)
$myconnection.close()
$ds.Tables[0] |Format-Table #非常Cool的输出效果,如下图
真是cool毙了。
如何传递一个参数到cmdlet?
一下只写明增强版本的cmdlet程序,注册的snapin没有变化。
HelloWorld.cs
在PS下通过 get-helloworld,一个接一个输入所有名称,回车表示输入结束。
或者通过get-helloworld ("William wang","Peter Zhang","李华") 来直接得到结果.
using System;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Get, "HelloWorld", SupportsShouldProcess = true)]
public class HelloWorld : PSCmdlet
{
// An array is used to support the following scenario:
[Parameter(
Position = 0,
ValueFromPipeline = true,
ValueFromPipelineByPropertyName = true,
Mandatory = true,
HelpMessage = "恭贺的名字清单")]
[ValidateNotNullOrEmpty]
public string[] FullName
{
get { return fullName; }
set {fullName = value; }
}
private string[] fullName;
// Called when cmdlet is invoked.
protected override void BeginProcessing()
{
// You could open a database connection here for example.
base.BeginProcessing();
}
// Called when we have pipeline input.
protected override void ProcessRecord()
{
// this.Name could be null in BeginProcessing (no parameters passed)
// but could be filled when ProcessRecord gets called (parameters from pipeline)
try
{
if(this.fullName==null)
{
WriteObject("fullName is null");
}else
{
foreach (string item in this.fullName)
{
WriteObject("Hello World!"+item);
}
}
}catch(Exception)
{
WriteObject("excetpin");
}
}
// Called after every record has been processed.
protected override void EndProcessing()
{
base.EndProcessing();
}
// Called when the user hits CTRL+C
protected override void StopProcessing()
{
base.StopProcessing();
}
}
编写Powershell的HelloWorld的例子,开始编写cmdlet第一步
编译一个以C#语言编写的cmdlet需要的开发环境,可以参看:
http://msdn2.microsoft.com/en-us/library/ms714644.aspx
首先要确认安装了.NET 2.0 Framework的SDK包含csc.exe c#的命令行编译软件。
如果安装成功了.net 2.0 framework SDK,可以在一下目录发现:
C:\WINDOWS\Microsoft.NET\Framework 发现所有安装的.NET Framework的目录。
.Net framework SDK 3.0是在.NET 2.0 SDK的基础上增加了一些新的特性完成的。
所以.NET 3.0自身不带有csc.exe编译软件。
C:\WINDOWS\Microsoft.NET\Framework的典型目录如下。
<dir> v1.0.3705
<dir> v1.1.4322
<dir> v2.0.50727 csc.exe所在目录
<dir> v3.0
其次需要Powershell SDK的安装,如果安装成功可以发现如下目录。
C:\Program Files\Reference Assemblies\Microsoft 发现powershell目录
包含一些.dll 库.
C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0
2006-09-28 15:49 139,264 Microsoft.PowerShell.Commands.Management.dll
2006-09-28 15:49 294,912 Microsoft.PowerShell.Commands.Utility.dll
2006-09-28 15:49 200,704 Microsoft.PowerShell.ConsoleHost.dll
2006-09-28 15:49 65,536 Microsoft.PowerShell.Security.dll
2006-09-28 15:49 1,564,672 System.Management.Automation.dll
软后编写 用来编译C#的Powershell批处理文件,需要包含命令行编译C#代码的一些参考库
cscc.bat包含内容:
set PS_HOME="C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0"
csc.exe /reference:%PS_HOME%\Microsoft.PowerShell.Commands.Management.dll,%PS_HOME%\Microsoft.PowerShell.Commands.Utility.dll,%PS_HOME%\Microsoft.PowerShell.ConsoleHost.dll,%PS_HOME%\Microsoft.PowerShell.Security.dll,%PS_HOME%\System.Management.Automation.dll /t:library %1 %2 %3
%1 %2 %3 代表 C#的代码文件.cs文件。
编写HelloWorld的cmdlet步骤。
1.首先编写cmdlet或pscmdlet的子类:
HelloWorld.cs:
using System;
using System.Management.Automation;
[Cmdlet(VerbsCommon.Get, "HelloWorld", SupportsShouldProcess = true)]
public class HelloWorld : PSCmdlet
{
// Called when cmdlet is invoked.
protected override void BeginProcessing()
{
// You could open a database connection here for example.
base.BeginProcessing();
}
// Called when we have pipeline input.
protected override void ProcessRecord()
{
// this.Name could be null in BeginProcessing (no parameters passed)
// but could be filled when ProcessRecord gets called (parameters from pipeline)
try
{
WriteObject("Hello World!");
}catch(Exception)
{
}
}
// Called after every record has been processed.
protected override void EndProcessing()
{
base.EndProcessing();
}
// Called when the user hits CTRL+C
protected override void StopProcessing()
{
base.StopProcessing();
}
}
2.再编写一个Snapin的注册类。
HelloWorldSnapin.cs
using System;
using System.ComponentModel;
using System.Management.Automation;
[RunInstaller(true)]
public class HelloWorldSnapIn : PSSnapIn
{
public override string Name
{
get { return "HelloWorldSnapIn"; }
}
public override string Vendor
{
get { return "William Wang"; }
}
public override string Description
{
get { return "This Windows PowerShell snap-in contains the Get-HelloWorld cmdlet."; }
}
}
3.编译:
set PS_HOME="C:\Program Files\Reference Assemblies\Microsoft\WindowsPowerShell\v1.0"
csc.exe /reference:%PS_HOME%\Microsoft.PowerShell.Commands.Management.dll,%PS_HOME%\Microsoft.PowerShell.Commands.Utility.dll,%PS_HOME%\Microsoft.PowerShell.ConsoleHost.dll,%PS_HOME%\Microsoft.PowerShell.Security.dll,%PS_HOME%\System.Management.Automation.dll /t:library HelloWorld*.cs
得到 HelloWorld.dll文件,然后安装
InstallUtil.exe HelloWorld.dll得到如下成功message:
正在运行事务处理安装。
正在开始安装的“安装”阶段。
查看日志文件的内容以获得 C:\curl-7.16.4\helloworld.dll 程序集的进度。
该文件位于 C:\curl-7.16.4\helloworld.InstallLog。
正在安装程序集“C:\curl-7.16.4\helloworld.dll”。
受影响的参数是:
logtoconsole =
assemblypath = C:\curl-7.16.4\helloworld.dll
logfile = C:\curl-7.16.4\helloworld.InstallLog
“安装”阶段已成功完成,正在开始“提交”阶段。
查看日志文件的内容以获得 C:\curl-7.16.4\helloworld.dll 程序集的进度。
该文件位于 C:\curl-7.16.4\helloworld.InstallLog。
正在提交程序集“C:\curl-7.16.4\helloworld.dll”。
受影响的参数是:
logtoconsole =
assemblypath = C:\curl-7.16.4\helloworld.dll
logfile = C:\curl-7.16.4\helloworld.InstallLog
“提交”阶段已成功完成。
4.然后在powershell里注册这个cmdlet
add-pssnapin helloworldsnapin
如果成功,没有任何提示。
5.运行get-helloworld
得到 hello world!的提示信息。
表明最简单的Hello World cmdlet成功了。
星期四, 九月 27, 2007
如何在Powershell中解析HTMLDocument
使用标准的XMLDocument会出现语法检查错误。
必须使用mshtml.dll包含的标准HTMLDocumentClass.
标准的vbscript:代码
set htmlDoc= createobject("HTMLFILE")
page = "<html><body>this is a test</body></html>"
htmlDoc.write(page)
htmlDoc.close
对应的POWSERShell代码为:
$htmlDoc= New-Object -com "HTMLFILE"
$page = "<html><body>this is a test</body></html>"
$htmlDoc.write($page) #出错代码,出现type mismatch错误.
$htmlDoc.close
具体的原因看网络上的解释,似乎是DOM包装的时候,有些接口没有实现造成的问题。
所以目前找到的方法是使用IE控件,代码如下:
$IE= New-Object -com "InternetExplorer.Application"
$IE.navigate('about:blank')##必须的代码行
$IE.Resizable=$True
$IE.StatusBar=$True
$IE.AddressBar=$False
$IE.MenuBar=$False
$IE.Toolbar=$False
while ($IE.busy)
{
sleep -milliseconds 50
}
$page = "<html><body>this is a test</body></html>"
$IE.documetn.body.innerHTML=$page#该代码在IE7以下的IE中不能工作必须换成下面的代码
$IE.document.write( $page) #或者替换为 $oIE.document.IHTMLDocument2_write($html)
出现的错误为:
Property 'innerHTML:' cannot be found on this object; make sure it exists
and is settable.
如何得到Windows所有安装的COM控件?
1.gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
2.get-wmiobject Win32_COMClass
星期三, 九月 26, 2007
PowerShell 特殊语法符号。@
@() | 空数组 |
$hash = @{ } | 创建空哈希表 |
@(Get-Alias;Get-Process) | 执行其中的两条命令,然后在数组中返回结果 |
字符串常量:
@”
这是“here string”,其中可包含任意字符(包括回车和引号)。将计算表达式 $(2+2)
”@
@’
带单引号的“here string”不计算表达式。 ‘@
星期五, 九月 21, 2007
PowerShell 错误处理及查看DLL方法
可以在任何function或代码文件中申明如下语句:
trap [Exception]
{
write-host ("trapped " + $_.Exception.GetType().Name); continue;
}
星期四, 九月 20, 2007
Regular Express 表达删除一个空行(blank line)
所谓的空行就是一行只包含一些空格,制表符或其他不可见的符号的文本行。
在Vbscript的RegExp 对象,支持RegExpOption.Multiline的属性,可以轻易删除。
但其他各种语言,perl,vbscript等等,没有简单的方法。
regularE="^$"可以匹配一个只包含回车换行的空行
但通过十六进制来看很多文本往往发现很多包含000D 00 0D 00 0A之类的空行。
非常难以处理。
标准的删除一个包含很多回车换行的文本的规则表达为
regularE="[\r\n]+\s*[\r\n]+"
这里是一个详细的解释:
http://www.ultraedit.com/index.php?name=Forums&file=viewtopic&t=2777
但这种方法会删除一个所有的回车换行。
所以必须单独编写方法来出来。
星期三, 九月 19, 2007
Microsoft PowerShell 1,0 定制提示符号的简单技巧
星期一, 九月 17, 2007
如何通过VBA来让Excel显示HTML代码?
如果需要更加灵活的方式,目前只能通过把 HTML代码复制到系统粘贴板,然后再让EXCEL
粘帖来实现。
首先在Excel里 ,按下Alt+F11打开宏编写。
然后在菜单工具-->引用。。里找到 Microsoft Forms 2.0 object library ,启用之,
然后书写一下代码,则可以实现了Excel的HTML渲染。
Dim MyDataObj As New DataObject
MyDataObj.SetText "
"One Two
MyDataObj.PutInClipboard '复制到clipboard
然后再调用
ActiveSheet.Paste
则可以显示HTML效果了。
另外一种通过 HTMLProject 来完成,把HTML页面直接传送过去
ActiveWorkbook.HTMLProject.HTMLProjectItems(stockCode).Text = resl
ActiveWorkbook.HTMLProject.RefreshProject
星期五, 九月 14, 2007
几种语言如何设置跳过盗链的检查
URL url=new URL("url地址");
然后
Connection conn = url.OpenConnection();
加入下面这行:
conn.addRequestProperty("REFERER", "http://www.mydomain.com");
然后后面再用conn.readLine等就可以避免盗链检查了。
命令行curl访问一个网站避免盗链检查的方式:
curl -x 191.168.1.1:1688 -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -D cookie0001.txt --proxytunnel -o test.html -e "http://quote.地址" %1
Vbscript设置跳过盗链检查。
一个注意事项:在HTML中,设置不起作用,这可能是防止钓鱼网站的原因。
代码如下:
Set httpObj = CreateObject("Microsoft.XmlHttp")
httpObj.open "GET", url, FALSE
'跳过盗链检查
httpObj.setRequestHeader "REFERER", "http://quote.eastmoney.com"
httpObj.send ""
星期五, 八月 24, 2007
关于Javascript的this关键词的解释.
function checkme()
{
alert(this.value);
}
此时this代表 是当前聚焦的可视HTML元素(focus element).比如一个下拉框,输入框等等。
最严密的说法如下:
http://www.quirksmode.org/js/this.html
In JavaScript
this
always refers to the “owner” of the function we're executing, or rather, to the object that a function is a method of. When we define our faithful function doSomething()
in a page, its owner is the page, or rather, the window
object (or global object) of JavaScript. An onclick
property, though, is owned by the HTML element it belongs to.
星期四, 八月 09, 2007
如何编写自己的dojo widget(物件)?
包括什么使用以下方法来申明:
dojo.setModulePrefix('wang', '../wang');
dojo.registerModulePath('wang', '../wang');
dojo.widget.manager.registerWidgetPackage('wang.widget');
但会出现很多的问题和错误。
这篇文章的方法是最简单的
http://www.alexatnet.com/node/14
简单来说步骤如下:
1.建立一个目录
假设目前js目录结构如下:
/js/dojo-0.4.3-ajax
/js /wang //你自己定做的dojo widget 库
/js/wang/widget/ Memo.html, Memo.css
那么你需要建立的声明文件Menu.js保存在/js目录下.
2.建立新的widget声明文件Menu.js
Menu.js内容如下:
dojo.widget.defineWidget(
// widget name and class
"wang.widget.Memo",
// superclass
dojo.widget.HtmlWidget,
// properties and methods
{
// parameters
title: "Note",
// settings
isContainer: true,
templatePath: dojo.uri.dojoUri("../wang/widget/Memo.html"),
//注意:这个目录是相对于dojo.js所在目录的相对目录.
templateCssPath: dojo.uri.dojoUri("../wang/widget/Memo.css"),
// callbacks
onClick: function(evt){
this.destroy();
}
}
);
3.在HTML里应用声明
<script src="js/Memo.js"></script>
4.通过dojoType来使用新的widget
<div dojoType="Memo" title="你好世界">
你好吗?
</div>
效果如下:
星期三, 八月 08, 2007
Javascript的匿名函数和JSON。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
JSON建构于两种结构:
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
- object //用两个大花括号把对象数组包含起来。
- {}
{ members } - members //成员
- pair
pair , members - pair //标准的名字:值
- string : value
- array //数组用两个中括号包含起来的
- []
[ elements ] - elements
- value
value , elements - value
- string
number
object
array
true
false
null
<script>
var arr
var str="[['line 1','line 2'],['line 1','line 2']]";
eval("arr="+str);
alert(arr[0][0]);
</script>
星期二, 七月 31, 2007
如何避免JSP文件产生空格或空白行(whitespace)
所以,避免JSP文件产生空白行的办法,就是需要把所有的<%%>连起来书写,在jsp文件中减少手动的回车换行,就可以避免JSP文件产生空白行了。
比如.
<%@ page contentType="text/xml;" %><%@page import="com..dao.Mrp_Workload_Capacity_Calculate_DAO"%><%@ page import="com.sun.rowset.CachedRowSetImpl"%><%@ page import="com.util.DBUtil"%><%...%>
星期五, 七月 27, 2007
DHMTL Grid Paginal 语法.
<div id="gridbox" width="100%" height="250px" style="background-color:white;overflow:hidden"></div>//显示grid数据地方
<div id="recinfoArea" style="width:100%;"></div>//用来显示导航条的地方
<script>
mygrid = new dhtmlXGridObject('gridbox');
...
//should be called before init()
mygrid.enablePagingWT(true,10,3,"recinfoArea");
...
mygrid.init();
mygrid.setXMLAutoLoading("dynscroll.php");//如果想每次点击下一页的时候从服务器读取数据,必须要加入这一行,通过url参数rowsLoaded=N 在服务器段来获取下一页的数据
mygrid.loadXML("dynscroll.xml");//this sample uses static loading
</script>
星期三, 七月 25, 2007
Javascript匿名function(或无名unnamed)的申明
var greet=function(){....}//可以有参数,或无参数。
调用的方法:greet();如果有参数,需要再调用的时候加入参数.
对象常量 Object Literals:
var car = {myCar:(function(){return "WIlliam";}), getCar: "Honda", special: "Sales"}或另一个常用语法
调用:
document.write(car.myCar()); // WIlliam
document.write(car.getCar); // Honda
document.write(car.special); // Sales
对象常量同匿名function 组合,可以写出非常复杂的表达。
var car = {myCar:(function(){return "WIlliam";}), getCar: "Honda", special: "Sales"}
document.write(car.myCar); // WIlliam
document.write(car.getCar); // Honda
document.write(car.special); // Toyota
var Person=function(){}
Person.prototype.name="William"
Person.prototype.age=17
who=new Person();
document.write(who.name);
Javascript的匿名function 的语法主要设计到Javascript如何对面向对象的支持。
var Person=function(){}
Person.prototype = {
initialize: function(name) {
this.name = name;
},
greet: (function() {
return("Hello from " + this.name+"");
})
};
who=new Person();
who.initialize("William");
alert(who.greet());
一个比较好的地址:http://blogs.sun.com/sundararajan/entry/java_javascript_and_jython
星期五, 七月 20, 2007
dojo TabContainer Javascript控制
<div id="CalendarPart" dojoType="ContentPane" href="1.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Calendar</b>"></div>
<div id="vocationPart" dojoType="ContentPane" href="2.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Holiday</b>"></div>
<div id="WorkCenterPart" dojoType="ContentPane" href="3.jsp" refreshOnShow="true" executeScripts="true" contentCache="false" label="<b>Work Center</b>"></div>
</div>
每个contentPane内容的改变,典型使用以下Script
<script>
var obj =dojo.widget.byId("WorkCenterPart");
//alert(obj);
obj.setUrl("");//新的动态内容url
</script>
星期二, 七月 17, 2007
WINDOWS XP Dr Watson Log file.
c:\Documents and Settings\All Users\Application Data\Microsoft\Dr Watson\drwtsn32.log
星期日, 七月 15, 2007
飞狐 运行VBS公式出现错误处理。
"脚本引擎请求位置对象信息:"Wscript"",脚本引擎请求位置对象信息:"JSProxy"
解决方法:
进入windows目录下,再进入system32目录下,运行:
regsvr32 jscript.dll
regsvr32 vbscript.dll
再启动飞狐软件或股道软件就可以了。
星期五, 七月 13, 2007
XML CDATA,强大的万能标签。
CDATA
Everything inside a CDATA section is ignored by the parser.
If your text contains a lot of "<" or "&" characters - as program code often does - the XML element can be defined as a CDATA section.
A CDATA section starts with "<![CDATA[" and ends with "]]>":
|
In the example above, everything inside the CDATA section is ignored by the parser.
Notes on CDATA sections:
A CDATA section cannot contain the string "]]>", therefore, nested CDATA sections are not allowed.
Also make sure there are no spaces or line breaks inside the "]]>" string.
星期四, 七月 05, 2007
动态创建复杂form之二
formname.document.createElement("form");
document.body.appendChild(formname); //关键语句,否则submit()方法没有实际动作
//add other node
txtObj = document.createElement("input");
//1
txtObj.setAttribute("type","hidden");
txtObj.setAttribute("name","username");
txtObj.setAttribute("value","William");
formname.appendChild(txtObj);
//2
txtObj2 = document.createElement("input");
txtObj2.setAttribute("type","hidden");
txtObj2.setAttribute("name","actionTarget");
txtObj2.setAttribute("value","VacationSetting");
formname.appendChild(txtObj2);
formname.action = target;
formname.method="post";
formname.submit();
方法二:
var f = document.createElement(’form’);
document.body.appendChild(f); //关键语句,否则submit()方法没有实际动作
f.style.display = ‘none’; this.parentNode.appendChild(f);
var h = document.createElement(’input’);
h.type = ‘hidden’; h.name = ‘act’; h.value = ‘admin’;
f.appendChild(h);
var h2 = document.createElement(’input’);
h2.type = ‘hidden’; h2.name = ’setadmin’; h2.value = ‘delcat’;
f.appendChild(h2);
f.method = ‘POST’;
f.action = ‘index.php’;
f.submit();
return false
方法三:
function doIt()
{
formname = document.createElement("form");
document.body.appendChild(formname);
//add other node
txtObj = document.createElement("");
formname.appendChild(txtObj);
//2
txtObj2 = document.createElement("");
formname.appendChild(txtObj2);
//3
txtObj3 = document.createElement("");
formname.appendChild(txtObj3);
formname.action = target;
formname.method="POST";
formname.submit();
}
星期三, 七月 04, 2007
用Javascript和DOM完全动态建立一个Form
Form Element Interfa
1.建立一个提交的Form// Create a form
var f = document.createElement("form");
// Add it to the document body
document.body.appendChild(f);
// Add action and method attributes
f.action = "/cgi-bin/some.cgi";
f.method = "POST"
// Call the form's submit method
f.submit();
星期二, 六月 26, 2007
绝妙招数,JSP页面不能刷新
的方式来刷新jsp页面,浏览器只是从cache里调用,并没有从服务器段刷新新的页面
如何能通过Javascript来手动刷新jsp页面呢。
秘密在于要加入以下一句
window.returnValue=0;
星期一, 六月 11, 2007
星期一, 五月 14, 2007
Motorola E6 修改开机画面。
[THEME_CONFIG_TABLE]
PowerOffScreen = /usr/data_resource/animation/Moto2.gif
PowerOnScreen = /usr/data_resource/animation/Moto1.gif
WallPaper = /usr/data_resource/picture/Home_Wallpaper6.gif
这个图片是240x320 256色的大小GIF89 gif图片。
你可以把图片放到你的SD卡的某个目录上,然后修改这个文件里的目录
Motorola E6 解除手机四个按钮自定义冻结
发现:
[static]
nextEvent = 0
shortcut_1 = fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490
shortcut_1_freeze = 1
shortcut_1_icon_name = Home_CMCC_Service_B.gif
shortcut_2 = 95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40
shortcut_2_freeze = 1
这样就可以在设置里的主屏定义里修改快捷方式了。
Motorola E6的一些说明
在网络上找到这个公司网址及文档的说明地址:http://www.mvista.com/product_datasheets.php
不过没有关于里面系统管理的说明,图形是基于MontaVista Graphics,主要基于两个X window Management:ICEWM和 matchBox,开发UI主要是基于GTK+,
奇怪的是其Motolora的目录里包含:QTDownload的目录,
奇怪。
现在像解决的是,如何定义新的系统分类或修改。
通过USBLAN telnet方式或samba方式 \\169.254.142.2\system 的方式来访问Motorola E6 手机,也不知道修改那个文件。
有人说是修改:\\169.254.142.2\system\ezx_user\download\appwrite\am\UserMenuTree
但因为队X window的配置文件不熟悉,看起来如看天书啊
[2a58c0d6-05c6-45aa-8938-63059d41a4e9]
Items = cb839c8f-72c3-42ac-bf17-b01080cb5705;e8c83dac-db4e-4fb5-98a6-61de1998b277;b18dbbd2-503a-4442-9308-5575ee38c210;51f2cb88-3040-4f00-b66c-c4bb974e4d18;67dc1191-2928-4938-abce-1a73cb5ce490;3bb7f1b5-12bb-4b79-985b-96436e094256;48973844-3955-4323-b5a0-f69435a1dba0
[3bb7f1b5-12bb-4b79-985b-96436e094256]
Items = 5b608840-eb39-4d34-bfdb-8806436d140d;95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40;9faafa35-0688-4529-8310-04f215cb2d0c;ba63e2ca-089c-4a95-8e13-81522eed47a0;fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490;c4e5410b-c0fe-4889-8619-6bdce79f0e47;
[48973844-3955-4323-b5a0-f69435a1dba0]
Items = acd47a08-a135-72ed-9378-5054f598b326;
[51f2cb88-3040-4f00-b66c-c4bb974e4d18]
Items = 5af701f6-33e3-4fe6-b15e-b7ef7c986c74;0f0c629a-9524-4fc9-8429-6df7dedf394d;067a149d-00b4-4ba3-b839-11ab2dbd88c0;bacc9585-ae26-4cf9-8e72-fb520709b4b0;23723ec3-ab86-408a-86c0-f70ac6f5c153;c30158ae-e2a7-4d1c-9f6c-3b079c2f4c4e;6aff7618-c940-48d9-ad3b-3106d9a884c2;0b6c1459-2fbe-4b2e-95c9-a4f93762fa11
[67dc1191-2928-4938-abce-1a73cb5ce490]
Items = 18b62bb5-bd39-4397-9076-fe912a4b6dd0;8a2b9b37-83e7-a8d9-82cf-0bcbe2070002;8a2b9b37-83e7-a8d9-82cf-0bcbe2070001;b0fc7131-b9c1-d70c-82bb-c8893c8a78c2;b726141b-9a5c-1755-b2dd-47da885ae301;25a634e7-6fc5-d058-a2b9-3f6c70a9b430;278e9dbc-0e9b-bc69-8e44-039c62556527;;8a2b9b37-83e7-a8d9-82cf-0bcbe2070003
[b18dbbd2-503a-4442-9308-5575ee38c210]
Items = c1e0df66-11ef-4b33-bddb-0cbd13827312;5e558577-7be1-405a-a888-e65d20a2908a;4d690409-f29f-48f4-8967-48fc151b2272;6cd5ea93-d3e2-4cbd-ac46-9dad6ff62b46;5382eeae-3a6f-40ef-ac3a-6f85c4a7f87f;9667de53-e43e-47bd-96ff-89c06dc3cdbd
[cb839c8f-72c3-42ac-bf17-b01080cb5705]
Items = ce59717d-fb23-4b7c-8800-25ce613f4042;c30158ae-e2a7-4d1c-9f6c-3b079c2f4c4e;1e6b9963-24cc-41f8-bbee-a23ae761ff81;fc4eee73-2b5b-4ebd-b6dc-32dd62fbd490;5b608840-eb39-4d34-bfdb-8806436d140d;95ffa462-7e2f-49a9-9e6d-f8f63b2f3c40;ba63e2ca-089c-4a95-8e13-81522eed47a0;9faafa35-0688-4529-8310-04f215cb2d0c;c4e5410b-c0fe-4889-8619-6bdce79f0e47;9a4cdb74-34ec-415e-ba36-b8c2a35d0071;bb621a8f-c681-477f-9d15-9c4b53b37a3e;0b6c1459-2fbe-4b2e-95c9-a4f93762fa11;6aff7618-c940-48d9-ad3b-3106d9a884c2;c1e0df66-11ef-4b33-bddb-0cbd13827312;4d690409-f29f-48f4-8967-48fc151b2272;5e558577-7be1-405a-a888-e65d20a2908a;5382eeae-3a6f-40ef-ac3a-6f85c4a7f87f;5af701f6-33e3-4fe6-b15e-b7ef7c986c74;0f0c629a-9524-4fc9-8429-6df7dedf394d;9667de53-e43e-47bd-96ff-89c06dc3cdbd;067a149d-00b4-4ba3-b839-11ab2dbd88c0;bacc9585-ae26-4cf9-8e72-fb520709b4b0;23723ec3-ab86-408a-86c0-f70ac6f5c153;1758dab7-a240-4c66-bd01-0a78064c6f87;45e9c626-06be-40d0-a166-fd5b85471aa8;6cd5ea93-d3e2-4cbd-ac46-9dad6ff62b46;18b62bb5-bd39-4397-9076-fe912a4b6dd0;68aa0e99-9a59-302c-96bb-f4f08e7dd90e;474b7d54-abad-93a8-ad5a-11f9f2cc7ba0;f4fae70f-11d4-7006-8cf3-0f1bf2d6eee8;68898845-2628-5f45-9647-d819ece272a3;2c227485-1738-e3b5-94f6-4f88728cdf91;7b1c83d0-7a0c-df33-8766-21712ba02301;8daa06ee-0a83-8934-aed2-73b25af6bfe9;0869ee05-8a86-9bbc-b610-d7ee3abda81a;093e4d22-dad7-8c72-b4ed-d9e88fef9147;1178dc20-66d9-1597-a9f7-f81f8a83b1f4;13a750f6-fe43-d83a-b3b7-8a7fecebfa77;1a112744-bc68-4f43-886a-a5ed58083a6c;256120fb-a864-c6f4-a6a5-dc023e8ba313;25a634e7-6fc5-d058-a2b9-3f6c70a9b430;25af762a-dce9-9232-8a26-0864839f9b85;26022542-9c88-1ce5-8622-de6dc3823df6;2753bbbf-7530-b3c1-b01a-64b49bcdac8c;278e9dbc-0e9b-bc69-8e44-039c62556527;2864e07e-c7d3-15ef-bb78-ecf0576386a6;2cc4d208-40f8-1fba-8e3a-455d140a6be1;38c53039-21c0-d3f4-9934-00c3bfdca9f9;396b61f1-a203-dfa7-92d6-7dfea7067b9e;4c6d6a9b-920d-0ea6-9a58-d79d93afb1a6;5834b42c-7617-bc1b-bc98-c50a33af774c;62cdf98a-c79b-28e7-a958-d3f7d0caf1ab;6657920d-2c3f-c612-9285-0d0a3ccbb2f9;66fc461d-7a46-9591-997b-42d332fdf941;671dbcb5-16b5-9db3-9e78-45e9f42370bf;695c9824-e3ec-7e1b-9904-d4ef4955047a;6d1a0429-586d-ed7b-9fac-6d91b67116c5;758c8293-ad35-8a3e-8471-ceac85e362fd;78661e58-99f4-a0e7-ba8c-c9aededab5de;7b104f18-a878-dd59-b326-0389e37f086b;8ad75187-213f-dd21-8536-4e93aca03cb5;8ba4ab20-1dcb-e2b5-9f1a-e926b650f8d9;8db372ff-1b90-9239-87d6-1b9bbf4886de;96eb974f-4b54-3958-9b1f-1310189dc93b;9b9b7691-fce2-6d5e-b911-692e2236004f;9ec1bc67-7800-f7b1-aee4-30b357001f6e;a97aaa60-bf83-88a1-a7b1-33e59f73edc1;b0fc7131-b9c1-d70c-82bb-c8893c8a78c2;b5961de7-a547-3171-95a5-63a6487f5b97;b726141b-9a5c-1755-b2dd-47da885ae301;b997558a-f41b-8ce8-8e55-3b2faeed6466;bb5025f0-0079-c342-a36e-e2781257d195;c9d5d40c-bd73-482f-9fdc-15f060a20151;cefa0ab0-0dff-e12a-b497-70a399c0a512;d088d0f1-f39d-aeca-8777-acc35a80f0bc;dc9bc4ac-4482-036a-a651-d0f018889db5;de499d5a-7ffd-f091-8493-e408fc57814b;e8ac9283-7e6f-f665-81ef-78ed0d652eda;f36a0a48-5954-7063-9d55-e4aefe32211c;fb2dc9c7-2669-cbd4-a49b-a9aae2080555;acd47a08-a135-72ed-9378-5054f598b326;8a2b9b37-83e7-a8d9-82cf-0bcbe2070001;8a2b9b37-83e7-a8d9-82cf-0bcbe2070002;8a2b9b37-83e7-a8d9-82cf-0bcbe2070003
[e8c83dac-db4e-4fb5-98a6-61de1998b277]
Items = ce59717d-fb23-4b7c-8800-25ce613f4042;1e6b9963-24cc-41f8-bbee-a23ae761ff81;9a4cdb74-34ec-415e-ba36-b8c2a35d0071;1758dab7-a240-4c66-bd01-0a78064c6f87;bb621a8f-c681-477f-9d15-9c4b53b37a3e;45e9c626-06be-40d0-a166-fd5b85471aa8
星期三, 二月 07, 2007
Tips VBA office 热键的编写方法
VBA里面经常需要把一个热键(VBA里称为shortcutKey)赋予一个宏或一个菜单。
热键包括组合键盘比如ctrl或alt加上另外一个键来使用。
Ctrl在VBA里表示用^
Alt在VBA里表示用&
http://www.romanpress.com/Articles/Menus_R/Menus.htm
比如把一个热键赋予一个菜单项目.
Dim cbMainMenuBar As CommandBar
Dim iHelpMenu As Integer
Dim cbcCutomMenu As CommandBarControl
Set cbMainMenuBar = _
Application.CommandBars("Worksheet Menu Bar")
Set cbcCutomMenu = _
cbMainMenuBar.Controls.Add(Type:=msoControlPopup)
cbcCutomMenu.Caption = "&Q功能菜单" 'alt+q
星期六, 二月 03, 2007
Tips EXCEL VBA里如何增加菜单及菜单项目风格线
Sub AddMenus()
Dim cMenu1 As CommandBarControl
Dim cbMainMenuBar As CommandBar
Dim iHelpMenu As Integer
Dim cbcCutomMenu As CommandBarControl
Set cbMainMenuBar = _
Application.CommandBars("Worksheet Menu Bar")
Set cbcCutomMenu = _
cbMainMenuBar.Controls.Add(Type:=msoControlPopup)
cbcCutomMenu.Caption = "&Q功能菜单"
With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "简约方式"
.OnAction = "forcaseGS3"
End With
With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "简约方式MOD"
.OnAction = "forcaseGSMod3"
End With
With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
.Caption = "打印机设置"
.OnAction = "printerSetup"
.BeginGroup = True '在这个菜单前产生一个分割线
End With
End Sub
Sub DeleteMenu()
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("&Q功能菜单").Delete
On Error GoTo 0
End Sub
Private Sub Workbook_Activate()
AddMenus
End Sub
Private Sub Workbook_Deactivate()
DeleteMenu
End Sub
星期二, 一月 23, 2007
星期五, 一月 19, 2007
Tips,VBA里如何扩展一个文本框TextBox的的长度,超过255限制
因为VBA里TextBox对象通过程序操作,只能复制最多256个字符。但通过UI确可以操作基本上
没限制的字符操作,真是邪门。
最终发现程序实现,无限制文本框操作技巧
Dim ctl1 As Shape
datasheetName = "Sheet1"
MyStr ="有1千个字符"
On Error Resume Next'如果不存在,删除会出错
Sheets("Sheet1").Shapes("recommend").Delete
Set ctl1 = Sheets("Sheet1").Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 200, 450, 500)
ctl1.TextFrame.Characters.Text = left(MyStr,200)
ctl1.Name = "recommend"
'注意代码,perfect
For a = 1 To WorksheetFunction.Ceiling(Len(MyStr) / 200, 1)
ctl1.TextFrame.Characters((a * 200) + 1).Insert String:=Mid(MyStr, (a * 200) + 1, 200)
Next a
For Each ctl In Sheets(datasheetName).Shapes
Debug.Print TypeName(ctl) & " " & Left(ctl.Name, 8)
Next