存档

‘日常’ 分类的存档

电脑坏了

2012年2月10日 没有评论

衣服自己洗上周还在和@ququ 说话,问他电脑上都安装了些什么软件,说从这周开始就换个电脑用。

去年年底的时候买了个本,到现在总开机次数不超过20次,再不用过几天就过时了。除了 xmind 没有找到安装包,Git 目前用不上,其它的基本上都安装好了。

结果木有想到,到上班后居然坏了。一开机,屏幕开始全屏轮流显示白色、红色、绿色、蓝色、灰色、深灰色……然后就悲催了。马上给苹果网站上留的400打电话,在浪费了我的电话费却没有得到什么有效进展后,办理了去西单大悦城的预约。

时间本来约的是下午2点,那边我还没有去过,然后就早早地过去了,到西单才12点多。进去体验了下,里面人好多啊,都在那里玩。其实我对这些设备没有多大的兴趣。其它的地方很值得称赞,装饰还成,墙壁的背景色、展示屏的摆放位置和播放内容似乎挑选过。每个区域里都有保洁人员和保安。另外一个就是在商品的旁边会放一个刷卡机,可以直接刷卡购买。还有一个就是产品描述和工作人员办公都是用的苹果自己的产品,我觉得这个还蛮不错的诶,在pad界面上你还可以找到呼叫工作人员的按钮。

在里面无聊了很久,才轮到我。工程师说是屏幕坏了,要把整个上盖给换掉,也可能是主板的问题。先预约这2个配件。后来外接了个mac的显示器,在大屏幕上似乎就没有问题,看起来似乎果然是屏幕的问题。

但是原因很奇怪,都小心呵护着呢,还这样,我运气是不是也太好了点。

开了单子后回家,等通知吧。

 

分类: 日常 标签: ,

CPU温度小工具之数据呈现

2012年2月2日 2 条评论

在上一篇文字里,已经写了如何获取数据。其实,在农历新年前,那部分代码衣服自己洗就已经写好了,丢在那里了。

我今天要说的,在任务栏显示数据,可不是在系统托盘区域显示图标,那个在 NET 里用 NotifyIcon 控件就可以做到的。按惯例,先上图。

 这个是任务栏在底部的时候

这个是任务栏在右部的时候

至于任务栏在左边和在上边,原理都是一样的。

 我在网上也确实搜索了一把,关于 NET 来实现这样效果的资料好少,年少不学 C++,老来就空叹气。

再说原理前,提一哈句柄这个概念,在 C++ 里,几乎所有的界面、控件都有句柄。例如一个窗体,一个按钮,桌面,和今天的主体“任务栏”都有句柄。这里说的是几乎,因为还有用 DirectUI 实现的界面是没有句柄的,例如 QQ、MSN、百度Hi、YY 等,DirectUI ,这是题外话了。

我们对句柄操作实际上就是对控件或者说所代表的内存进行操作。从广泛意义上来说,var obj=document.createElement(“div”); 这里的 obj 变量就可以理解为一个句柄。

实现原理是酱紫的,我们创建一个控件比如说 Label ,然后设置它的父容器为任务栏,最后再设置它的位置。就可以达到要求了。

任务栏主要有两块,一是显示当前运行的程序,我这里自己取名字叫工具条,二是显示程序的托盘图标,我取名字叫托盘栏。

第一步,引入相关的 C++ API。什么 FindWindow 、GetWindowRect 什么的。

[DllImport(“user32.dll”, EntryPoint = “FindWindowEx”, SetLastError = true)]
static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

[DllImport(“user32.dll”)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport(“user32.dll”)]
static extern int GetWindowRect(IntPtr hwnd, out Rect lpRect);

[DllImport(“user32.dll”, EntryPoint = “MoveWindow”)]
static extern int MoveWindow(IntPtr hwnd, int x, int y, int nWidth, int nHeight, int bRepaint=1);

[DllImport(“user32.dll”)]
static extern int SetParent(IntPtr wnd, IntPtr newParentWnd);

第二步,拿到我们需要操作的对象的句柄。

IntPtr trayHwnd = FindWindow(“Shell_TrayWnd”, null); //获取任务栏整体句柄
IntPtr notifyHwnd = FindWindowEx(trayHwnd, IntPtr.Zero, “TrayNotifyWnd”, null);//获取任务栏托盘区域句柄
IntPtr toolbarHwnd = FindWindowEx(trayHwnd, IntPtr.Zero, “ReBarWindow32”, null);//获取任务栏工具条区域句柄
IntPtr imeHwnd = FindWindowEx(toolbarHwnd, IntPtr.Zero, “CiceroUIWndFrame”, null);//获取语言栏区域句柄

第三步,开始获取相关尺寸。

Rect box = new Rect();
GetWindowRect(toolbarHwnd, out box);

