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

    发表于 2009年05月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和Live Writer的比较

    发表于 2009年05月29日 魏 拾俊 1 条评论

    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作为离线发布工具,可以说是最好的选择。

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

    发表于 2009年05月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版本,不会出现问题。

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

    发表于 2009年05月28日 魏 拾俊 2 条评论

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

    使用

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

    注意

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

     

     

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

    发表于 2009年05月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 5.3 测试版本 2009-5-26更新

    发表于 2009年05月26日 魏 拾俊 没有评论

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

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

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

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

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

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

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

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

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

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

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

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

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

    3:书签功能的改进。

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

    下载CyberArticle 5.3测试版本

    下载该版本

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

    发表于 2009年05月26日 魏 拾俊 没有评论

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

    ExecCommand.exe出错:

    无法保存网页

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

    操作系统:Vista

    杀毒软件:卡巴斯基2009

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

    1:打开卡巴斯基:

     

    点击右上角的设置按钮:

     

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

     

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

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

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

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

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

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

     

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

    发表于 2009年05月23日 魏 拾俊 没有评论

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

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

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

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

    程序界面:

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

    翻译后,选择保存。

    注意:

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

     

     

  • Windows 7 一些不方便的地方

    发表于 2009年05月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里面。

     

  • 用于Google 桌面搜索的CyberArticle插件

    发表于 2009年05月23日 魏 拾俊 1 条评论

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

    安装步骤:

    1:下载附件。

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

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

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

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

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

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

    注意

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