我住包子山

this->blog.MoveTo("blog.baozishan.in")

#

哀悼日

图片来自Google

国 务 院 公 告

逝者安息,生者坚强

posted @ 2008-05-19 12:39 Gohan| 编辑 收藏

GWeekly[16] = 关于未来,一切都是未知

Don't be afraid!!

   过去的一周对于我仍然是平淡的一周,但是对于许多许多受到地震灾难伤害的人,对于中国,这是难忘难熬的一周。5.12的7.8级地震,加上今天凌晨的6级地震,给不少人带来痛苦,伤害。地震这个东西很难预知,又有谁能够正确的预测未来呢?商周时的西伯侯会算算卦,可是妲己带来的灾祸他大概也没算到。周四,我们派对的学习活动,看了复兴之路的前两集,许多革命者让我敬佩,尤其是孙中山,看过他的一些精彩的演讲文。未来太多未知,就像happy tree friend里的那些短片,事件有时候来的那么突然,不要害怕,乐观面对,克服困难,如果hp掉光了,那也许不是结束 而是新的开始。豆瓣上有人转发了一篇哀悼贴,为作者感到同情,同时佩服作者的坚强。

   这周仍然是随便看看技术书籍,认识了blankyao,关注web开发的同龄朋友,对于Hook做了一些小小的学习,实践日志也发在博客上了。下一段时间可能不能把时间都放在这方面了,考试逼近,考研的复习也没有开始。不过还是学习技术优先级高些,还是慢慢积累经验。兄弟去做IBM的实习生面试没时间,替他做了个迅雷实习生的C++在线题目,头一次做这类题目,觉得题目比较冗繁,不少题目本身都有些错误,题目出的不够仔细。今天半天在做算法导论课程的上机作业,发现vc8的STL的堆算法和优先队列好像对于结构体指针的操作有点问题,debug版会提示异常,以后有空再深入学习吧。

   本周收藏:

snapshot20080519001953

   本周看了一个叫做Mind Game的动画,大部分没看懂,关于过去和未来以及幻想的动画,三体这本有趣的科幻小说看了一大半。未来的你我世界对我来讲是都个未知,勇敢面对,勇敢前进吧,正如右图这个图书馆战争的ED曲changes,食指所指的是未来。迎接未来,拥抱变化。愿灾难就此结束,期待明天。明天能看到★★吗?

 

写完这些发现“明天”已经到了,so。。下周(或者这周)再接着回顾了。

posted @ 2008-05-19 00:39 Gohan 阅读(285) | 评论 (2)编辑 收藏

向Vista学习,实现XP下重命名文件忽略选取扩展名

image   这两天对于HOOK的技术有了一个入门的学习,用过vista的同学会发现vista重命名一个文件比如vista.exe,他会自动选中vista忽略掉扩展名,带来比较方便的用户体验,学了一些hook我也想试试xp下能不能做这样的事情。于是参考一些文章,勉强实现了,有一点儿缺陷(请看最后)。

   经过观察我发现重命名时,资源管理器会向他的子窗口listview发送一个LVM_EDITLABELA的控制消息,所以我使用了WH_CALLWNDPROCRET类型的全局挂钩,这个挂钩可以在sendmessage结束以后处理传送和返回的数据。发送了LVM_EDITLABELA消息后,会在lParam得到一个编辑窗口的句柄,只需之后对这个窗口发送EM_SETSEL控制消息就能够改变重命名时候的高亮区域。hook回调函数如下:

   1: static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
   2: {
   3:     if(nCode < 0)
   4:     {
   5:         CallNextHookEx(hook,nCode,wParam,lParam);
   6:         return 0;
   7:     }
   8:     LPCWPRETSTRUCT msg = (LPCWPRETSTRUCT) lParam;
   9:     if(msg->message == LVM_EDITLABELA || msg->message == LVM_EDITLABELW)
  10:     {
  11:         GetClassName(msg->hwnd,className,255);
  12:         GetWindowText(msg->hwnd,wndName,255);
  13:         if(0==_tcscmp(className,_TEXT("SysListView32")))
  14:         {
  15:             if(0==_tcscmp(wndName,_TEXT("FolderView")))
  16:             {
  17:                 hEditWnd = (HWND)msg->lResult;
  18:                 GetWindowText(hEditWnd,className,255);//暂时放入className
  19:                 SendMessage(hEditWnd,EM_SETSEL,0,findDot(className));
  20:             }
  21:         }
  22:     }
  23:     return CallNextHookEx(hook,nCode,wParam,lParam);
  24: }

 

