存档

2009年5月 的存档

将IE收藏夹里面的文章导入到CyberArticle

2009年5月30日 魏 拾俊 5 条评论

附件是一段js脚本,解压缩执行后,可以将IE收藏夹内容导入到CyberArticle里面。

注意:本脚本只能在CyberArticle 5.3或者更高的版本中使用。

下面是这段代码说明。

//导入一个目录下面的所有链接,采用递归
//bookguid: 目标书籍GUID
//folderpath: 导入后文章的路径
//objCABookBuilder: CyberArticle.CABookBuilderAutomationApp对象
//objShell: WSript.Shell对象
//objFileSystem: Scripting.FileSystemObject对象
//path: 需要导入的路径
//
function ImportPath(bookguid, folderpath, objCABookBuilder, objShell, objFileSystem, path)
{
    //获得路径对象
    var objFolder = objFileSystem.GetFolder(path);
    //枚举文件
    var objSubfilesEnum = new Enumerator(objFolder.Files);
    for (; !objSubfilesEnum.atEnd(); objSubfilesEnum.moveNext())
    {
        //获得文件
        var filename = objSubfilesEnum.item();
        var objFile = objFileSystem.GetFile(filename);
        //
        var strFileTitle = objFile.Name;
        var pos = strFileTitle.indexOf(“.url”);
        if (-1 != pos)
        {
            //如果是.url文件
            strFileTitle = strFileTitle.substring(0, pos);
            //objShell.Popup(“file name is: ” + filename);
            //
            try
            {
                var objShortcut = objShell.CreateShortcut(filename);
                //
                //objShell.Popup(objShortcut.TargetPath);
                var url = objShortcut.TargetPath;
                //
                //添加一个url进行下载
                objCABookBuilder.AddJob(bookguid, folderpath, url, strFileTitle, “Default”, 0, true, true, 0);
            }
            catch (e)
            {
            }
        }
    }
    //枚举子文件夹
    var objSubfoldersEnum = new Enumerator(objFolder.SubFolders);
    for (; !objSubfoldersEnum.atEnd(); objSubfoldersEnum.moveNext())
    {
        var subfolder = objSubfoldersEnum.item();
        //
        var objSubFolder = objFileSystem.GetFolder(subfolder);
        var subfoldername = objSubFolder.Name;
        //导入子文件夹
        ImportPath(bookguid, folderpath + “\\” + subfoldername, objCABookBuilder, objShell, objFileSystem, subfolder);
    }
}
//CyberArticle.CAAutomationApp对象
var objCA = new ActiveXObject(“CyberArticle.CAAutomationApp”);
//获得选中的节点
var objSelectedNodes = objCA.SelectedNodes;
if (objSelectedNodes != null && objSelectedNodes.Count > 0)
{
    var objShell = new ActiveXObject(“WScript.Shell”);
    //
    //获得第一个选中的节点
    var objSelectedNode = objSelectedNodes.Item(0);
    if (objSelectedNode.Type != 0)
        objSelectedNode = objSelectedNode.ParentNode;
    //
    //获得书籍信息和相应的目录路径
    var strBookGUID = objSelectedNode.Book.GUID;
    var folderpath = objSelectedNode.GetTitlePath(true, false);
    //objShell.Popup(“title path: ” + folderpath);
    //创建BookBuilder对象,用来下载链接
    var objCABookBuilder = new ActiveXObject(“CyberArticle.CABookBuilderAutomationApp”);
    //获得收藏夹路径
    var strPath = objShell.SpecialFolders(“Favorites”);
    strPath = objShell.ExpandEnvironmentStrings(strPath);
    //objShell.Popup(strPath);
    //获得文件夹对象
    var objFileSystem = new ActiveXObject(“Scripting.FileSystemObject”);
    //导入文件夹
    ImportPath(strBookGUID, folderpath, objCABookBuilder, objShell, objFileSystem, strPath);
    //开始下载
    objCABookBuilder.StartDownload();
}

从这一段简单的代码可以看出,CyberArticle的扩展性是非常强大和易用的。只要您稍微具有一定的脚本编程能力,就可以很容易的对CyberArticle进行扩展。

下个CyberArticle版本,将会包含这段脚本,并制作成一个CyberArticle宏,添加到CyberArticle程序里面,方便使用。

 

 

分类: CyberArticle 标签:

CyberArticle和Live Writer的比较

2009年5月29日 魏 拾俊 3 条评论

CyberArticle并不是一个专用的Blog离线发布软件,但是因为包含了WordPress发布插件,使得CyberArticle可以方便的用于发布WordPress文章。 

