Automate Everything

关于自动化相关的任何东西,包括自动化测试,Visual Studio宏, 自动化安装部署等
25
Apr
2008

今天又到中江路的天地软件园逛了一下

都有快两年没去了吧,当时在中软资源的时候,才呆了没几个月,就外派到紫竹去了,一呆就是一年,一年前又换到浦东的公司了,就更没有往那边去。

今天去了一下,金沙江路依然是那么堵,以前软件园边上没有盖好的楼也盖好了,咖啡厅也多了几个,KTV也有了,还有个什么娱乐城,总之没有以前那么荒凉了……

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

24
Apr
2008

快速找到并输入连接数据源的字符串

以前在学校的时候,从一个做数据库的同学那里知道下边的这个方法,结果后来忘掉那个扩展名是’udl’了,今天看到完美Excel的这篇文章,赶快转帖过来,以防止以后忘掉:)

转自:快速找到并输入连接数据源的字符串

最近,又复习了《Excel 2003 VBA Programmer’s Reference》关于数据库编程的章节,上面介绍了一种快速找到连接数据源的字符串的方法,介绍如下,供参考。
通常,在Excel VBA中要与外部数据库连接前,必须先建立与该数据源的连接,即要设置连接字符串,如下面的代码:
Dim strConnectString As String
strConnectString=” Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\FW\桌面\Northwind.mdb;Persist Security Info=False”
如果直接输入,将很麻烦且易出错。我们可以使用下面的方法:
步骤1 在桌面建立一个文本文件,并将其扩展名改为“udl”,如下图。
udlfile1
步骤2 双击该文件,出现“数据链接属性”对话框,如下图。
Datalinkpropertydia
在“提供程序”选项卡的列表中选择希望连接的数据源,本例为“Microsoft Jet 4.0 OLE DB Provider”。
步骤3 然后,单击“下一步”按钮,如图所示,转到“连接”选项卡(不同的数据源此选项卡中的内容会有所不同)。
Datalinkpropertydia1
步骤4 单击“选择或输入数据库名称”文本框右侧的选择按钮,选择相应的数据库文件。单击“确定”按钮。
步骤5 在记事本中打开该文件,如下图。
resulttxt2
其中,以Provider开头的两行即为连接字符串。我们可以将其直接复制到程序代码中。

Access, Database, Excel, VBA

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

23
Apr
2008

55招玩转Google

转一本很好的书:http://www.yangyc.com/55fun/

章节目录

  1. 用Google找自己
  2. Google贪吃蛇
  3. 枚枚页:适者生存
  4. Google愤怒症游戏&Google图像小测试
  5. Google谚语进行时
  6. 浏览网站的全部图片
  7. Google运动简史
  8. Google是什么?它为何有趣?
  9. Google为我们节约了多少时间?
  10. Google帮你做柠檬鸡
  11. 道格拉斯•亚当斯和Google计算器
  12. Oops,我又Google了一把
  13. 小魔术:Google图标大变身
  14. Wiki上的趣味Google Maps玩法
  15. 德夫-多曼的Googlewhack
  16. Google你问我答
  17. 庆祝非婚礼,及其它
  18. 用SketchUp设计你的梦想之家

  19. 凯文·培根和Google关系网
  20. Google字母表
  21. Google搜索小贴士
  22. Google公园
  23. GoogleShare
  24. 最短和最多的Google搜索
  25. 旋转Google和迷你Google
  26. Google小测试:你有多了解Google?
  27. 根据记忆重绘Google
  28. Google News怪现象
  29. 外星人入侵Google!
  30. Google沉溺症的十个症状
  31. 凿个穿透地球的洞
  32. Googlebombing
  33. Google广告洋相大观
  34. G世代的生活
  35. Google黑客
  36. Google调查: 问问大家的意见
  37. Google大战游戏
  38. 如果Google作恶了会如何?附:未来Google的5项发明【上】|【下】
  39. Google冒险游戏
  40. Egobot, 来自网络的声音
  41. 有趣的Google小玩意
  42. 科幻时间【1/4】_杰克寻母记
    科幻时间【2/4】_事故:页面等级值为100
    科幻时间【3/4】_网络大脑
    科幻时间【4/4】_Google机器人常见问答
  43. Google世界记录之书
  44. 拼写错误仓库
  45. Google 网上论坛,时间机器
  46. ……翻译进行中……
