⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hmhfunc.cpp

📁 visual c++ 实例编程
💻 CPP
字号:
#include "stdafx.h"
#include "HMHFunc.h"




/*
获取快捷方式文件信息
FileName:快捷方式文件名
FilePath: 取得其指向的文件
CommandLine: 得其指向的命令行
WorkDir: 工作目录
IconFile: 其图标文件
IconIndex: 其图标文件的索引

返回1成功,否则返回0
*/

int HMHGetLinkInfo(LPCTSTR FileName,CString &FilePath,CString &CommandLine,CString &WorkDir,CString &IconPath,int &IconIndex)
{
	HRESULT hres;
	IShellLink *psl;
	
	hres = CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
		IID_IShellLink, (void **)&psl);
	if (SUCCEEDED (hres))
	{
		IPersistFile *ppf;
		
		hres = psl->QueryInterface (IID_IPersistFile, (void **)&ppf);
		if (SUCCEEDED (hres))
		{ 
			char LinkFile[MAX_PATH];
			WORD wsz[MAX_PATH];
			
			strcpy(LinkFile,FileName);
			MultiByteToWideChar (CP_ACP, 0, LinkFile, -1, wsz, MAX_PATH);
			hres=ppf->Load(wsz,STGM_READ);
			if (hres==S_OK)
			{
				hres = psl->GetPath (FilePath.GetBuffer(MAX_PATH),MAX_PATH,NULL,0);
				FilePath.ReleaseBuffer();
				if ( !SUCCEEDED (hres))
					return 0;
				hres=psl->GetArguments(CommandLine.GetBuffer(MAX_PATH),MAX_PATH);
				CommandLine.ReleaseBuffer();
				if ( !SUCCEEDED (hres))
					CommandLine.Empty();
				hres=psl->GetWorkingDirectory(WorkDir.GetBuffer(MAX_PATH),MAX_PATH);
				WorkDir.ReleaseBuffer();
				if ( !SUCCEEDED (hres))
					WorkDir.Empty();
				hres=psl->GetIconLocation(IconPath.GetBuffer(MAX_PATH),MAX_PATH,&IconIndex);
				IconPath.ReleaseBuffer();
				if ( !SUCCEEDED (hres))
				{
					IconPath.Empty();
					IconIndex=0;
				}								
			}
			ppf->Release ();
			psl->Release ();
		}
	}
	return 1;
}

/*
获取快捷方式文件 FileName 指向的文件路径FilePath
返回1成功,否则失败
*/
int HMHGetLinkInfo(LPCTSTR FileName,CString &FilePath)
{
	CString Str;
	int Index;
	return HMHGetLinkInfo(FileName,FilePath,Str,Str,Str,Index);
}


/*
建立快捷图标
FileName:欲建立的快捷方式文件名(扩展名为lnk)
FilePath:建立的快捷方式指向的路径
CommandLine:快捷方式的命令行
WorkDir:工作目录
IconFile:图标文件
IconIndex:图标文件中的索引
*/
int HMHCreateLink(LPCTSTR FileName, LPCTSTR FilePath,LPCTSTR CommandLine,LPCTSTR WorkDir,LPCTSTR IconPath,int IconIndex)
{
	HRESULT hres;
	IShellLink* psl;
	hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,	IID_IShellLink, (LPVOID*) &psl);	
	if (SUCCEEDED(hres))	
	{	
		IPersistFile* ppf;
		
		psl->SetPath(FilePath);
		psl->SetArguments(CommandLine);
		psl->SetWorkingDirectory(WorkDir);
		psl->SetIconLocation(IconPath,IconIndex);
		psl->SetShowCmd(SW_SHOW);
		hres = psl->QueryInterface( IID_IPersistFile, (LPVOID *) &ppf);
		if (SUCCEEDED(hres))		
		{			
			WORD wsz[MAX_PATH];
			MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, FileName, -1, wsz,MAX_PATH);
			hres = ppf->Save(wsz, TRUE);
			if (hres != S_OK )
				return 0;
			ppf->Release();		
		}
		psl->Release();	
	}	
	else 
		return 0;
	return 1;
}