Live Writer是一个专用的Blog离线发布软件,支持主流的Blog系统。 

严格来说,这两个软件并不是一类软件。但是针对WordPress系统,使二者有了一定程度的可比性。下面作一个比较简单的比较。(仅仅针对WordPress)。 

文章编辑功能

离线发布,最重要的就是文章编辑。下面是编辑文章的界面: 

CyberArticle

Live Writer

下面是一个比较

功能
CyberArticle
Live Writer
编辑
撤销,重做,剪切,复职,粘贴
选择性粘贴
纯文本,HTML,图片,RTF
纯文本,HTML
查找,替换
查找,替换
查找
 
 
 
插入
常规
图像,表格,日期,时间,水平线,批量插入图片,书签(页内链接),链接,返回到顶部链接,索引,HTML组件。
链接,图片,表格,相册。
特色功能
插入HTML组件:可以插入大量预定以好的HTML代码,例如各种各样的表格,文字等等。
批量插入图片:可以批量插入本地图片。
书签:可以插入业内链接,实现页内跳转。
插入相册,可以从网络相册插入图片。
格式
常规
样式,字体名称,字体大小,字体样式,字体颜色,段落格式
样式,字体名称,字体大小,字体样式,字体颜色,段落格式
特色功能
字体大小,支持多种字体大小:8,9,10,11,12,14,16,18,20,24,36,72
仅支持8,10,12,14,18,24,36。不支持中文常用的9号字
表格功能
 
常规
插入表格,插入行,列,删除行,列
插入表格,插入行,列,删除行,列
特色功能
合并单元格, 差分单元格,设置单元格行/列跨距。
移动航/列
其它功能
 
宏功能,DOM橡皮擦,标记文字,模板功能,HTML标记导航,荧光笔,源代码着色功能
拼写检查,字数统计

从上面的表格中可以看到,CyberArticle的编辑功能要更多一些。但是在测试过程中,发现Live Writer粘贴HTML格式的时候,无法显示HTML里面包含的本地图片。这是一个比较大的问题。

Blog发布功能

二者都可以直接发布文章。

CyberArticle在发布文章的时候,会出现对话框,要求输入服务器信息(如果已经发布过,则保存相关信息),文章类型(页面还是Blog),分类。

Live Writer在新建文章的时候,就需要确定是页面还是Blog。编辑文章的时候,则要求直接选择分类。点击发布按钮后,直接发布。

二者没有什么本质区别,Live Writer还支持设置Tag。但是测试中,无法正常使用,也无法显示Tag。CyberArticle的Blog无法直接支持Tag。

文章管理功能

CyberArticle是知识管理软件,所有的文章,都保存在本地。即文章发布后,本地和Blog系统,各自都有自己的文章。如果以后需要重新编辑文章,直接在本地编辑后,重新发布上去,就可以将在线的文章更新成新的文章。也可以强制选择,发布成新的文章。

Live Writer的文章发布之前,会当成草稿保存在本地。发布后,从草稿中删除。如果以后需要重新编辑,则需要从在线的文章读取。因此Live Writer文章在本地,并没有备份。

CyberArticle还拥有更多的管理功能,例如批量替换,批量文章处理,制作电子书等等功能。

结论

如果您的文章,大部分都是原创内容,那么用Live Writer或者CyberArticle,区别并不是很大。但是因为CyberArticle会把文章保存在本地,因此对于您的数据安全性,会有更好的保证。即使以后您从一个Blog转移到另外一个Blog,或者您的Blog服务商突然停止服务,您的文章也都保存在本地,完全不用担心这个问题。

如果您的文章大部分都是从网络上复制而来的,那么用CyberArticle,无疑会让您更加得心应手。因为CyberArticle本身就是一个知识管理软件,致力于网络知识的获得和管理。而在这方面,可以说是独一无二的。

总之,如果您使用了WordPress作为您的Blog系统,那么用CyberArticle作为离线发布工具,可以说是最好的选择。

分类: CyberArticle, WordPress 标签:

Visual C++的STL和CComPtr的一个问题

2009年5月28日 魏 拾俊 没有评论

今天在编写IFilter插件的时候,发现一个STL和CComPtr问题(Visual C++ / Visual Studio 2008):

我定义了一个数组:

std::vector<CComPtr<ICANode> > arrayNodes;

当我对这个数组排序的时候:

std::sort(arrayNodes.begin(), arrayNodes.end(), CompareNodeByID);

出现了一个断言失败,位于atlcomcli.h第149行,如下:

    //The assert on operator& usually indicates a bug. If this is really
    //what is needed, however, take the address of the p member explicitly.
    T** operator&() throw()
    {
        ATLASSERT(p==NULL);
        return &p;
    }

