BIT Google 3.0更新日志
=================================
1.增加悬浮窗,把您想要搜索的文本拖动到悬浮窗即可搜索,搜索时悬浮窗会自动变为红色
2.增加"搜索剪贴板"功能,即可搜索您刚刚复制的文本内容
3.增加天气预报小栏目,同步MSN的北京天气预报
4.主界面最小化时缩小到系统托盘,单击系统托盘图标或双击悬浮窗即可恢复主界面

http://www.felixwoo.com/wp-content/uploads/attachments/old/200492817266477.jpg

http://www.felixwoo.com/wp-content/uploads/attachments/old/2004928172614734.jpg

http://www.felixwoo.com/wp-content/uploads/attachments/old/2004928172621354.jpg

而完成以上所有的功能您都无需连接外网

BIT Google 2.0 更新日志
=================================
1.增加网页模式查看搜索结果
2.列表模式增加鼠标右键菜单,可以选择打开网页和复制地址
3.修改了一些小bug..

  BIT Google是专为北京理工大学校园网提供的Google搜索服务软件。使用该软件无需连接外网即可搜索Google。
  BIT Google每页显示10个搜索条目,单击条目可显示网页内容简介,双击直接打开网页。BIT Google全面支持Google的搜索表达式,如“中国+北京”、“水果-苹果”等等…
  这个软件是我第一个使用WebService的软件,实现方法就是在在校内的一台可以访问外网的服务器上架设了Google搜索的WebService,该WebService又调用了Google提供的WebService。校内的用户使用软件时远程调用校内的WebService,也就是说用校内的服务器做中转代理,从而实现了不连接外网进行Google的搜索。
  这个软件也是使用C#开发的,所以使用前需要先安装.NET Framework。

下载地址:www.felixwoo.com/download/BITGoogle.exe

http://www.felixwoo.com/wp-content/uploads/attachments/old/2004928172650486.jpg

1、添加了一个Windows窗体Form1,在Form1中添加了一个文本框textBox1
2、在textBox1的KeyDown()事件中加入了以下代码:
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ( e.KeyValue < 48 && e.KeyValue >57 ) //如果输入的字符是从 ‘0’ 到 ‘9’
{
//什么都不做
}
else
{
e.Handled=true; //如果输入的是非数字字符,则提前将这个事件结束掉,而不添加
MessageBox.Show( e.Handled.ToString() );
}
}
没写完,待续…
MSDN上的例子http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemwindowsformscontrolclasskeydowntopic.asp

[C#]
// Boolean flag used to determine when a character other than a number is entered.
private bool nonNumberEntered = false;

// Handle the KeyDown event to determine the type of character entered into the control.
private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
// Initialize the flag to false.
nonNumberEntered = false;

// Determine whether the keystroke is a number from the top of the keyboard.
if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
{
// Determine whether the keystroke is a number from the keypad.
if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
{
// Determine whether the keystroke is a backspace.
if(e.KeyCode != Keys.Back)
{
// A non-numerical keystroke was pressed.
// Set the flag to true and evaluate in KeyPress event.
nonNumberEntered = true;
}
}
}
}

// This event occurs after the KeyDown event and can be used to prevent
// characters from entering the control.
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
// Check for the flag being set in the KeyDown event.
if (nonNumberEntered == true)
{
// Stop the character from being entered into the control since it is non-numerical.
e.Handled = true;
}
}

  科学研究表明,人体有体力、情绪与智力三个周期,分别为23,28,33天。运行该软件输入生日后即可得出您处于体力、情绪与智力周期的哪一阶段,并预测您未来100天内的身体状态。
程序是用C#编写的,绘图使用的ZedGraph绘图组件。
下载地址:http://www.felixwoo.com/download/bodycycle.zip
/UploadFile/2004919215910946.jpg

经过了一个月的努力,FreeTalk终于算是正式发布了。这个网络电话本来是老师留的一个作业,其实网上有现成的C++写好的代码,不过为了学习C#我决定还是重新写一个。这一个月里,先是用了1/4的时间学习C#,又用了1/4的时间研究DirectX,最后1/2的时间就是开始编写代码和调试了。

要说学习编程是从小学5年级开始的,那时学的是Basic,用的是Apple II+的电脑(可不是现在的苹果,比286还差),后来初中学Pascal,不过都是Dos模式下的编程。高中转向网站制作和动画设计,就没怎么再接触编程了。虽然这个FreeTalk很简单,但却是我Windows窗体程序的处女作,应该算是我的电脑学习生涯的里程碑吧:)

FreeTalk是基于.Net环境下用C#编写的,语音的采集和播放用DirectX下的DirectSound实现。C#应该是现在最新的编程语言,他大大简化了编程的复杂度,又是基于.Net平台,因此可移植性也很好。比如用C#写网络传输不用建立麻烦的Socket对象,用UDPClient/TCPClient就可以很轻松的搞定,C#的开发效率恐怕Java望尘莫及啊……音频部分其实也可以用Windows API来实现,不过无论从功能还是可扩展行都不如DirectX,DirectX提供了一个完整的多媒体和游戏解决方案,包括DirectDraw,Direct3D,DirectSound,DirectShow等等。音频的采集和播放用DirectSound或DirectShow都可以,由于DirectX对流式数据的完美支持,使得音频的时时采集和播放能够很容易的实现。

