工控编程吧
标题:
223上位机VC MFC在桌面菜单等目录创建应用程序快捷方式
[打印本页]
作者:
qq263946146
时间:
2016-2-28 12:37
标题:
223上位机VC MFC在桌面菜单等目录创建应用程序快捷方式
(, 下载次数: 0)
上传
点击文件名下载附件
223上位机VC MFC在桌面菜单等目录创建应用程序快捷方式
功能展示
我们电脑桌面或桌面左下脚的开始菜单都有很程序的快捷图标,双击可以很方便的打开我们想要的程序,我们当前例程也实现向桌面和开始菜单创建指定程序的快捷图标,效果如图,首先通过<选择要创建快捷图标的程序>或<获取自身路径>指定要创建快捷图标的程序,通过另外两按钮创建快捷图标;
要点提示
例程是通过函数SHChangeNotify()创建指定程序的快捷图标;
WINSHELLAPI void WINAPI SHChangeNotify(
LONG wEventID, //指定事件类型
UINT uFlags, //确定dwItem1和dwItem2作的标志
LPCVOIDdwItem1,
LPCVOID dwItem2
);
1.wEventId:其取值有很多
SHCNE_ASSOCCHANGED:修改文件关联
SHCNE_ATTRIBUTES:改变文件属性
SHCNE_CREATE:创建新文件
SHCNE_DELETE:删除文件
更多取值可以查阅MSDN手册
2.uFlags:
指示dwItem1和dwItem2参数含义的标志。uFlags参数必须是以下值之一:
SHCNF_DWORD
dwItem1和dwItem2参数是DWORD值.
SHCNF_IDLIST
dwItem1和dwItem2是代表这个项目被变更影响的ITEMIDLIST结构的地址。每个ITEMIDLIST必须是相对于桌面的文件夹。
SHCNF_PATH
dwItem1和dwItem2是最大长度为MAX_PATH的以'\0'结束的字符串的地址,包含了该被变更影响的项目的完整路径名称。
SHCNF_PRINTER
dwItem1和dwItem2是以'\0'结束的字符串的地址,代表被变更影响的打印机的友好名称。
SHCNF_FLUSH
函数不应该返回,直到已通知所有受影响的组件。由于这标志修改其他数据类型标志,它不能由自己使用。
SHCNF_FLUSHNOWAIT
函数应该开始通知所有受影响的组件,但当进程已经开始通知时就应返回。由于这标志修改其他数据类型标志,它不能由自己使用。此标志包含SHCNF_FLUSH。
SHCNF_NOTIFYRECURSIVE
Notify clients registered for all children.
dwItem1
可选。第一个事件相关的值。
dwItem2
可选。第二个事件相关的值。
实现功能
1.新建基于对话框的应用程序
2.拖拽一编辑框ID为IDC_EDIT1用于显示要创建快捷图标的程序路径
3.拖拽按钮控件<选择要创建快捷图标的程序><获取自身路径><创建桌面快捷图标><创建开始菜单快捷图标>关联函数实现相应功能
void CGkbc8Dlg::OnChoose()
{
CFileDialog Dlg(FALSE,"*.exe","可执行文件",OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,"可执行程序|*.exe||",NULL);
if(Dlg.DoModal()==IDOK)
SetDlgItemText(IDC_EDIT1,Dlg.GetPathName());
}
void CGkbc8Dlg::OnGetme()
{
char buf[MAX_PATH];
GetModuleFileName(NULL,buf,MAX_PATH);
SetDlgItemText(IDC_EDIT1,buf);
}
void CGkbc8Dlg::OnDesktop()
{
CString sEXEPathName;
GetDlgItemText(IDC_EDIT1,sEXEPathName);
if(sEXEPathName.Right(sEXEPathName.GetLength()-sEXEPathName.ReverseFind('.'))!=".exe") return;
LPITEMIDLIST pid;
char path[MAX_PATH];
::SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pid);
::SHGetPathFromIDList(pid,path);//获取桌面目录
if(!CreateShortcut(sEXEPathName,CString(path)))
MessageBox("创建桌面快捷图标失败");
}
复制代码
void CGkbc8Dlg::OnStartmenu()
{
CString sEXEPathName;
GetDlgItemText(IDC_EDIT1,sEXEPathName);
if(sEXEPathName.Right(sEXEPathName.GetLength()-sEXEPathName.ReverseFind('.'))!=".exe")
return;
//<>
LPITEMIDLIST pid;
char path[MAX_PATH];
::SHGetSpecialFolderLocation(NULL,CSIDL_PROGRAMS,&pid);
::SHGetPathFromIDList(pid,path);//开始菜单目录
//<>
if(!CreateShortcut(sEXEPathName,CString(path)))
MessageBox("创建开始菜单快捷图标失败");
}
复制代码
其中CreateShortcut()函数为我们自定义函数,函数体过长,可打开例程源码查阅
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/22c3906c1f0ba327dc5c45893500f531/0/0/w_19rszscgst.swf-albumId=5382279009-tvId=5382279009-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4