在这个函数之前,这里有一个说明,ATL的作者认为通常来说,对于一个CComPtr对象获得地址,一般是用来给这个对象赋予一个新的值,就像QueryInterface那样。所以,在这个时候,p本身的值,应该是空。

然后经过跟踪,发现是std::sort这里在调用&操作符(<utility>文件):

template<class _Ty> inline
    void swap(_Ty& _Left, _Ty& _Right)
    {    // exchange values stored at _Left and _Right
    if (&_Left != &_Right)
        {    // different, worth swapping
        _Ty _Tmp = _Left;
        _Left = _Right;
        _Right = _Tmp;
        }
    }

排序的时候要交换元素得值,这里先比较两个元素的地址,是否相同。如果相同,认为是同一个元素,就不交换了。在这里调用&操作符,用于比较元素的地址。这里的元素,就是CComPtr对象。而在这里,对象本身的值,当然不为空,结果就出现了断言失败。

目前没有找到好的解决办法。好在Release版本,不会出现问题。

分类: Visual C++ 标签:

CyberArticle Google桌面搜索的插件 (安装版本)

2009年5月28日 魏 拾俊 7 条评论

安装该插件后,Google桌面搜索(Google Desktop Search) 就可以搜索到 CyberArticle书籍文件。

使用

直接下载附件安装即可。Google桌面搜索服务会自动对CyberArticle 书籍(xbook文件)进行索引。索引建立后,就可以进行全文检索了。

注意

  • 不在书籍列表里面的书籍,不会建立索引。
  • 远程书籍,不会建立索引。
  • 被加密的文章,不会建立索引
  • 在安装该插件前,请首先安装Google桌面搜索软件。

 

 

分类: CyberArticle 标签:

CyberArticle IFilter插件,用于Windows Search (安装版本)

2009年5月28日 魏 拾俊 1 条评论

CyberArticle IFilter插件,可以用于Windows Search服务(Vista或者更高系统),Windows索引服务,MSN桌面搜索,IIS,SharePoint Portal Server, Windows SharePoint Services, Site Server,Exchange Server,SQL Server及其它基于微软搜索技术之上的产品。

使用

直接下载附件安装即可。上述服务会自动对CyberArticle 书籍(xbook文件)进行索引。索引建立后,就可以进行全文检索了。

注意

  • 不在书籍列表里面的书籍,不会建立索引。
  • 远程书籍,不会建立索引。
  • 被加密的文章,不会建立索引

 

 

分类: CyberArticle 标签:

CyberArticle 5.3 测试版本 2009-5-26更新

2009年5月26日 魏 拾俊 没有评论

1:增加了版本控制功能。可以保留文章的修改记录,允许恢复任意历史记录。

使用:首先,在书籍属性里面,启用版本控制功能。

每天只保留一个副本,可以减少保留的记录。否则,对于频繁编辑某些文章的话,可能会有很多的历史记录被保存,造成大量的数据冗余。如果您使用了编辑文章的时候,自动保存功能,则最好选中这个选项,以避免生成太多的历史数据。

以后再编辑文章的时候,程序会自动保留以前的数据。

您可以在文章属性里面,找到历史记录:

可以选择查看任意一个历史记录,也可以选择任意一个历史记录,恢复成当前的状态。

目前版本控制功能还比较简单,但是对于需要保留修改痕迹的朋友来说,还是很方便的。而且这个功能,对于多人使用MySQL/SQLServer书籍的朋友,会更有用一些,可以保留每一个人的修改记录。

2:添加快捷方式类型的附件的时候,可以选择是否将目录替换成环境变量。

这样当您重新安装系统,或者更换电脑,快捷方式仍然会生效。

同时,还增加了两个特殊的环境变量:

%BookFolder%:当前书籍所在的文件夹。

%MyBooksFolder%:默认的书籍保存文件夹。通常是我的文档\My Books。

这样,您可以将一些附件,例如mp3/视频等等文件,放在书籍文件夹或者子文件夹里面。即使书籍更改了目录,或者更换电脑,都可以保持正确的链接。

3:书签功能的改进。

从这个版本开始,您可以放心使用书签功能,而不用担心因为系统重新安装,或者更换电脑等原因,导致书签实效。只要您的书籍在书籍列表内,就可以正确找到相应的文章。这样,您可以利用书签功能,作为一个混合的分类功能:不同的书籍,可以在一起分类;同一篇文章,可以在不同的分类下面。

下载CyberArticle 5.3测试版本

下载该版本

