2010年11月13日星期六

c#让程序只运行一个实例vs2010

C# winform窗体实现托盘和恢复窗体及相关操作
程序只能运行一个实例。
如果程序已经存在,且最小化,则还原那个程序。
如果程序已经存在,且不是最小化(最大化或正常状态)

在Main里给找到的已经存在的主窗口发送自定义消息,主窗口接收并处理。
这个可以。
要小心的是,如果已经运行的窗口被隐藏(比如放到系统托盘上),那么它Process.MainWindowHandle返回的句柄可能为空。
拿不到它的句柄,你就不能向它发窗口消息。

如何做转换呢?或者还有其他方法?
可以用命名事件来通知,而对于数量不多的参数,可以通过注册表来传递,详见例子。
// Program.cs 文件内容
using System;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Win32;
using System.Diagnostics;

namespace WindowsApplication1
{
static class Program
{
[STAThread]
static void Main()
{
// 尝试创建一个命名事件
bool createNew;
ProgramStarted = new EventWaitHandle(false, EventResetMode.AutoReset, "MyStartEvent", out createNew);

// 如果该命名事件已经存在(存在有前一个运行实例),则
if (!createNew)
{
// 先写一些数据到注册表中,以便传递给前一个运行实例
Registry.SetValue(@"HKEY_CURRENT_USER\Software\MyMy", "", DateTime.Now.ToLongTimeString());

// 发事件通知
ProgramStarted.Set();

// 等一小会以便前一个运行实例接到通知后恢复显示(也可以采用等待事件通知的方式)
Thread.Sleep(200);

// 将焦点转移到前一个实例
foreach (Process p in Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
{
if (p.MainWindowHandle != IntPtr.Zero)
{
SetForegroundWindow(p.MainWindowHandle);
}
}

// 就此退出第二个进程
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
public static EventWaitHandle ProgramStarted;

[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);
}
}
//Form1.cs 文件内容

using System;
using System.Windows.Forms;
using System.Threading;
using Microsoft.Win32;

namespace WindowsApplication1
{
public partial class Form1 : Form
{
NotifyIcon notifyIcon1 = new NotifyIcon();

public Form1()
{
//InitializeComponent();
this.Controls.Add(new TextBox());

this.notifyIcon1.Text = "Double click me to show window";
this.notifyIcon1.Icon = System.Drawing.SystemIcons.Question;
this.notifyIcon1.DoubleClick += OnNotifyIconDoubleClicked;

this.SizeChanged += OnSizeChanged;
ThreadPool.RegisterWaitForSingleObject(Program.ProgramStarted, OnProgramStarted, null, -1, false);
}

// 当最小化时,放到系统托盘。
void OnSizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.notifyIcon1.Visible = true;
this.Visible = false;
}
}

// 当双击托盘图标时,恢复窗口显示
void OnNotifyIconDoubleClicked(object sender, EventArgs e)
{
this.Visible = true;
this.notifyIcon1.Visible = false;
this.WindowState = FormWindowState.Normal;
}

// 当收到第二个进程的通知时,从注册表中获得传入的参数,并恢复窗口显示
void OnProgramStarted(object state, bool timeout)
{
if (this.InvokeRequired)
{
this.Invoke(new WaitOrTimerCallback(OnProgramStarted), state, timeout);
}
else
{
object param = Registry.GetValue(@"HKEY_CURRENT_USER\Software\MyMy", "", string.Empty);
this.Text = param as string;
OnNotifyIconDoubleClicked(this, EventArgs.Empty);
}
}
}
}

2010年11月8日星期一

中国.龙的发展--龙生九子

龙生的九子都是哪一些啊 都有多么性格啊!
龙的发展——龙生九子:
在明代,龙还被人们附会出了一个繁盛的家庭。龙在其形象形成史中,曾是由多面一,即汇集了多种怪异的兽
形象而演化为龙。然而并非所有的怪异兽像都百川归海,纳入了龙像之中,在与龙形象形成丶发展的同时,一
些怪异兽象也在发展,并且在某一方面糅合了龙的某一种形象特征。因而有人又把二者联系起来。在民间,很
久就流传着龙生九子的说法,但是九子为何物,并没有确切的记载,然而这一公案却由于“真龙天子”的好奇
而有了结果。据说一次早朝,明孝宗朱佑樘突然心血来潮,问以饱学着称的礼部尚书丶文渊阁大学士李东阳:
“朕闻龙生九子,九子各是何等名目?”李东阳仓卒间不能回答,退朝后左思右想,又向几名同僚询问,糅合
民间传说,七拼八凑,才拉出了一张清单,向皇帝交了差。按李东阳的清单,龙的九子是:
(虫+八)(虫+夏):性喜水,被雕成桥柱上的兽形;
嘲风:喜好冒险,因而人铸其像,置于殿角;
睚眦:平生好杀,喜血腥之气,其形为刀柄上所刻之兽像;
赑屃:力大,其背亦负以重物,即今刻在石碑下的石龟;
椒图:形状似螺蚌,性好闭,铺首衔环是其形象;
螭吻:平生好吞,即殿脊的兽头之形;
蒲牢:平生好鸣,它的头像被用作大钟的钟纽;
狻猊:喜欢蹲坐,佛像座下的狮子是其造型;
囚牛:性喜音乐,其形为胡琴琴杆上端的刻像;
所谓龙生九子,并非龙恰好生九子。中国古代传统文化中,往往以九来表示极多,而且有至高无上的地位。九
是个虚数,又是个贵数,所以用来描述龙子。

2010年11月6日星期六

记录我国这两年的封网做法

2008年奥运会之前:美国的知名的,大的网站基本都开放的。我国封锁的美国网站有下列几种:
1. 海外华人的网站。
2. 专门批评中共的政治性网站。
3. 知名的色情网站(playboy,penthouse等。但美国的色情网站太多,绝大多数没名的色情网站我国也封不到。
4. 很多放在web farm上的小网站被误杀。如果我国发现有个网站写了些他们不想让老百姓看到的东西,他们就把那个网站封掉。但他们不光是封那个域名,同时也把那个网站的IP也封掉。但一般小网站都是放在某个web farm上,与其他上百个小网站共用服务器及IP地址。如果我国把那个IP封了,所有其他几百个共用同一IP地址的小网站也因此被误杀。这基本维持他们的传统:宁可误杀一千也绝不放过一个。

2008年8月北京奥运会开始后,陆续的很多网站都解禁了。一开始只解禁了一部分。到了第三个星期,竟然取消全部封锁把所有的网站全部解禁。自由亚洲电台,所有的色情网,台湾的所有网站,全部都可以看到!但北京奥运一结束,很快就恢复原状,他们要禁的又都禁了。

这时他们对搜索引擎提出了更严厉的审查。好比说,要搜寻“刘xb”(这里我把中文名字隐蔽,否则又要被他们制造些问题)。如果我在google.com上搜,会出现一百万条。点进其中大多数网站,链接的网站基本都被封锁找不到。但偶然还会有漏网之鱼,可以跳到一些国外的小网站看到一些消息。但是如果我在google.cn上搜,只会出来200多条,而且全部都是说他坏话的。不记得从2008年几月起,我国就强迫google.com自动跳到google.cn去。基本无法访问google.com了。

2008年12月时我突然发现了一个诀窍。我如果输入google.ch(瑞士),那么就不会跳到google.cn了。因此我可以在google.ch上搜到一百万个“刘xb”( xb是中文).虽然绝大多数链接都被封,但仍然可以看到一些漏网之鱼。

2009年3月。我国使用了新的过滤方法,基本上很多敏感词根本不让出国。因此如果我在google.ch上输入“刘xb”,浏览器立即返回“找不到网页”。不管我到那个国外网站去搜,只要是敏感字就“找不到网页”!因此我的技俩被击破了!有趣的是,从此我发现了很多奇怪的敏感字,例如最令人不解的就是“李冰冰”竟然也不能出国。另外“王小丫”也在“王益”案后变成了出不了国门的敏感字了。

2009年3月左右,youtube 被封。
2009年5月起,blogspot,twitter,facebook等陆续被封
2009年暑假 谷歌事件。谷歌先是把服务器转跳到google.hk 但最后还是投降,因为google.hk至今仍然遵守我国的过滤规定。

2009年11月左右,借口打黄,严管及封锁了很多国内的网站。又实施了“备案”规定,封锁了几万个国内网站。

2010年6月4号,世博开幕一个多月后,突然所有美国的色情网站全部开放!
2010年11月4日,世博已经结束了几天,我试了试playboy和penthouse,都还健在!Penthouse竟然乘胜追击变本加厉自动出现全中文的页面!据说世博15天后一起恢复正常。我拭目以待!

2010年11月5日,我又试了试google.ch,发现只要不是google.hk已经全被封了!
但我又试了试以前被封锁的敏感字王益,王小丫,李冰冰,现在又都解禁了(不知道什么时候解的,因为几个月前我在中国缘上说到此事,大家试了也同感可笑)!

2010年11月3日星期三

收集到三个真心笑容,我就带你去天堂

有一个家财万贯的富翁快死了,死神来接他走,他问死神:「我死後会上天堂还是地?」死神跟他说:「地狱。」富翁很不服气,他说:「怎麽会是地狱呢?我捐钱盖了好几座教堂,还捐很多钱给教会,怎麽会是下地狱,我不服气!」「你不服气吗?那好,我给你一周的时间,如果你可以收集到三个真心笑容,我就让你上天堂。」


富翁很得意,他心想,要三个真心笑容还不简单?


死神走後,富翁想了一下,要得到真心笑容,就从自己结发四十年的老婆开始,会比较容易一点。於是富翁就花了很多钱买了一条钻石项炼,这是他老婆以前就很想要的,然後送给老婆。老婆见到钻石项炼很惊喜,也笑的很开心,但是死神却告诉富翁,这根本就不是真心笑容!富翁感到很奇怪,於是他又加把劲,送了老婆房子,车子,钻戒,所有女人想要的东西他都买了,奇怪的是,老婆虽然高兴,却都不符合真心笑容的条件。


就这样过了三天,富翁越来越慌张,因为时间只有七天,他却连一个老婆真心笑容都得不到,直到第四天早上,富翁起的很早,他想到自己快要死了,也没什麽东西给老婆,烦恼中他不自觉的走到厨房,拿起平底锅,打了两个蛋,烤了土司,开始作早餐。


他老婆起床,看到富翁在做早餐,大吃一惊,因为他们明明有很多佣人,富翁根本不用自己作早餐啊。富翁把早餐端上桌,老婆吃了一口,突然眼眶泛红,然後笑了起来,「亲爱的,你还记得我们刚开始创业的时候,没有钱,你都会作早餐,我们就是吃这样的简单早餐喔。」


这时候,富翁突然发现,老婆的笑容好美,一早起来的她虽然没有化妆,笑!容却美的让人心动,富翁突然明白,这几年来他从来没有好好陪过他的妻子,都忘记她真正开心的模样了。


★於是,富翁得到了第一个真心笑容。


接着富翁回到公司,他决定要把第二个真心笑容,交付给跟他一个非常信任的部属,於是富翁把部属叫了过来,对他说:「我决定要升你的官,让你当副总裁,然後给你股票和奖金!」
部属非常惊喜,脸上堆欣,对富翁连连感谢,可是,富翁却发现那部属的笑容还不是真心的笑容。富翁後来又开了很多优渥的条件,给了更多的奖金和股票,可是部属虽然高兴,富翁还是没看到他的真心笑容。


时间又过了三天,直到第七天的早上,富翁把部属叫了过来,递给部属一张假单还有五张机票。「你为我卖命这麽久,我才发现没有让你好好的放假陪家人,我给你一个月的长假,这是五张到夏威夷机票,带你的老婆和孩子一起去玩吧!」


部属先是吃惊,然後脸上严肃的表情慢慢变了,变得柔和而温暖,一个笑容在他了脸上绽放开,那是很轻松很轻松的笑,浅浅的微笑,但是让人一看就觉得很舒服。「是啊,我真的好久好久没有跟孩子去玩了,他们都快认不得这个老爸了!」


★富翁松了一口气,原来这才是部属真心想要的,这是第二个真心笑容。


可是好不容易得到第二个真心笑容,时间却已经剩下不到一天了.


富翁想了想,觉得时间已经来不及了,无论是老婆或是部属,都花去他太多时间了,看样子,他注定要下地狱了。想到要下地狱,富翁有点难过,他决定脱下西装到外头走走,对日理万机的富翁来说,这样一个人四处闲晃的经验,几乎是不可能的!平常他出门一定是坐高级的宾士车,身边一堆保镖,手边总是有着处理不完的公文,真的没什麽机会一个人在台北街头慢慢走。


富翁想说,反正再过几个小时,他就要被死神抓去地狱了,所以他也不想挣扎了,只是在路上悠闲的走着。走着走着,富翁突然看到了一个小女孩蹲在路边哭,而周围的路人却没有人愿意伸出援手帮助她,富翁想说,反正我也没多少时间好活了,就帮帮小女孩好了。於是,富翁把小女孩带去警局,做了记录,等小女孩的父母亲来接她,在等待的这段时间,富翁一直看着时间,他心里是有点焦急的,因为离死神来接他的时间越来越近了,而他却只能枯坐在警局中。


後来富翁就一直陪着小女孩,直到小女孩的父母终於赶来,三个人哭了起来,抱成一团,富翁看着这一幕,突然感到一阵打从心里升起的温暖,啊!原来单纯的帮助别人,是这麽美好的一件事啊!
然後,他看到了死神出现在警察局。富翁叹了一口气,知道自己要被抓去地狱了。


他伸出双手,准备让死神铐上手铐。可是,死神却意外的摇了摇头,「你不是要跟我去地狱,你可以上天堂了。」富翁睁大眼睛,他不懂。「第三个真心笑容。」死神拿出了一面镜子,放在富翁的面前说「其实老早就出现了。」


富翁看着镜子中的自己,原本严肃绷紧的表情,竟然整个松开了,一双残酷的眼睛变得像小孩般清澈,最重要的是,他的嘴角竟然不知不觉微微上扬着,彷佛不是一个掌握大权的总裁,而是一个亲切慈祥的老人。


★「原来,第三个真心笑容是我自己.....」