className与wndName是两个TCHAR数组,从hwnd获取信息存在那里进行判断是否为Shell中的listview,避免在其它使用listview的应用程序里会进行之后的处理。

   工程文件下载,点这里

   程序下载,点这里

   使用方法,编译以后直接运行GRnamer就可以,如果不想用了,从任务管理器把它关闭,没有做trayicon之类的东西,因为只是个demo。

image   最后说一下缺陷,缺陷就是这样做没有办法判断文件与文件夹的区别,所以会有如图的效果,我自己没有想到解决的方法,请达人们指点。:)

 

   参考的文章:

msdn Hooks hook的全部参考

codeproject Hooks and DLLs 我的hook dll都是照着它写的。

posted @ 2008-05-17 02:05 Gohan 阅读(2959) | 评论 (17)编辑 收藏

为震区同胞祈福!

   昨天下午在西安也有几分钟的震感,事后知道这场震级里氏7.8级的地震发生在了我国四川汶川,我在这里为丧生于这场灾难的近万名同胞哀悼了,衷心希望灾区的同胞们平安脱险!!

相关链接 

上苍保佑所有的人们!


http://review.feedsky.com/review/feedsky/gohan/~/txt/171/r.html

posted @ 2008-05-13 21:05 Gohan 阅读(283) | 评论 (1)编辑 收藏

GWeekly[15] 无面人

image   平常的一周,这周课程不多,编译原理讲了感觉不到一半可能就快要结课了,有点可惜。学的东西不多,写huffman编码的练习,用了C++有关的文件流。这周六学校停电,出去买书,想买老六写的记忆碎片歌唱80年代,听说还不错,可惜没找到,捧了本ATL internal 2nd的中文版,想买代码之美中文版,结果老板推荐给我一本编程之美,看了几眼,也捧了回去。读书的堆栈还是要不断更新的。这周阅读不多,只是了解了些HMAC-SHA的内容,学了一个自适应huffman的代码,读那本atl internal,收拾桌面,书架,很累很累,没做完的事儿很多,云风的那个回忆故事还没看全,还要写点东西。

   看了几部动画,宫崎骏的千与千寻魔女宅急便,觉得自己一个人傻傻的有点像那个无面人。发现图书馆战争里的开场结尾曲很不错。

   本周收藏

  本周回顾就是这些,今天是母亲节,再次祝妈妈节日快乐。累了,睡去。

posted @ 2008-05-11 23:25 Gohan 阅读(496) | 评论 (2)编辑 收藏