分类: CyberArticle 标签:

卡巴斯基2009引起CyberArticle频繁出错的解决办法

2009年5月26日 魏 拾俊 没有评论

今天从一个用户那里发现一个问题,现象是CyberArticle保存网页的时候,经常会出现ExecCommand.exe出错,或者经常出现操作必须使用一个可更新的查询这样的对话框,如下图:

ExecCommand.exe出错:

无法保存网页

重新启动系统后,上面的问题可以缓解,但是过一段时间后,还是会出现。

操作系统:Vista

杀毒软件:卡巴斯基2009

经过摸索,发现是杀毒软件引起的。解决办法如下:

1:打开卡巴斯基:

 

点击右上角的设置按钮:

 

选择威胁和排除,切换到信任程序:

 

点击添加按钮,将CyberArticle安装目录下面的CyberArticle.exe, ExecCommand.exe这两个程序,添加到信任程序里面。

依次点击确定按钮,保存设置。

然后重新启动系统,问题获得解决。

原因猜想:因为CyberArticle书籍文件都很大,通常都在几百M甚至更大,在保存网页的时候,杀毒软件会自动扫描书籍文件,但是这个过程可能会很长,导致CyberArticle出错。

因此将CyberArticle程序添加到信任程序里面,避免杀毒软件检查xbook文件,也就避免了这个问题。

如果您遇到了类似的问题,也可以这样处理一下。对于其他杀毒软件,操作方法类似。

 

分类: CyberArticle 标签:

共享一个小程序,用来翻译部分程序的界面语言

2009年5月23日 魏 拾俊 没有评论

帮朋友写的一个小程序,可以用来翻译一些程序的界面,例如CyberArticle,Inno Setup的语言。

使用这个程序翻译,要满足以下的条件:

1、界面语言是文本文件,例如CyberArticle的translations下面的ini文件,Inno Setup的ISL文件。

2、界面的定义和值通过等号或者空格/TAB来分割,例如CyberArticle的语言,通过等号分割。

程序界面:

选择分割符,然后分别打开两个文件,选择一行,直接翻译就可以了。

翻译后,选择保存。

注意:

所有打开,保存的文件,都必须是unicode格式。如果不是,请首先转换。

 

 

分类: 工具软件 标签:

Windows 7 一些不方便的地方

2009年5月23日 魏 拾俊 4 条评论

1:超级任务栏和IE:

任务栏里面的IE。如果只开了一个IE,但是有多个Tab。这个时候图标仍然显示是多个窗口。用鼠标点击图标,不会直接显示IE窗口,而是预览每一个Tab,要求选择一个Tab。实际上是多此一举,因为无论我选择哪一个Tab,它都会把整个IE显示在前面。唯一的好处,就是可以预览每一个Tab内容。

2:资源管理器:

能够设置Favorites和Library非常方便。但是这两个和目录树使用同一个Tree,结果如果Tree比较长,Favorites和Library就会因为滚动的原因,给隐藏了。最好就是能够一直显示这两个列表。

还有就是左边Tree和右边列表是否同步显示。

  • 默认不同步,则如果想从左边Tree找一个同级临近的目录,就会比较麻烦(我不习惯从地址栏选择,因为信息更少)。
  • 如果同步,对于比较深的目录,会导致Favorites和Library被隐藏(滚动)。而且如果我从Favorites里面选择了一个目录,它也会自动展开整个目录,从而导致Favorites和Library再次被隐藏。

因此,解决的办法,就是让Favorites和Library固定显示,不要放在目录Tree里面。

 

分类: Windows 7 标签:

用于Google 桌面搜索的CyberArticle插件

2009年5月23日 魏 拾俊 3 条评论

安装该插件后,Google桌面搜索(Google Desktop Search) 就可以搜索到 CyberArticle书籍文件。

安装步骤:

1:下载附件。

2:解压缩附件到任意目录,例如D:\CyberArticle

3:运行命令行程序:开始菜单 -> 运行 -> cmd

4:在命令行窗口输入 regsvr32 “D:\CyberArticle\CyberArticleGDSPlugin.dll”

5:注册过程,会有两个Google警告窗口,都要选择“确定”。

6:正常情况下,会出现注册成功对话框。

使用:等到Google桌面搜索对CyberArticle书籍建立索引后,您就可以对CyberArticle书籍进行搜索了。点击搜索结果,会自动调用CyberArticle进行浏览。

注意

  • 不在书籍列表里面的书籍,不会建立索引。
  • 远程书籍,不会建立索引。
  • 被加密的文章,不会建立索引

 

 

分类: CyberArticle 标签: