刘收获

导航

通过进程link路径(快捷方式路径)得到进程完整路径

程序中遇到的问题及解决方法:

#error WINDOWS.H already included. MFC apps must not #include <windows.h>
解决方法:把#include "afxtempl.h"放到程序所包含的所有头文件的前面


vs编译时出现大量ws2def.h的错误的解决方法
解决方法:(注意:顺序必须是这样)
#include "Winsock2.h"
#include "windows.h"


Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version
解决方法:在 项目/属性/常规/use of MFC 选项中选择 Use MFC in a Shared DLL

 

源码:

// InkNameToFullPathName.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "afxtempl.h"
#include "Winsock2.h"
#include <windows.h>
#include <afxctl.h>
#include <string.h>

using namespace std;
BOOL ExpandShortcut(PWCHAR outFile, PWCHAR inFile);

int main()
{

	//WCHAR FileFullPathData[MAX_PATH] = { 0 };
	WCHAR* FileFullPathData =  L"C:\\Users\\Public\\Desktop\\腾讯QQ.lnk" ;
	WCHAR FileRealFullPathData[MAX_PATH] = { 0 };
	if (wcsstr(FileFullPathData, L".lnk") != NULL)
	{
		if (ExpandShortcut(FileRealFullPathData, FileFullPathData))
		{
		}

	}
    return 0;
}

BOOL ExpandShortcut(PWCHAR outFile, PWCHAR inFile)
{
	IShellLink* ISLink;
	HRESULT hres;
	WIN32_FIND_DATA	FindDATA;
	CoInitialize(NULL);
	hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
		IID_IShellLink, (LPVOID*)&ISLink);
	if (SUCCEEDED(hres))
	{
		IPersistFile* IPFile;
		hres = ISLink->QueryInterface(IID_IPersistFile, (LPVOID*)&IPFile);
		if (SUCCEEDED(hres))
		{
			hres = IPFile->Load(inFile, STGM_READ);
			if (SUCCEEDED(hres))
				HRESULT hres = ISLink->GetPath(outFile, MAX_PATH, &FindDATA, SLGP_UNCPRIORITY);
				printf("%ls\n", outFile);
			if (SUCCEEDED(hres))
				return TRUE;
		}

		ISLink->Release();
	}

	return FALSE;
}

  

posted on 2018-01-19 21:59  沉疴  阅读(213)  评论(0编辑  收藏  举报