让VS2005中的fstream支持中文路径文件打开

   前几天发了这篇《用fstream对二进制文件的读写》,有朋友指出了VS2005的fstream对于中文路径支持不好的bug。我想大概是因为VS2005更加重视了对字符串的全球化支持,所以鼓励我们使用unicode编码的字符串,对于MBCS之类的支持可能就疏忽了吧。

   我搜索了一下这个问题的解决,参考了如下资料写了演示代码。

   我综合了以上的内容,总结了3种方法,能够较好解决大家的困扰,包括可能无法使用cout的问题。

   1: /********************************************************************
   2:     created:    2008/05/10
   3:     created:    10:5:2008   23:56
   4:     filename:     k:\sj\fstreamTest\fstreamTest\main.cpp
   5:     file path:    k:\sj\fstreamTest\fstreamTest
   6:     file base:    main
   7:     file ext:    cpp
   8:     author:        Gohan
   9: *********************************************************************/
  10: #include <tchar.h>
  11: #include <fstream>
  12: #include <iostream>
  13: using namespace std;
  14: int main()
  15: {
  16:     /************************************************************************/
  17:     /* 方法1,使用_TEXT()宏定义将字符串常量指定为TCHAR*类型                 */
  18:     /* 如果是我,首选此类型                                                 */
  19:     /************************************************************************/
  20:     fstream file;
  21:     file.open(_TEXT("c:\\测试\\测试文本.txt"));
  22:     cout<<file.rdbuf();
  23:     file.close();
  24:  
  25:     /************************************************************************/
  26:     /* 方法2,使用STL中的locale类的静态方法指定全局locale                   */
  27:     /* 使用该方法以后,cout可能不能正常输出中文,十分蹊跷                    */
  28:     /* 我发现了勉强解决的方法:不要在还原区域设定前用cout或wcout 输出中文   */
  29:     /* 否则后果就是还原区域设定后无法使用cout wcout输出中文                 */
  30:     /************************************************************************/
  31:     locale::global(locale(""));//将全局区域设为操作系统默认区域
  32:     file.open("c:\\测试\\测试文本2.txt");//可以顺利打开文件了
  33:     locale::global(locale("C"));//还原全局区域设定
  34:     cout<<file.rdbuf();
  35:     file.close();
  36:  
  37:     /************************************************************************/
  38:     /* 方法3,使用C函数setlocale,不能用cout输出中文的问题解决方法同上      */
  39:     /************************************************************************/
  40:     setlocale(LC_ALL,"Chinese-simplified");//设置中文环境
  41:     file.open("c:\\测试\\测试文本3.txt");//可以顺利打开文件了
  42:     setlocale(LC_ALL,"C");//还原
  43:     cout<<file.rdbuf();
  44:     file.close();
  45: }
  补充一下,第一种方法,如果不是静态字符串当作路径的话,记得传入TCHAR*类型字符串作为路径,应该就没问题了。image
 

posted @ 2008-05-11 01:30 Gohan 阅读(9151) | 评论 (5)编辑 收藏

用fstream对二进制文件的读写

这里介绍使用fstream这个类完成这个任务,fstream在输入输出方面比较全能。

操作系统通过二进制文件格式存储大量文件。一般不指定二进制文件操作的I/O操作是面向文本的,用来读写特定编码的文本。本文介绍用C++的fstream类读写二进制文件。

读写数据以这个WebSite结构体为例

        // Struct for C++ File I/O binary file sample

   1: struct WebSites
   2: {
   3:      char SiteName[100];
   4:      int Rank;
   5: };

写操作

    注意事项

  • 要写的文件需要用到输出模式标志 ios::out和二进制操作模式标志ios::binary。
  • write()函数需要两个参数.第一个参数是char*类型用来指定需要写入的数据, 第二个参数是int类型指定写入多少个字节.
  • 最后记得要用close()结束.

        // Sample for C++ File I/O binary file write

   1: void write_to_binary_file(WebSites p_Data)
   2: {
   3:     fstream binary_file("c:\\test.dat",ios::out|ios::binary|ios::app); 
   4:     binary_file.write(reinterpret_cast<char *>(&p_Data),sizeof(WebSites));
   5:     binary_file.close();
   6: } 

上面的例子把一个WebSites的对象追加进了c:\test.dat之中,ios::app是追加方式操作文件的标志。

上面的write函数,需要第一个参数为char*类型,所以用 reinterpret_cast转换将这个对象地址转换成char*类型.

读操作

   跟上面的操作流程类似. 唯一不同在于使用输入模式标志ios::in, 使用read()方法.

        // Sample for C++ File I/O binary file read

   1: void read_from_binary_file()
   2: {
   3:     WebSites p_Data;
   4:     fstream binary_file("c:\\test.dat",ios::binary|ios::in);
   5:     binary_file.read(reinterpret_cast<char *>(&p_Data),sizeof(WebSites));
   6:     binary_file.close();
   7:     cout<<p_Data.SiteName<<endl;
   8:     cout<<"Rank :"<< p_Data.Rank<<endl;
   9: } 

