获取软件所有快捷方式名称,判断本地是否安装,并打开

原创 2013年12月12日 10:55:39
  // 获取快捷方式路径
 char* getApplicationLnkLocation(HKEY locType , TCHAR lpValueName[])
 {
	 MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|getApplicationLnkLocation[start]");
	 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);
	 MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|getApplicationLnkLocation[end]");
	 // 释放缓冲区
	 return (char*)dataBuf;
	 
 }

 /*******************************
 *     函数名:TraverseFolder
 *     输入参数:lpPath(路径)
 *     输入参数:lnk(用来保存找到的lnk文件名)
 *     功能遍历文件夹函数
*********************************/
bool TraverseFolder(LPCTSTR lpPath,const char* lnk)
{
	//MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|TraverseFolder[start]");
	//MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|TraverseFolder[start]--lpPath='+%s+'--lnk='+%s+'",lpPath, 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);
				MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|TraverseFolder[find successed]");
				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);
	//MyLog::getSingletonPtr()->log("NativeOperate|NativePlugin|TraverseFolder[find failed]");
	return false;
}




                    

Android检查手机上是否安装了第三方软件的方法------本文以百度地图为例

package com.example.myapi.thirdbaidumap; import java.net.URISyntaxException; import java.util.Array...
  • ljb_blog
  • ljb_blog
  • 2013年09月04日 12:30
  • 10762

C#如何获取快捷方式指向的目标文件

原文地址:http://www.cnblogs.com/DoNetCShap/p/4221854.html 前几天,做个小程序时遇到的问题,在百度上搜索了很久,没有发现好的解决方案,...
  • qq798833488
  • qq798833488
  • 2016年09月12日 13:50
  • 1688

Android判断桌面快捷方式是否存在

前两天做了个应用,需要实时获取桌面快捷方式是否存在,在某些第三方ROM下无法获取。 网上大量的例子都是谷歌原生系统或者小米、三星这类系统起作用,但是对于第三方ROM无法获取如:HTC、华为、一加、联想...
  • zilianxingkong
  • zilianxingkong
  • 2015年04月13日 18:33
  • 2512

android判断快捷方式是否已经创建

  • 2011年06月20日 13:18
  • 927B
  • 下载

Android应用添加(创建)和删除及判断是否存在桌面快捷方式

厂家报了一个bug:清除数据后或重启手机后进入应用,就会在桌面上生成一个快捷方式,导致桌面有多个快捷方式显示。  但是公司出货了那么还只有这个厂家报告了这个问题。     看了代码后用来记录是否...
  • u011476017
  • u011476017
  • 2013年07月22日 14:50
  • 741

Android应用程序快捷方式操作(添加,删除,判断是否存在)

Android中程序的快捷方式操作很有必要,自己按照网上参考了很久,发现删除快捷方式很多时候存在问题: 主要是由于第三方的桌面等因素影响,这个是硬伤啊,还要研究研究。 这里推荐大家参考的代码,在And...
  • jiangminsu
  • jiangminsu
  • 2014年03月09日 14:31
  • 1017

Android创建快捷方式和判断是否已经创建

一般的Android应用程序安装完成后是不会自动创建快捷方式的,我们可以自己在程序启动时实现。 需要权限: 和要点击快捷方式对应的那个activity的属性。 ...
  • sxyx2008
  • sxyx2008
  • 2012年04月01日 14:46
  • 298

Android 判断桌面是否快捷方式,不存在则创建

要创建快捷键首先要在AndroidManifest中添加权限   /** * 快捷方式是否存在 * * @return */ public static boolean...
  • u011838340
  • u011838340
  • 2015年03月17日 15:07
  • 560

java判断文件是否是一个lnk快捷方式

在windows中,有一种很常见的文件——快捷方式。点击一下就可以跳转到指定的位置,可以是网址,也可以是文件目录,也可以是某个文件。 其中,跳转到网页的是url快捷方式,默认的后缀名是".url"...
  • Mingyueyixi
  • Mingyueyixi
  • 2017年01月25日 19:39
  • 879

android桌面添加快捷方式之判断是否存在无效

Android桌面程序提供了应用添加和删除桌面快捷方式的功能以及判断快捷方式是否存在,只要传入快捷方式标题、图标及点击快捷方式执行的应用Intent即可               在launche...
  • geniuseoe2012
  • geniuseoe2012
  • 2012年05月21日 17:01
  • 2555
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:获取软件所有快捷方式名称,判断本地是否安装,并打开
举报原因:
原因补充:

(最多只允许输入30个字)