把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

22
Apr
2008

Triivi:“搜狗式”英文输入法

转载自:http://soft.72pines.com/triivi/

拼音输入你用什么?智能ABC还是微软拼音?我还是坚持之前的选择:搜狗拼音输入法。随着它3.0正式版的推出,一些新的特性又陆续加入,不论从稳定性和功能上都大有进步,值得升级。但今天的“主角”不是搜狗,而是一个名叫Triivi的输入法,一个号称能让英文输入变得无比惬意的输入法。

软件安装程序有7.85M,要是完整安装的话要占用28M左右的空间,其实主要是词库文件比较大,不过可以按需所选:

Triivi 1

启动后默认界面是英文,双击托盘处图标调出设置界面,把它变成中文吧:

Triivi 2

是不是这样看起来亲切许多?再好好设置一下使其更符合我们的使用习惯,比如显示字体、大小、热键、单词库等等:

Triivi 3

一切准备就绪,赶紧输入几句英文试试,首先是自动完成:

按动上下键,稍等片刻就能得到单词的中文翻译:

要是输错了还有相应提示:

Triivi是一款很智能的输入法,而且它还是开源免费的,与搜狗搭配使用,输遍中英不用愁。但它同样不完美:“获取更多专业词库”按钮点了没反应,只能自己到主页上找;在启用了搜狗或微软拼音状态下Triivi的英文输入无效。

如果你经常要跟英语打交道,那我建议装上这个软件试试,难道你不想体验惬意地输入英文是种什么感觉吗?^_^

下载

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...

21
Apr
2008

C#中使用多线程,并与UI同步

我们有时候需要做一些很耗时间的操作,比如到网络上拿一些数据或者对很多数据进行运算处理,如果是在单线程的程序中,这些运算就会阻塞UI线程,现象就是UI不能响应用户的任何操作,不会刷新。这个时候用户很可能以为程序已经死掉,从而造成很差的用户体验。
解决方法:将很耗时间的运算和处理放在单独的一个线程中进行,UI操作不会受到影响,用户还可以进行其它操作(如果UI中有些操作依赖于当前的的处理,我们可以先将它灰掉,在处理线程结束后再使其可用。更好的是在UI的线程中放一个进度条,来告诉用户当前的处理进度)

在C#中做多线程的处理非常简单:
只需要用代理(Delegate)和跟代理相关的两个函数:
1. BeginInvoke  这个方法将代理指向的方法在一个单独的线程中调用
   使用方法:
     a. 声明一个代理的对象
     b. 用这个代理对象调用BeginInvoke方法         

2. Control.Invoke 这个方法在当前UI的线程空间内调用代理所指向的方法
    使用方法:
      a. 声明一个代理对象
      b. 调用控件的Invoke方法(一般在WinForm程序中,可以调用this.Invoke方法),将代理对象作为参数传递过去

看代码:

   1: private delegate void LoadPhotosDelegate(SearchParam param);
   2: private void LoadPhotosFromFlickr(SearchParam param)
   3: {
   4:     UpdateUIDelegate updateUI = new UpdateUIDelegate(this.UpdataUI);
   5:     this.Invoke(updateUI);
   6: }
   7:  
   8: private delegate void UpdateUIDelegate();
   9: private void UpdataUI()
  10: {
  11:     //进行UI的更新操作,比如更新进度条,显示图片等
  12: }
  13:  
  14: private void SearchPhoto(SearchParam param)
  15: {
  16:     LoadPhotosDelegate loadPhotos = new LoadPhotosDelegate(LoadPhotosFromFlickr);
  17:     loadPhotos.BeginInvoke(param, null, null);
  18: }

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 (1 votes, average: 4 out of 5)
Loading ... Loading ...