//建立Internet快捷方式
int HMHCreateInternetLink(LPCTSTR FileName, LPCTSTR InternetPath, LPCTSTR IconFile, int IconIndex)
{
	CFile LinkFile;
	CString String;

	if (LinkFile.Open(FileName,CFile::modeCreate|CFile::modeWrite)==0)
		return 0;
	String="[InternetShortcut]\r\n";
	LinkFile.Write((void*)(LPCTSTR)String,String.GetLength());
	String.Format("Url=%s\r\n",InternetPath);
	LinkFile.Write((void*)(LPCTSTR)String,String.GetLength());
	if (IconFile!="")
	{
		String.Format("IconFile=%s,%d",IconFile,IconIndex);
		LinkFile.Write((void*)(LPCTSTR)String,String.GetLength());
	}
	LinkFile.Close();
	return 1;
}


//判断文件是否存在 
BOOL HMHFileExist(LPCTSTR FileName)
{
	CFileFind ff;
    

	if (ff.FindFile(FileName)==0)
		return FALSE;
	else
		return TRUE;
}

/*
返回Windows版本号
返回代号:
HMHWINDOWS31:Win32s on Windows 3.1. 
HMHWINDOWS95:Win32 on Windows 95
HMHWINDOWS98:Win32 on Windows 98
HMHWINDOWSNT:Win32 on Windows NT
//4:Win32 on Windows CE

未知操作系统,返回-1
*/
HMHWindowsVer HMHGetWindowVer(void)
{
	
	OSVERSIONINFO OsVer;
	HMHWindowsVer nRes;
	
	OsVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (GetVersionEx(&OsVer))
	{
		switch(OsVer.dwPlatformId)
		{  
		case VER_PLATFORM_WIN32s: //Win32s on Windows 3.1.
			nRes=HMHWINDOWS31;	//Win32s
			break;				  			
		case VER_PLATFORM_WIN32_WINDOWS: //WIN32 on 95 or 98
			//determine if Win95 or Win98 
			if (OsVer.dwMinorVersion == 0)   
			{
				nRes=HMHWINDOWS95;//Windows95				
			}
			else
			{    
				nRes=HMHWINDOWS98;//Windows98
			}
			break;
		case VER_PLATFORM_WIN32_NT: //Win32 on Windows NT.
			nRes=HMHWINDOWSNT;//Windows NT
			break;
/*		case VER_PLATFORM_WIN32_CE:  //Win32 on Windows CE
			nRes=4;
			break;	*/
		default:
			nRes=HMHWINDOWSNOTKNOW;
		} 
	}
	return nRes;
}


//将图标文件字符串 "xxxxx,n" 分解成文件名及图标索引
void HMHGetIconFile(const CString &IconFile, CString &IconFileName, int &IconIndex)
{
	CString Str;
	int Index;

	IconIndex=0;
	IconFileName=IconFile;

	if ( (Index=IconFile.ReverseFind(','))!=-1 )
	{
		Str=IconFile.Right(IconFile.GetLength()-Index-1);
		IconFileName=IconFile.Left(Index);
		IconIndex=atoi(Str);
	}	
}

//返回文件FileName所在的目录,不包括'\\'
CString HMHGetFileAtDir(LPCTSTR FileName)
{
	CString DirName=FileName;

    int i=DirName.ReverseFind('\\');
	if (i!=-1)
		DirName=DirName.Left(i);
	else
		DirName.Empty();

	return DirName;
}

//将数值转换为字符串
CString HMHNumToString(LONG Number)
{
	char szTemp[255];

	_ltoa(Number,szTemp,10);
	return (CString)szTemp;
}

