从新修改 查找本地所有快捷方式 针对上一个版本不支持WIN8
2013-12-13 14:44
429 查看
// 获取快捷方式路径 char* getApplicationLnkLocation(HKEY locType , TCHAR lpValueName[]) { HKEY hKey; LONG nResult = 0; DWORD dwSize = 0; // 数据长度 // char* reAppPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs"; TCHAR lpSubKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"; //TCHAR lpValueName[] = "Common Programs"; nResult = RegOpenKeyEx(locType, lpSubKey, NULL, KEY_READ, &hKey); if( nResult != ERROR_SUCCESS ) { return NULL; } // 第一次调用,获取数据长度 RegQueryValueEx(hKey, lpValueName, NULL, NULL, NULL, &dwSize); // 缓冲区长度 // 动态分配缓冲区 LPBYTE dataBuf = new BYTE[dwSize]; // 第二次调用,获取数据 RegQueryValueEx(hKey, lpValueName, NULL, NULL, dataBuf, &dwSize); // 关闭 RegCloseKey(hKey); // 释放缓冲区 return (char*)dataBuf; } /******************************* * 函数名:TraverseFolder * 输入参数:lpPath(路径) * 输入参数:lnk(用来保存找到的lnk文件名) * 功能遍历文件夹函数 *********************************/ bool TraverseFolder(LPCTSTR lpPath,const char* lnk) { TCHAR szFind[MAX_PATH] = {_T("\0")}; WIN32_FIND_DATA findFileData; BOOL bRet; _tcscpy_s(szFind, MAX_PATH, lpPath); _tcscat_s(szFind, _T("\\*.*")); //这里一定要指明通配符,不然不会读取所有文件和目录 HANDLE hFind = ::FindFirstFile(szFind, &findFileData); if (INVALID_HANDLE_VALUE == hFind) { return false; } //遍历文件夹 while (TRUE) { if (findFileData.cFileName[0] != _T('.')) {//不是当前路径或者父目录的快捷方式 //_tprintf(_T("%s\\%s\n"), lpPath, findFileData.cFileName); //printf("find name is %s \n", findFileData.cFileName); if(!strcmp(findFileData.cFileName , lnk)) { char buf[256] = {0}; sprintf(buf,"%s\\%s",lpPath, findFileData.cFileName); ShellExecute(NULL,"open",buf,NULL,NULL,SW_SHOWNORMAL); return true; } if (findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {//这是一个普通目录 //设置下一个将要扫描的文件夹路径 _tcscpy_s(szFind, MAX_PATH, lpPath); _tcscat_s(szFind, _T("\\")); _tcscat_s(szFind, findFileData.cFileName); //遍历该目录 if(TraverseFolder(szFind,lnk)) { return true; } } } //如果是当前路径或者父目录的快捷方式,或者是普通目录,则寻找下一个目录或者文件 bRet = ::FindNextFile(hFind, &findFileData); if (!bRet) { break; } } ::FindClose(hFind); return false; }
相关文章推荐
- (修改版本)一个JavaScript Function Outliner插件 支持内嵌javascript,且可以对javascript进行压缩
- 修改一个方法,应针对所有可能影响到的地方进行测试
- Git的使用 强制放弃本地所有修改,获取master中最新版本更新本地
- Win8中创建一个快速关机按钮快捷方式图文教程
- 如何在所有用户桌面上放一个快捷方式或者文件?
- 获取软件所有快捷方式名称,判断本地是否安装,并打开
- Intellij 家族IDE 修改变量字段快捷方式
- 针对这一段时间ASP.NET版中比较集中突出的问题,我写了一个完整的页面,包含显示/修改/删除/添加/排序/合并/写文件/显示图片或文档,有详细代码注释
- 如何在一个机器上针对不同的项目需求使用不同的pyhon版本和包
- 苹果要求2015年2月起所有新app以及版本更新必须支持iOS 8 SDK和64-bit
- 速度优化:只加载一个CSS满足所有要求、针对不同浏览器加载不同CSS、正式站改版测试如何不影响用户体验
- XP修改注册表开启小键盘、去掉桌面小箭头和“快捷方式到”
- 如何将一个表中所有数据设置为只可读不可修改
- 怎么用php保存一个网页至桌面上成为快捷方式
- CAS修改源码支持多种方式登录认证
- 快捷方式查找目标失效的一种解决方法
- Java版本HTTPSQS 纯java实现、 一个jar包、支持嵌入式启动、完全兼容HTTPSQS、TPS 1w+
- 获取本地机器支持的.NET版本,C#源代码示例
- git获取一个版本相对于另一个版本新增,修改,删除的文件
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类