升C小调狂想曲

<递归的忧伤>
posts - 10, comments - 71, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

朋友,可曾想过把所有的事情都放到一个TextBox里面去做?今天我就做了一个,理论上可以干任何事情的TextBox。嘿嘿。

实习的日子实在是挺忙,CNScript还停留在语法分析的阶段,一直没时间去打开那个大工程(其实是有时间的,可惜零碎的时间都被我拿来写这篇文章要讲的这些小东西了)。

我们在浏览网页时,或许会突然想打开某个程序,比如计算器,算点东西;又可能想打开Photoshop,处理一下网页上的某个图片;又可能想打开记事本,摘抄一些文字。这时我们不得不回到桌面,或者打开那个硕大的开始菜单,在程序里面去找我们想要的东西。

有的时候,我们还会重复做一些机械的动作,比如读一个文件,检查是否有变动,比如检查某个文件夹,看是否有新文件。当然,你可以写一个程序来完成这个操作,但是有时候这种操作你觉得最多就重复个两三次,你不会愿意去打开Visual Studio创建一个工程。

归结本质,我们就是想要一个随叫随到的,可以有一定能力帮我们做事情的东西。但是如果这个东西太大,会挡住我们正在浏览的网页或者正在处理的文档,那就不好了。所以我就想到了一个Topmost的TextBox,放在屏幕的顶端,也就是一般窗口的标题栏那里,这样子不会挡住你要做的事情,而且在需要的时候 只要鼠标一移过去就可以用了。

就是这样一个TextBox

OK,有了这样一个TextBox,“随叫随到”已经完成了。但是我们需要这个TextBox有一定能力,比如我想运行一个程序,它能帮我运行,我想搜索一个词语,他能帮我搜索,我想打开一个URL,他能帮我打开,我想计算一个表达式,他能帮我计算。但是人的需求是无限的,我们随时会有新的需要,他不可能拥有所有的功能,那么如何让他有能力做到任何事情呢?我们需要一种很强悍的可扩展性。玩过魔兽世界的朋友们一定知道,魔兽世界提供一个插件机制,玩家可以为游戏写插件,来丰富游戏的功能,现在已经有千千万万的魔兽世界插件在各大网站上提供下载了,正是因为如此,魔兽世界才拥有着这么强的可扩展性。所以,我们这个TextBox也要用插件机制来驱动。在C#的Microsoft.CSharp名字空间中有一个C#的编译器,可以将C#代码编译成托管组件,直接生成在内存中,以反射的方式来运行,这个机制为我们快速实现一个插件系统提供了可能。因此我选用了.net framework 3.5,用Windows Presentation Foundation来做界面,用C#来当我的脚本语言。

俗话说,一不做,二不休,既然提供了插件,那我主程序除了运行插件以外就什么都不做了。运行了插件之后,将界面所有控件的控制权都交给插件,插件爱干啥就干啥去。主程序就是一个Window,Window上是一个StackPanel,Panel里面是一个TextBox,仅此而已。当然,插件可以向StackPanel里面加东西,以丰富这个条条的外观内容。

 

可执行程序的环境如下所示:(BoxSharp是这个程序的名字)

image

其中BoxSharpCore,BoxSharpRunPath,BoxSharpScripting,BoxSharpSearch是我刚写好的几个插件。

BoxSharpCore插件提供了最基本的/exit命令,用于退出程序。此插件还控制了一些外观方面的细节,包括自动记住TextBox上次退出时的位置,大小,用于下次启动时恢复外观。当输入在文本框内的命令是一个正确命令时,会出现功能提示。

image

BoxSharpRunPath插件提供了打开文件夹,打开网址,运行命令的功能。

image image image

BoxSharpScripting插件提供了直接运行C#程序的功能。这个功能可以顺便当作表达式计算器用,有时候有些运算(尤其是带N个括号的复杂表达式)想立刻得出结果的,就不用打开计算器了。Print函数是用于将参数值直接写在TextBox里面的。

image

image

image

也可以直接用/script命令打开一个窗口进行复杂的编程。

image

BoxSharpSearch插件是提供Web搜索功能的,我们可以通过配置文件来配置搜索引擎,插件启动时会自动检测配置项的。

image

image

我有时间的话,完全可以写更多的插件,比如自动检测电子邮件,收发邮件,比如滚动播放新闻,比如自动搜新歌下载试听,比如日历,日程安排,约会提示,闹钟,这些都可以作为插件写到里面去。而且,如果,我是说如果,如果很多用户在用这个TextBox的话,他们可以共享他们自己写的插件,将彼此的BoxSharp功能丰富。

好吧,说到底了,.net framework 3.5能办到的,这个TextBox就能办到,但是你估计不会为了计算一个表达式而打开Visual Studio建工程的。这就是TextBox的魅力所在了,HOHO~

Feedback

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-09 23:08 by 陈梓瀚(vczh)
暴走……

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-09 23:18 by RedNax
好想法。
不过感觉Launchy( http://www.launchy.net/ )已经基本实现了。
虽然没有跑c#script的能力,不过要加一个应该也不难。

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-09 23:24 by 陈坤
@RedNax
看了一下,launchy好漂亮。。。口水啊。。。
他也有插件机制哦。。。貌似很不错的样子,我要向他学习了。不过他的插件好像不太彻底,并没有把整个程序的界面交给插件。这样的话我想在程序主界面上显示一个滚动的新闻,他就无法实现了哦。。。

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-09 23:28 by 陈梓瀚(vczh)
一个月了啊,你的script啊,继续暴走

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-09 23:55 by 空明流转
我用python也行的啊。

# re: 命令的痴狂---将整个世界装进一个TextBox中![未登录]  回复  更多评论   

2008-09-10 08:44 by daniel
创意不错,支持!

有点 PowerShell 的意思,加了一个 TextBox 貌似方便了一些!

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-10 09:19 by kenzo
非常好的想法!

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-10 09:34 by 沈臻豪(foxtail)
比以前那个又多了不少功能哇!软件在进化。

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-10 09:51 by 陈坤
用.net framework还有一个好处就是他这个类库比较庞大,写插件的人可以非常轻松的创建一个新窗口,放几个文本框或按钮在里面,轻松的利用WPF来布局,还可以轻松的响应这些控件的事件,而且.net framework在网络,数据库,文本处理等等N多方面都有支持哦。

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2008-09-10 11:31 by 土仔
灰常不错!支持这种精神!

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2009-09-04 22:46 by whspecial
怎么觉得和百度最近提出的框计算有点神似

# re: 命令的痴狂---将整个世界装进一个TextBox中!  回复  更多评论   

2014-05-14 23:33 by 求知·~
很想知道你这个怎么做的。想学习下。。可以请教下么QQ200844914~

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理