编程实现自定义系统右键菜单功能
来源:优易学  2010-1-14 12:17:17   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  else if (bUnicode && HIWORD(((CMINVOKECOMMANDINFOEX *) pici)->lpVerbW))

  {

  if(StrCmpIW(((CMINVOKECOMMANDINFOEX *)pici)->lpVerbW, L"Stat."))

  {

  return E_FAIL;

  }

  }

  else if (LOWORD(pici->lpVerb) != IDM_SRC_COUNT)

  {

  return E_FAIL;

  }

  else

  {

  assert(0 == HIWORD(pici->lpVerb));

  int lines = 0;

  TCHAR szTitle[MAX_PATH] = {0};

  TCHAR szMsg[MAX_PATH] = {0};

  TCHAR szFormat[MAX_PATH] = {0};

  memset(szMsg, 0, MAX_PATH);

  //保存当前光标并重设为等待形状

  HCURSOR hOldCursor = GetCursor();

  HCURSOR hNewCursor = LoadCursor(_Module.GetModuleInstance(), MAKEINTRESOURCE(IDC_COUNT_WAIT));

  assert(hNewCursor);

  SetCursor(hNewCursor);

  TCHAR szTemp[MAX_PATH] = {0};

  LoadString(_Module.GetModuleInstance(), IDS_TOTAL_LINES, szFormat, MAX_PATH);

  if (SUCCEEDED(GetFolderLines((BSTR *)&m_pszPath, &lines)))

  {

  wsprintf(szMsg, szFormat, (LPTSTR)m_pszPath, lines);

  }

  // 恢复默认光标形状?

  SetCursor(hOldCursor);?

  // 显示统计代码信息?

  LoadString(_Module.GetModuleInstance(), IDS_TITLE, szTitle, MAX_PATH);?

  MessageBox(pici->hwnd, szMsg, szTitle, MB_OK | MB_ICONINFORMATION);

  }

  return S_OK;

  }

  四、其它

  本程序是进程内服务程序,运行regsvr32进行注册(注:在VC编译器中,COM组件在编译时会自动调用regsvr32 进行注册,请看工程配置文件),例如,该组件已COPY至C:\WinNT\System32下,我们将输入如下命令行注册:

  因为是对文件夹统计,所以还需在

  HKEY_CLASSES_ROOT\Directory\Shellex\ContextMenuHandlers\下新建一项,命名为SrcCount,它的默认键值是组件的GUID,这里为:

  {548773BA-874E-4C02-9DC7-B7A096772C7D}    现在在资源管理器里对文件夹按快捷菜单,看到了吗,多出一菜单项了:源代码统计…,当我们单击该项时即可进行代码统计。

  本程序主要是展示怎样使用Shell扩展,所以重点在于程序设计方法,并未对所有细节的地方做得尽善尽美。还有一些细节值得改进,如Shell 扩展菜单的美化效果(例如比较流行的软件WinZIP、WinRAR之类的界面效果,快捷菜单上绘出位图)还可以改进;此外,程序的功能可以进一步扩充,本文主要是对C/C++源代码进行统计,我们可以扩展相关的统计规则,可以对汇编、JAVA、Delphi等各种语言的源代码进行统计,还可以用对话框的形式让用户进行各种选择与设置统计规则等。有兴趣的朋友可以一试。

  本程序虽在Windows XP、VC++6.0下编译,但可适用于Windows 9X/NT/2000/XP, 本文简单地简介了Shell扩展技术的实现方法,若有语焉不详的地方,请参考本文所附的源代码,或者发电子邮件给我,我们一起交流。

上一页  [1] [2] [3] 

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训