禁止重复运行并激活原托盘程序

这几天,在公司里很是清闲,OJT(On Job Training)的日子确实还是挺自在的。唯一让人纠结的是,给你一片日文文档让你看。这下可把我害苦了,缺胳膊掉腿儿的中国字,我哪里看得懂啊??
所以这几天,总是Google Translate陪伴着我。可是每次总不能老是打开IE输入网址去翻译吧?太过于繁琐的工作,还是写个小工具吧!终究是因为自己比较懒而已。

打开Visual Studio 2010,公司可都是正版啊!建立个项目,程序本省很简单。与那里就是拖个WebBrowse控件,将Google Translate网址加进去就可以了。可谁知,接憧而至的麻烦不是这个~~而是下面这些:

1.实现最小化到托盘(这点notifyIcon控件可以轻松实现)
2.托盘菜单控制(这点ContextMenu控件也可以轻松实现)
3.禁止程序重复启动,即多次点击exe文件,只允许在系统里保留一个(这个就稍微麻烦点了,但是Google一下也不难解决)
4.多次点击运行exe文件后,将已经最小化到托盘的窗体激活到桌面上(这就是难点所在了)

前面都相对简单就不讲了,着重讲一下第3,4点。之所以不容易,是因为我Baidu,Google了一天都没有找到真正的解决方案,最后自己各种测试才成功的。

重点是这个:

获取后台窗体句柄时要使用 User32.dll中的FindWindow函数而非.Net框架中Process.GetProcessesByName(XXX).如果采用后者,程序在前台和隐藏后获取的窗体句柄是不同的两个值,我也不清楚为什么??

代码如下:

上面,注释掉的就是不行的方法,没注释掉的就是正常使用的方法。可以防止多次运行程序,并且第二次运行时,激活已在托盘的原程序。

如有其它什么问题,可以联系me[at]chenzhiguo.cn