//获取任务栏尺寸
int boxWidth = box.Right – box.Left;
int boxHeight = box.Bottom – box.Top;
//判断任务栏是水平还是垂直。true 为水平,false 为垂直
bool position = boxWidth > boxHeight ? true : false;

Rect ime = new Rect();
int d = GetWindowRect(imeHwnd, out ime);

//获取语言栏尺寸
int imeWidth = 0;
int imeHeight = 0;
if (d != 0)
{
imeWidth = ime.Right – ime.Left;
imeHeight = ime.Bottom – ime.Top;
}

frmHwnd = FindWindow(null, “SysMonitor”); //查找程序窗体

第四步,开始计算目的坐标。

if (frmHwnd != IntPtr.Zero)
{
int x1, y1; //窗体目标坐标
int x2, y2;//语言栏目标坐标
if (position)
{
x1 = boxWidth – w;
y1 = (boxHeight – h) / 2;

x2 = x1 – imeWidth-10; //这里多减的 10 是为了增加间隙,漂亮点
y2 = 0;
}
else
{
int diff = 2; //垂直方向,扣减宽度更美观
//如果为垂直方向,修改宽度以适应任务栏宽度
w = boxWidth – diff;

x1 = box.Left==0?0:diff;
y1 = boxHeight – h;

x2 = x1;
y2 = boxHeight – imeHeight – h;
}

this.Width = w;
this.Height = h;
lblInfo.Width = w;
lblInfo.Height = h;

int c = SetParent(frmHwnd, toolbarHwnd);//设置任务栏为窗体的父窗体

第五步,移动 CPU 温度窗体和语言栏到目的位置。
MoveWindow(frmHwnd, x1, y1, w, h);//移动显示CPU温度的窗体
MoveWindow(imeHwnd, x2, y2, imeWidth, imeHeight);//移动语言栏窗体

写到这里,整体结构就算完了。不要忘记了添加一个 Timer 喔,定时获取最新的 CPU 温度并显示出来。

最后生成的 exe 我就不放上来了。如果大家有需要的话,留言衣服自己洗会发给你们。代码优化的事情就交给你们去做拉。

CPU 温度工具到这里就算完拉。剩下的一个未完成的是在直接在桌面上绘制内容,相信我,这对我来说很有用的。

最后的最后,我那些亲爱的朋友们,我想你们了。

分类: 日常 标签: , ,

CPU温度小工具之获取温度

2012年2月2日 没有评论

魔方也好,360也好,都提供了一个功能,在任务栏上显示电脑的硬件温度。当然咯,还有别的软件可以在任务栏上显示电池电量等等。

魔方的这个工具好是好,但是会同时提供 4 个参数在那里来回切换显示,晃的我心神不灵的。其实,衣服自己洗的电脑比较垃圾,风扇一直是在将就着用,那噪音足以秒杀掉你们,我背包里每天都放一把螺丝刀,当噪音大的时候就把后盖给拆了,把风扇拍两下。有时候,特别在上班的时候,这行为就显得很二了。呃,这扯远了。

就是由于上面的原因,我想自己弄一个。我啥也不会,只能凑活抄点 NET 代码了。

那么第一步,是要获取温度,其实硬件信息都在系统里可以查询的到。衣服自己洗这里给出的方法和网上看到的基本上差不多。代码如下:

ManagementObjectSearcher search=null;

static string q=”select * from MSAcpi_ThermalZoneTemperature”;

上面的代码是不是很像 SQL 语句?话说好久木有写代码了,悲了个催@_@!!

接下来,就是主要方法了,喔,各位看官,原谅我没有在博客里配置代码高亮~

int GetCPUTemperature()
{
search=new ManagementObjectSearcher(“root\\WMI”,q);

ManagementObjectCollection con=search.Get();

foreach (ManagementObject ele in con)
{
Int32 n=Convert.ToInt32(ele.GetPropertyValue(“CurrentTemperature”));
return (n-2732)/10;
}

return 0;
}

很简单吧,在需要获取温度的地方,直接调用 GetCPUTemperature() 方法就可以了。获取了数据跑了下,和魔方、360 报告的温度数据有细微出入,不过对我来说已经满足要求了。当看到温度高的时候,就关掉一些软件,就是可惜了我的 8G 内存。

拿到了数据,下一步就是呈现。在下一篇文字里,我会说一说在任务栏呈现数据的事情。

分类: 日常 标签: , ,

衣服自己洗之新年乱七八糟

2012年1月28日 没有评论

衣服自己洗在这里祝我所有的朋友们农历新年快乐。祝福不要多,就2个:一、身体健康。二、赚多多钱。

虽然我几乎没有给你们谁专门发短信,但心里有你们。

1月16号就回家了,是工作一来回去最早的一年,每年回家都被一帮人感叹着。很多人看着都老了,二妈看我第一面都说我老了,很是汗了一把。岁月不饶人那~

被N多人关注婚姻,关注事业。到头了,不能逃避了。

不关注代码,不关注工作,没心没肺地玩了几天。2011年真的发生了很多不愉快的事情,期待接下来的一年里不要再这样了,那种风雨飘摇的感觉难受的紧。

走的时候,爸妈问我要带点什么,我懒的很,平时包里装个电池都觉得重。最后还是带了些东西,总归是他们的心意。包里塞了三鲜、烧肉、香肠、园子、藕饼、瓜子、牛奶、果醋,还有我喜欢吃的泡泡青。

到武汉后,在大娘水饺吃了点东西,坐公交到汉口,途中看到黄鹤楼园区,这个还木有去过呢~,以后有机会过去晃哈。

等待的过程中万般无聊,虽然也吃瓜子,也看美女。来来往往的人中确实有一些美女,可都跟在她们的男人后面,于是更加的索然无味。

上了火车,旁边是一家三口,那个小 loli 简直是把我给萌翻了。原本那种小loli只会在网上才有,木有想到真实生活中也有啊。然后一夜无表,好在木有人打鼾~

今天到家都是8、9点多了,洗澡睡觉。然后啃了两口鸭脖,喝了口咖啡,准备收心明天上班了。

分类: 日常 标签:

好遗憾呀

2012年1月18日 没有评论

门口的石头桌子被偷了,纯手工打造的,貌似是明朝的货,在我家伴随着我美好的童年,真心觉得遗憾,这小偷怎么尽赶对我贵重的东西偷。

分类: 一句话, 日常 标签:

手机发一个看看~

2012年1月15日 没有评论

记得以前的手机版本在M9上是有问题的,由于屏幕分辨率的问题,看不到自建博客的按钮。

后来由于手机系统重装,丢了很多软件。今天偶然想起来了,安装一看还居然可以用咯。

随便写点什么做个测试,不知道是否支持中文。

分类: 一句话, 日常 标签:

Windows Phone 7 版本糗事 preview

2012年1月15日 没有评论

按照衣服自己洗的惯例习惯,先上图:

本来按照我的计划里,在 android 版本的 糗事 发布后,是要出 iOS 的版本。

先前不是在写 jQueryPad++么,那是一个用 WPF 写的,遇到数据绑定的问题在某个技术群讨论的时候,有人顺便说现在 Windows Phone 7 SDK 已经出了中文的正式版了。想想基于net 的多少熟悉一点,再加上 WP7 的界面布局和WPF的布局方式大同小异,无非是有的控件不一样而已。

这么一来,糗事的WP 的版本倒跑到 iOS 的前面来了。iOS 版本现在的进展情况还停留在 UITable View 的阶段,惭愧的紧。根基不牢固就是我这样的下场,各位进来的同学,千万表学我。

上面的2张图我觉得算是糗事的早期版本吧。微信貌似也是这样创建的枢轴程序。不过界面看起来有点怪怪的样子,不知道是不是因为没有背景图片修饰的原因。大家有什么好的想法和建议,欢迎提出来。

明天晚上就回家滴,这里也顺便吐槽下天朝的车票,我那个去~。

提前祝大家新春快乐,和和美美。

jQueryPad++发布

2011年12月31日 1 条评论

我前面文章提及 jQueryPad 并说自己会重写一个类似的界面了,现在 jQueryPad++ 出了第一个版本了。

先上一个界面

jQueryPad++是模仿 jQueryPad 的应用,是一个方便快捷的 JavaScript/HTML 编辑调试器,因此取名为jQueryPad++。事实上,jQueryPad很优秀,界面很漂亮,代码结构也很清晰。

jQueryPad在使用的时候,会把临时文件放在 C:\Users\【用户】\AppData\Local\jQueryPad ,但是,但是,但是不会删除这些临时文件,国内的优化软件例如QQ管家、360什么的也不会清理这里的临时文件,所以造成的后果就是这里的文件会越来越多。这让有点洁癖的我,感觉非常的别扭。

在我看来,这个问题很讨厌,比没有智能提示还要讨厌,所以也就有了jQueryPad++。

jQueryPad++把临时文件存放 IE 的临时目录下C:\Users\【用户】\AppData\Local\Microsoft\Windows\Temporary Internet Files 下面,这样只需要清理 IE 缓存文件就可以了,无论是手工还是用 QQ/360 都是很方便的。

既然是尽可能地模仿 jQueryPad,但是由于衣服自己洗的水平有限,还是有很多地方不一样的。

1、移除了顶部的 Tip,这个感觉是个鸡肋,要不要无所谓。好吧,主要是因为不会实现。

2、没有实现按钮、滚动条的颜色和 jQueryPad 的一致。看起来丑了点。

3、将程序主界面的宽度从 800 修改为 1000。

4、临时文件的存放路径发生了变化。

文件最后用 Net Framework 3.5 编译,在运行的时候是需要对应的 Framework 支持的。众所周知的,NET编译的程序,在第一次运行的时候,速度可能会比较慢,之后就好多了。

最后放上下载地址,jQueryPad++绿色版-1.12.31.36,祝大家生活愉快。

分类: 日常 标签: ,

jQueryPad++获取已安装的浏览器

2011年12月29日 没有评论

一直在使用一个叫做 jQueryPad 的软件,这是一个国外的开发者使用 WPF 技术开发的小工具。还是蛮不错的,因为某原因,我决定自己来重写一个类似的功能。

我写的这个名字就叫做 jQueryPad++,界面什么的都尽量模仿那个软件好了。jQueryPad 免费但是不开源,里面有一个功能是列出了已经安装的浏览器,点击可以用对应的浏览器打开,在jQueryPad++里,获取浏览器的实现如下:

代码里定义了一个 GetBrowsers() 方法,该方法返回一个枚举,循环枚举可以获取安装的浏览器了。代码访问注册表的某一位置可以获取到电脑上一些已经安装程序的路径,然后再进行过滤就可以了。

在刚开始的时候,我并不清楚要在注册表的哪个位置去查找,为了让同行以后避免发生这样的情况,同时也为 jQueryPad++ 打个小广告,这里放上代码实现。懒得弄代码高亮了,大家凑活看吧。

protected IEnumerable<Browser> GetBrowsers()         //这里是返回迭代,Browser是一个自定义的类

{

//查找注册表的路径。这个路径我也是看了好久才发现地方的。使用了Registry ,需要添加对应的命名空间。

RegistryKey path = Registry.LocalMachine.OpenSubKey(@”Software\Microsoft\Windows\CurrentVersion\App Paths”);

string[] list = path.GetSubKeyNames();

foreach (string item in list)

{

if (item.StartsWith(“Firefox”, StringComparison.InvariantCultureIgnoreCase)) //检查是否包含Firefox ,比较字符串的时候忽略大小写

{ //如果存在firefox的键,那么默认值保存的就是程序的可执行文件的完整路径,还有一个是 Path 返回的是可执行文件的路径。同时需要注意的是 yield return 的使用,对于返回或者说是获取可迭代类型,需要这么使用,不能直接使用 return ,表明继续进行下一个操作。相关的关键词是 yield break ,表示返回。总之呢有点类似 continue 和 break 的味道。

yield return new Browser(“Firefox”, path.OpenSubKey(item).GetValue(“”).ToString());

}

if (item.StartsWith(“chrome”, StringComparison.InvariantCultureIgnoreCase)) {yield return new Browser(“Chrome”, path.OpenSubKey(item).GetValue(“”).ToString()); }    // 这里和下面是获取 chrome 和 ie ,和上面的方式一样,添加opera 也是相同的道理。

if (item.StartsWith(“IExplor”, StringComparison.InvariantCultureIgnoreCase)){yield return new Browser(“Internet Explorer”, path.OpenSubKey(item).GetValue(“”).ToString());}

}

}

代码到这里,主要的功能已经实现。关于 jQueryPad++ ,等发布的时候我会单独写一个帖子,目前还有一些WPF方面的小问题需要梳理,看来还是没有达到一种语言通,就所有的语言都会的境界。

分类: 日常 标签: , , ,

国内互联网网站用户信息泄漏

2011年12月23日 没有评论

这2年发生的国内互联网网站用户帐号密码被泄漏了,而且密码都还是明文的喔。

这个太NB了,当然,我是说黑客们。

从各个网站论坛获取到的信息,应该是今年2月份和6月份攻击的,然后拿到了数据,但是不知道为什么会在12月这个时间点泄漏出来。初步看了下,CSDN、珍爱网、百合网、世纪佳缘、 51cto 、京东商城、 cnbeta、cnzz、猫扑、开心网、新浪微博、优酷、豆瓣、it168、sogou、迅雷vip、土豆、智联招聘这些网站都中招了。

话说3大婚介网站的数据都有泄漏,慢慢长夜,可以挨个挨个打电话了。

经过辗转,我拿到了CSDN 和 人人网 泄漏的用户帐号和密码。

这是多么好的一个圣诞礼物啊,说不定上述公司的苦逼IT们这个周末都要加班来维护用户数据库了。同样作为苦逼的一员,虽然我的用户帐号在我拿到的数据库里查询不到,但是我面对的是工作上 js 脚本注入漏洞的攻击,你说开发们做下过滤会死呀,害的我也跟着受罪。

分类: 日常 标签: , , , , ,