在后续的开发过程中,我还打算对这个软件加以改进。一是增加音频压缩编码,这样能够更加节约带宽。二是采用DirectShow代替DirectSound以实现视频音频聊天。第三就就是增加中央目录服务器,可以让用户更方便的选择聊天对象……

回想整个开发过程,最难忘的就是查找资料,逛书店、搜Google、找ebook、混csdn……关于C#网络编程的资料确实不少,不过查找DirectX9 Managed的资料就像大海捞针,逛遍了海图也没发现一本相关的书籍。手头上只有DirectX SDK可以参考,又是英文的,所以感觉自己的英文水平提高了不少:)软件开发进度曾一度停滞在解决音频时时播放这个问题上,SDK中又没有详细介绍,最后很偶然的机会我在国外的一个BBS上看到了一个求助帖,其中是他一段错误的代码,而他正确的部分正是我需要的,我正确的部分也正是他需要的……:)

这一个月以来最要感谢的就是我的好朋友DigitalGhost,由于我是从对C#一窍不通开始学起,所以很多最基本的问题都解决不了,DigitalGhost给予了我很大的帮助和支持,还有从他那抢的两本书也让我受益匪浅。

在开发这个软件的过程中我也深刻的体会到,编写程序其实是很缺乏创造力的,我们只是在老美构建的程序世界中不断的Discovery而不是Invent,和使用他们早已准备好的资源。就算编写出再nb的程序,我们也只不过是IT民工罢了……

http://www.felixwoo.com/wp-content/uploads/attachments/old/20049132374998.jpg
  FreeTalk是一款基于.NET和DirectX的网络电话软件,使用C#和DirectSound技术开发。使用FreeTalk可以轻松实现点对点的网络语音聊天。非常感谢DigitalGhost 给予我的大力支持和帮助。

  FreeTalk是免安装的绿色软件,解压后运行FreeTalk.exe即可。由于该软件是基于.NET开发的,因此除了Windows2003以外的操作系统运行之前需要先安装.NET Framework(.net软件的运行平台)。

  由于本软件还很不成熟,在运行过程中难免出现问题,希望大家能及时到论坛反映情况,以便我能及时改进。

http://www.felixwoo.com/wp-content/uploads/attachments/old/200491323730129.jpg

使用说明:
1.首先确认已经连接好麦克风和耳机,并将Windows的录音输入选择为麦克风。
2.运行软件,输入对方的IP地址,点击开始等待对方。
3.待对方开始后即可进行语音聊天,并可用滑动条来调节耳机音量。
4.建议聊天时候将软件最小化这样能节约很多内存资源。

FreeTalk后续开发计划:
1.增加音频压缩和解压缩,提高音频质量
2.加入视频聊天功能
3.中央服务器提供目录服务,客户端可在用户在线目录列表中选择聊天(这样可以省去输入IP地址的麻烦)
4……(如果还有时间的话)

下载地址:
FreeTalk 1.0 http://www.felixwoo.com/download/freetalk.zip

using System;
using System.Text.RegularExpressions;
namespace bobomousecom.crm
{
///
/// Regexlib 的摘要说明。
///
public class Regexlib
{
public Regexlib()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

//搜索输入字符串并返回所有 href=“…”值
string DumpHrefs(String inputString)
{
Regex r;
Match m;
r = new Regex(“href\\s*=\\s*(?:\”(?<1>[^\"]*)\”|(?<1>\\S+))”,
RegexOptions.IgnoreCase|RegexOptions.Compiled);
for (m = r.Match(inputString); m.Success; m = m.NextMatch())
{
return(“Found href ” + m.Groups[1]);
}
}

//验证Email地址
bool IsValidEmail(string strIn)
{
// Return true if strIn is in valid e-mail format.
return Regex.IsMatch(strIn, @”^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$”);
}

//dd-mm-yy 的日期形式代替 mm/dd/yy 的日期形式。
string MDYToDMY(String input)
{
return Regex.Replace(input,”\\b(?\\d{1,2})/(?\\d{1,2})/(?\\d{2,4})\\b”,”${day}-${month}-${year}”);
}

//验证是否为小数
bool IsValidDecimal(string strIn)
{

return Regex.IsMatch(strIn,@”[0].\d{1,2}|[1]“);
}

//验证是否为电话号码
bool IsValidTel(string strIn)
{
return Regex.IsMatch(strIn,@”(\d+-)?(\d{4}-?\d{7}|\d{3}-?\d{8}|^\d{7,8})(-\d+)?”);
}

//验证年月日
bool IsValidDate(string strIn)
{
return Regex.IsMatch(strIn,@”^2\d{3}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|[1-2]\d|3[0-1])(?:0?[1-9]|1\d|2[0-3]):(?:0?[1-9]|[1-5]\d):(?:0?[1-9]|[1-5]\d)$”);
}

//验证后缀名
bool IsValidPostfix(string strIn)
{
return Regex.IsMatch(strIn,@”\.(?i:gif|jpg)$”);
}

//验证字符是否在4至12之间
bool IsValidByte(string strIn)
{
return Regex.IsMatch(strIn,@”^[a-z]{4,12}$”);
}

//验证IP
bool IsValidIp(string strIn)
{
return Regex.IsMatch(strIn,@”^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$”);
}
}
}

京ICP备05053527号
经过38次查询历时3.906秒终于生成了此页面
Powered by WordPress & Designed by Felix © 2008