本文只是关于文件io流的一些基础介绍,一些高级操作比如seek,检查文件指针的有效性等等,也是需要学习的,这里就不多说了。

文章来源  我只是做一个简短的翻译

posted @ 2008-05-09 14:41 Gohan 阅读(22686) | 评论 (10)编辑 收藏

GWeekly[14] = 五一短假

最近在看的动画    本周上课3天便碰到了五一,这次短假如同上次的清明长假,劳动光荣,我懒惰得有点惭愧,呆屋3天反省。话说5月1日前一阵被一个叫做Daniel的家伙定为RSS日,RSS很好,高中时候我看很多电脑杂志,用过单机RSS阅读器,可惜那时候feed不多,去年开始用Google在线阅读器,感觉良好,上月有两天google访问变得很慢,试用了鲜果,发现虽然鲜果的快捷键大多学习了Google,但它每篇文章都有推荐数作为参考,可以较快忽略一些不重要的内容,还有分页显示,着实不错,而且好友功能比较显眼(这个我觉得无所谓),只是像Google这样用纯键盘阅读鲜果的支持就差一些,还是不够方便,现在觉得还是google稍微方便点,希望Google也去学学鲜果,做的尽善尽美。放假期间看了一点Win shell编程的电子书,看完了那本王涛的.NET须知,以前的ACM队友还在努力学习算法,我却有点在这方面荒废,图论部分尤其是网络流至今仍未通晓,打算今后时常读读算法导论。

   放假要好好放松身心,云风在闲暇时回忆往事,很向往他那会的经历,只是自己相对他不知荒废了多少,要努力抓住现在。这周看了一下豆瓣的API文档,提供了方便的功能,我还需要些基本知识,收集如下,有时间也可以玩这个API的应用。image

  这周游戏了不少,三国11称霸模式玩了5关,与同学Dota若干局,一个类似之前的蜡笔物理学的游戏Magic Pen。五一看了很多老电影,卧虎苍龙,拳霸,冬阴功,预见未来

本周收藏

这周就到这里,下周继续。

posted @ 2008-05-05 07:54 Gohan 阅读(314) | 评论 (0)编辑 收藏

获取给定路径的图标,演示SHGetFileInfo用法