21
Apr
2008

在C#中调用API进行截屏

看代码:

需要Reference下面的DLL:
  System.Drawing
  System.Windows.Forms
  WindowBase

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Text;
   4: using System.Windows;
   5: using System.Windows.Forms;
   6: using System.Drawing;
   7: using System.Runtime.InteropServices;
   8:  
   9: namespace ConsoleApplication1
  10: {
  11:     class Program
  12:     {
  13:         [System.Runtime.InteropServices.DllImport("gdi32.dll")]
  14:         public static extern IntPtr CreateDC(string driver, string device, IntPtr res1, IntPtr res2);
  15:  
  16:         public enum TernaryRasterOperations
  17:         {
  18:             SRCCOPY = 0×00CC0020, /* dest = source*/
  19:             SRCPAINT = 0×00EE0086, /* dest = source OR dest*/
  20:             SRCAND = 0×008800C6, /* dest = source AND dest*/
  21:             SRCINVERT = 0×00660046, /* dest = source XOR dest*/
  22:             SRCERASE = 0×00440328, /* dest = source AND (NOT dest )*/
  23:             NOTSRCCOPY = 0×00330008, /* dest = (NOT source)*/
  24:             NOTSRCERASE = 0×001100A6, /* dest = (NOT src) AND (NOT dest) */
  25:             MERGECOPY = 0×00C000CA, /* dest = (source AND pattern)*/
  26:             MERGEPAINT = 0×00BB0226, /* dest = (NOT source) OR dest*/
  27:             PATCOPY = 0×00F00021, /* dest = pattern*/
  28:             PATPAINT = 0×00FB0A09, /* dest = DPSnoo*/
  29:             PATINVERT = 0×005A0049, /* dest = pattern XOR dest*/
  30:             DSTINVERT = 0×00550009, /* dest = (NOT dest)*/
  31:             BLACKNESS = 0×00000042, /* dest = BLACK*/
  32:             WHITENESS = 0×00FF0062, /* dest = WHITE*/
  33:         };
  34:  
  35:         [DllImport("gdi32.dll")]
  36:         public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth,
  37:             int nHeight, IntPtr hObjSource, int nXSrc, int nYSrc, TernaryRasterOperations dwRop);
  38:  
  39:         public static void CaptureDesktop(string sPath)
  40:         {
  41:             Rect rect = new Rect();
  42:             rect.Width = Screen.PrimaryScreen.Bounds.Width;
  43:             rect.Height = Screen.PrimaryScreen.Bounds.Height;
  44:  
  45:             IntPtr dcTmp = CreateDC("DISPLAY", "DISPLAY", (IntPtr)null, (IntPtr)null);
  46:             Graphics gScreen = Graphics.FromHdc(dcTmp);
  47:             Bitmap image = new Bitmap((int)(rect.Width), (int)(rect.Height), System.Drawing.Imaging.PixelFormat.Format24bppRgb);
  48:             Graphics gImage = Graphics.FromImage(image);
  49:             IntPtr dcImage = gImage.GetHdc();
  50:             IntPtr dcScreen = gScreen.GetHdc();
  51:             BitBlt(dcImage, 0, 0, (int)(rect.Width), (int)(rect.Height), dcScreen, (int)(rect.Left), (int)(rect.Top), TernaryRasterOperations.SRCCOPY);
  52:             gScreen.ReleaseHdc(dcScreen);
  53:             gImage.ReleaseHdc(dcImage);
  54:  
  55:             image.Save(sPath);
  56:         }
  57:  
  58:         static void Main(string[] args)
  59:         {
  60:             CaptureDesktop("c:\\1.bmp");
  61:         }
  62:     }
  63: }

把这篇文章分享到: These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • bodytext
  • Google
  • Facebook
  • Furl
请给这篇文章打分:
太差了有点差马马虎虎了很不错非常好 ( 您是第一个打分的人)
Loading ... Loading ...