VC中怎样Copy当前程序到启动目录

VC中怎样Copy当前程序到启动目录,第1张

BOOL DataManageDlg::CopyFiles(CString sForm, CString sTo)拷贝函数

{

BOOL isb

SHFILEOPSTRUCT fo

TCHAR szFrom[MAX_PATH+1]

TCHAR szTo[MAX_PATH+1]

ZeroMemory(&fo, sizeof(fo))

ZeroMemory(szFrom, sizeof(szFrom))

ZeroMemory(szTo, sizeof(szTo))

// CString strPath

isb=false

CString str1

// strPath = _T("D:\\vcvc\\ado10\\Debug\\")

// strPath += _T("1.txt")

_tcscpy(szFrom, sForm)

_tcscpy(szTo, sTo)

fo.hwnd=this->m_hWnd

fo.wFunc = FO_COPY

fo.pFrom = szFrom

fo.pTo = szTo

// fo.fFlags = FOF_SIMPLEPROGRESS

// fo.fFlags = FOF_ALLOWUNDO

fo.fFlags=FOF_NOCONFIRMATION

::SHFileOperation(&fo)

isb=true

return isb

}

启动路径C:\Documents and Settings\All Users\「开始」菜单\程序\启动

///////////////////////////////////////////////

//////////////////////////////////////////////

///////////////////////////////////////////////

//CreateShortcut("c:\\windows\\notepad.exe", //快捷方式指向的应用程序

//"c:\\config.sys", //命令行参数

//"c:\\windows", //起始位置(工作目录)

//"c:\\windows\\desktop\\记事本.lnk", //快捷方式的文件名(包含路径)

//"记事本")//快捷方式的描述

HRESULT CreateShortcut(LPCSTR pszPathObj,LPSTR pszParam,LPSTR pszPath,LPSTR pszPathLink,LPSTR pszDesc)

{

HRESULT hres//调用 COM 接口方法之后的返回值

IShellLink *pShellLink

IPersistFile *pPersistFile

WCHAR wsz[MAX_PATH]//UNICODE串, 用来存放快捷方差芹仿式文件名

CoInitialize(NULL)//初始化 COM 库

//创建 COM 对首配象并获取其实现的接口

hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink,(void **)&pShellLink)

if(FAILED(hres))

{

pShellLink ->Release()//释放 IShellLink 接口

CoUninitialize()//关闭 COM 库, 释放所有 COM 资源

return FALSE

}

//设置快捷虚纤方式的各种属性

pShellLink->SetPath(pszPathObj)//快捷方式所指的应用程序名

pShellLink->SetArguments(pszParam)//参数

pShellLink->SetDescription(pszDesc)//描述

pShellLink->SetWorkingDirectory(pszPath)//设置工作目录

//pShellLink->SetIconLocation("C:\\Icon.ico",0)//快捷方式的图标

//pShellLink->SetHotkey(热键)//启动快捷方式的热键(只能是Ctrl+Alt+_)

//pShellLink->SetShowCmd(SW_MAXIMIZE)//运行方式(常规窗口,最大化,最小化)

//查询 IShellLink 接口从而得到 IPersistFile 接口来保存快捷方式

hres = pShellLink->QueryInterface(IID_IPersistFile,(void **)&pPersistFile)

if(FAILED(hres))

{

pPersistFile ->Release()//释放 IPersistFile 接口

pShellLink ->Release()//释放 IShellLink 接口

CoUninitialize()//关闭 COM 库, 释放所有 COM 资源

return(FALSE)

}

//转换 ANSI 串为 UNICODE 串(COM 内部使用 NUICODE)

MultiByteToWideChar(CP_ACP, 0, pszPathLink, -1, wsz, MAX_PATH)

//使用 IPersistFile 接口的 Save() 方法保存快捷方式

hres = pPersistFile ->Save(wsz, TRUE)

//释放 IPersistFile 接口

pPersistFile ->Release()

//释放 IShellLink 接口

pShellLink ->Release()

//关闭 COM 库, 释放所有 COM 资源

CoUninitialize()

return(hres)

}

GetCurrentDirectory是取得当前工作路径,如果程序中改变了这个路径粗核比如用CFileDialog打开了一个文件,GetCurrentDirectory得到的结果会发生变化。

一般来说,取得亮握程序运行目录的方法是用GetModuleFileName来获取当前Module的完整路径,当其第一个参数hModule置NULL的时候得到当前APP的绝对路径,然后去掉最后一个"\"以后的部分即敬凳庆文件名部分,就得到了程序运行目录。

大体上可以这样写(仅供参考):

char buffer[MAX_PATH+1]

::GetModuleFileName (NULL,buffer,MAX_PATH)

for(int i=MAX_PATH-1i>=0i--)

{

if(*(buffer+i)!='\\')

{

*(buffer+i)=0

}else{

break

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12319879.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-22
下一篇2023-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存