建立的仍然是Win32 命令行的工程,所以入口点为main(),需要手动获取HINSTANCE结构。程序在WINXP+VS2005测试通过image
/********************************************************************
  created:  2008/05/02
  created:  2:5:2008   3:40
            main.cpp
  author:    Gohan
  purpose:  演示SHBrowseForFolder用法
            演示SHGetFileInfo获取路径图标   
            演示Picture Box在SDK里的使用方法
*********************************************************************/
#include <Windows.h>
#include <ShlObj.h>
#include "resource.h"
HICON g_icon;
RECT g_rect;
TCHAR g_path[MAX_PATH];
void OnInitDlg(HWND hwnd)
{
   
GetWindowRect(GetDlgItem(hwnd, IDC_ICON1), &g_rect);
   
MapWindowPoints(NULL, hwnd, (LPPOINT) &g_rect, 2);
   
DestroyWindow(GetDlgItem(hwnd, IDC_ICON1));
   
SetDlgItemText(hwnd,IDC_PATH,g_path);
}
void OnPaint(HWND hwnd)
{
   
PAINTSTRUCT ps;
   
HDC hdc = BeginPaint(hwnd, &ps);
   
DrawIcon(hdc,g_rect.left,g_rect.left,g_icon);
   
EndPaint(hwnd,&ps);
}
BOOL CALLBACK DlgProc (HWND hDlg, UINT message,
                           
WPARAM wParam, LPARAM lParam)
{
   
switch (message)
    {
   
case WM_INITDIALOG :
       
OnInitDlg(hDlg);
       
return TRUE ;
   
case WM_PAINT:
       
OnPaint(hDlg);
       
return TRUE;
   
case WM_COMMAND :
       
switch (LOWORD (wParam))
        {
       
case IDOK :
       
case IDCANCEL :
           
EndDialog (hDlg, 0) ;
           
return TRUE ;
        }
       
break ;
    }
   
return FALSE ;
}
int main()
{
   
HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
   
BROWSEINFO bi;
   
ZeroMemory(&bi,sizeof(BROWSEINFO));
   
LPMALLOC pMalloc;
   
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
   
   
if(pidl != NULL)
    {
       
SHGetPathFromIDList(pidl,g_path);
       
SHFILEINFO sfi;
       
ZeroMemory(&sfi,sizeof(SHFILEINFO));
       
SHGetFileInfo(g_path,0,&sfi,sizeof(SHFILEINFO),SHGFI_ICON);
       
g_icon = sfi.hIcon;
       
DialogBox (hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, DlgProc) ;
       
//MessageBox(NULL,path,TEXT("Choose"),MB_OK);
        if(SUCCEEDED(SHGetMalloc(&pMalloc)))
        {
           
pMalloc->Free(pidl);
           
pMalloc->Release();
        }
    }
   
else
    {
       
MessageBox(NULL,TEXT("),TEXT("Choose"),MB_OK);
    }
}
/************************************************************************/
/* resource.h                                                           */
/************************************************************************/
#define IDD_DIALOG1                     101
#define IDC_PATH                        1001
#define IDC_ICON1                       1002
/************************************************************************/
/* demo.rc Microsoft Visual C++ generated resource script.              */
/************************************************************************/
#include "resource.h"
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_DIALOG1 DIALOGEX 0, 0, 126, 83
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP
FONT
8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "确定",IDOK,69,7,50,14
   
PUSHBUTTON      "取消",IDCANCEL,69,24,50,14
   
CONTROL         "",IDC_ICON1,"Static",SS_WHITEFRAME | SS_REALSIZEIMAGE,13,10,20,20,WS_EX_TRANSPARENT
    LTEXT           "静态",IDC_PATH,14,44,89,21,0,WS_EX_CLIENTEDGE
END


/////////////////////////////////////////////////////////////////////////////

posted @ 2008-05-02 04:54 Gohan 阅读(7615) | 评论 (2)编辑 收藏

GWeekly[13] = 宅们,不要轻生

o_InsideDotNetBook_Logo

   前几天看到和邪社又一个悲哀的宅,的确很悲哀,年轻的生命被自我终结了。遇到了再大的挫折,还应该看到希望,看看这两个链接,两条腿特立独行的狗没有肢体的人生,生物的能力可以是超乎想象的,只要你有你的faith。这个悲哀的宅也给我提了个醒,虽然我也算宅,不过还是重视周围的生活的,这周和同学两天中打了快四十局乒乓球,早起跟寝室同学打了回篮球,周末去看了少儿励志片功夫之王,挺不错的,买了这本《你必须知道的.NET》作为前几天读书节送给自己的礼物。本周随便看了看Windows Shell Programming的一部分,写java上机作业,还玩了10个小时MARSWOW,玩的时候感觉回到了高考复习的那会儿,这次玩完有点后悔,因为看了大学生的游戏生活。昨天是妈妈生日,这里祝愿妈妈永远健康快乐。这周在技术方面小小研究了一下.Net的RTFBox控件,准备实现一个RTFtoHTML的程序,以后好方便的贴一些code。

本周收藏:

这周听汪峰那首明天,感觉不错,希望现在不好的事儿明天会变好,好的事儿明天更好,相信明天。

posted @ 2008-04-27 23:25 Gohan 阅读(270) | 评论 (0)编辑 收藏

仅列出标题
共16页: First 4 5 6 7 8 9 10 11 12 Last