/*
重新启动或关闭Windows NT系统
PromptText:对话框提示信息
DelayTime:对话框显示时间
*/
BOOL HMHRestartWindowNT(BOOL Reboot,LPSTR PromptText,int DelayTime)
{
	if (HMHGetWindowVer()==HMHWINDOWSNT)
	{
		HANDLE hToken;              // handle to process token 
		TOKEN_PRIVILEGES tkp;       // pointer to token structure  
		BOOL fResult;               // system shutdown flag  
		// Get the current process token handle so we can get shutdown // privilege.  
		if (!OpenProcessToken(GetCurrentProcess(), 
			TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
			return 0;
		// Get the LUID for shutdown privilege.  
		LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);  
		tkp.PrivilegeCount = 1;  // one privilege to set    
		tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;  
		// Get shutdown privilege for this process.  
		AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); 
		// Cannot test the return value of AdjustTokenPrivileges.  
		if (GetLastError() != ERROR_SUCCESS) 
			return 0;
		// Display the shutdown dialog box and start the time-out countdown.  
		fResult = InitiateSystemShutdown( 
			NULL,                                  // shut down local computer 
			PromptText,
			DelayTime,                             // time-out period 
			FALSE,                                 // ask user to close apps 
			Reboot);                                 // reboot after shutdown  
		if (!fResult) 
		{
			return 0;
		} 
		return 1;
	}
	return 0;
	
}

//返回系统描述文件夹 nFolder 的路径
CString HMHGetSpecifyFolderPath(const int nFolder)
{
	int nSysFolder[]={CSIDL_DESKTOP,CSIDL_STARTMENU,CSIDL_FAVORITES,CSIDL_PERSONAL,CSIDL_RECENT,
		CSIDL_SENDTO,CSIDL_STARTUP,CSIDL_PROGRAMS,CSIDL_TEMPLATES,CSIDL_FONTS,CSIDL_APPDATA,CSIDL_INTERNET_CACHE,CSIDL_NETWORK};
	char *RegKeyName[]={"Desktop","Start Menu","Favorites","Personal","Recent",
		"SendTo","Startup","Programs","Templates","Fonts","AppData","Cache","NetHood"};
	
	CString FolderPath="";
	ITEMIDLIST Dir1;
	char Ddir[MAX_PATH];
	LPITEMIDLIST Dir=&Dir1;
	BOOL NoError=FALSE;

	for (int i=0;i<sizeof(nSysFolder)/sizeof(int);i++)
	{
		if ( *(nSysFolder+i)==nFolder)
			break;
	}
	if (i<sizeof(nSysFolder)/sizeof(int))
	{
		HKEY m_hKey;
		DWORD dwSize=255,dwType=REG_SZ;
		char String[256],StrKey[256];
		
		strcpy(StrKey,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders");
		if (HMHGetWindowVer()==HMHWINDOWSNT)
			strcpy(StrKey,"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders");
		if (ERROR_SUCCESS==::RegOpenKeyEx(HKEY_CURRENT_USER,StrKey,NULL,KEY_ALL_ACCESS,&m_hKey))
		{
			if (ERROR_SUCCESS==::RegQueryValueEx(m_hKey,RegKeyName[i],0,&dwType,(BYTE *)String,&dwSize))
			{
				FolderPath=String;
				NoError=TRUE;
			}				
		}
	}	
	if (NoError==FALSE)
	{
		if (::SHGetSpecialFolderLocation(NULL,nFolder,&Dir)==NOERROR)
		{
			::SHGetPathFromIDList(Dir,Ddir);
			FolderPath=Ddir;
		}
	}
	if ( ! (FolderPath.GetLength()>=3 && FolderPath.GetAt(2)=='\\'))
	{
		::ExpandEnvironmentStrings(FolderPath.GetBuffer(MAX_PATH),Ddir,MAX_PATH);
		FolderPath.ReleaseBuffer();
		FolderPath=Ddir;
	}
	return FolderPath;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -