给应用程序创建快捷方式VC实现

VC 移动,复制,删除文件(SHFileOperation)总集 VC 移动,复制,删除文件(SHFileOperation) 技术汇总 立即下载
 1 引言
在Windows 3.x中,软件安装程序通常使用动态数据交换(DDE)的方法在程序管理器(Program Manager)中创建一个程序组(Program Group)。随着Windows95/98/NT这些32操作系统在系统内核和用户界面上的巨大改进,这种方法在已经不再适用了。现在,几乎所有的安装 程序都是在“开始”菜单中添加新的菜单项,或者在桌面上建立新的快捷方式(Shortcut)(有时还要建立相应的菜单组或文件夹来包含多个菜单项或快捷 方式),以便于用户使用时方便快捷地启动软件。
通过手工操作建立这些菜单项或快捷方式并不复杂,在一般Windows使用手册中都有介绍,相信大家都很熟悉,在此不再赘述。笔者在有关资料的基础上,通过实践摸索,找到了在应用程序中完成上述工作的方法。这正是开发安装程序所必需的。

2 快捷方式的实质
Windows 的快捷方式实际上是一个带有扩展名LNK的数据文件,其中包含有用于访问Windows某一对象(即在资源管理器中所能浏览的所有对象,包括文件,文件 夹,驱动器及打印机等)的有关信息,如目标对象的路径和名称,工作目录,要传递的命令行参数,运行时的初始显示状态,图标及其快捷键等。通过在快捷方式上单击鼠标右键并在弹出菜单中选择“属性”可以观察该快捷方式的这些性质。
快 捷方式的数据文件如果存放在C:/Windows/Desktop子目录下,这个快捷方式就会显示在桌面上,而如果存放在C:/Windows/” Start Menu”/Programs子目录下,这个快捷方式就会作为“开始”菜单的一个菜单项出现。而桌面上的文件夹和“开始”菜单的菜单组则是上述两个子目录 下的子目录的表现。

3 编程思想
Windows外壳(Shell)的快捷方式是以OLE技术的组件对象模型COM(Component Object Modal)为基础而设计的。利用COM模型,一个应用程序可以调用另一应用程序的某些功能。这方面的技术细节请参阅有关文献。
在 了解了上述基本原理后,创建Windows的快捷方式就比较容易了。首先利用OLE通过调用CoCreateInstance()函数建立一个 IID_IShellLink实例,并同时得到其接口指针。利用这个接口指针可以对其各项属性进行设置。为了使这些信息以快捷方式的数据文件 (*.lnk)格式保存起来,还需要从IID_IShellLink对象取得其IID_IPersistFile接口指针,以便于调用其成员函数Save ()保存前面设置的信息。
至于如何删除快捷方式以及创建和删除文件夹,则只需要简单地调用文件操作函数SHFileOperation()就可以了。
另外应该注意,在完成上述操作之后,都要调用SHChangeNotify()函数通知Windows外壳有关变化以使之及时更新其显示状态。

4 应用举例
为 了具体演示上述思想的使用方法,我们用MS VC++5.0编制了如下的示例程序(如下图)。该示例程序为一个基于对话框的应用程序,两个圆形按钮用于设置要创建/删除的文件夹或快捷方式的位置,下 面的四个按钮则用于执行不同的操作。另外,该程序还需要一个简单的对话框,用于输入要创建的文件夹或快捷方式的名称。

下面为建立该程序后需添加的代码(方框内部分):
// SortCut.cpp :
BOOL CSortCutApp::InitInstance()
{
    ......   
    CoInitialize (NULL);
    CSortCutDlg dlg;
    m_pMainWnd = &dlg;
    ......
    CoUninitialize ();
    return FALSE;
}
// SortCutDlg.cpp :
#i nclude "stdafx.h"
#i nclude "SortCut.h"
#i nclude "SortCutDlg.h"

#i nclude "NameDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//起始文件夹的PIDL
int nBeginAt=CSIDL_DESKTOPDIRECTORY;
......
///浏览文件夹
BOOL BrowseForFolder(
    LPITEMIDLIST pidlRoot,//浏览开始处的PIDL
    LPITEMIDLIST *ppidlDestination,
                //浏览结束时所选择的PIDL
    LPCSTR lpszTitle)//浏览对话框中的提示文字
{    BROWSEINFO BrInfo ;

    ZeroMemory( &BrInfo, sizeof(BrInfo)) ;
    BrInfo.hwndOwner = HWND_DESKTOP ;
    BrInfo.pidlRoot = pidlRoot ;
    BrInfo.lpszTitle = lpszTitle ;

    //浏览文件夹
    *ppidlDestination= SHBrowseForFolder(&BrInfo);
    //用户选择了取消按钮
    if(NULL == *ppidlDestination)
        return FALSE ;
    return TRUE ;
}
//取得快捷方式的目标应用程序名
SelectMenuItem( LPSTR szFileName)
{
    OPENFILENAME ofn ;
    static CHAR szFilter[] = "Programs/0*.exe/0" ;

    ZeroMemory(&ofn, sizeof( OPENFILENAME)) ;
    ofn.lStructSize = sizeof( OPENFILENAME) ;
    ofn.hwndOwner = HWND_DESKTOP;
    ofn.lpstrFilter = szFilter ;
    ofn.nFilterIndex = 0 ;
    ofn.nMaxFile = MAX_PATH ;
    ofn.lpstrTitle = "请选择目标应用程序:" ;
    ofn.lpstrFile = szFileName ;
    ofn.Flags = OFN_FILEMUSTEXIST |
            OFN_PATHMUSTEXIST | OFN_EXPLORER ;
    //文件浏览
    if(!GetOpenFileName( &ofn))//选择了取消按钮
        return FALSE ;
    return TRUE ;
}
//取得要创建的快捷方式的名字
BOOL GetShortcutCrt(LPSTR szPath)
{
    LPITEMIDLIST pidlBeginAt, pidlDestination ;
   
    // 取得开始菜单或桌面的PIDL
    SHGetSpecialFolderLocation( HWND_DESKTOP,
                nBeginAt, &pidlBeginAt) ;
    // 取得要创建的快捷方式所在的位置
    if( !BrowseForFolder(pidlBeginAt,                         &pidlDestination,
                "请选择快捷方式所在的位置:"))
        return FALSE ;
    // 把PIDL转换为路径名
    SHGetPathFromIDList( pidlDestination, szPath) ;
    // 取得快捷方式名称
    CNameDlg name_dlg;
    if(name_dlg.DoModal() == IDCANCEL)   
        return FALSE ;
    //把快捷方式名和扩展名.LNK添加到路径名后
    //形成完整的快捷方式数据文件名
    wsprintf(szPath+lstrlen(szPath),"//%s.lnk",
                name_dlg.m_strName) ;
    return TRUE ;
}
//创建快捷方式
BOOL CreateLink (
    LPSTR szPath,//快捷方式的目标应用程序名
    LPSTR szLink)//快捷方式的数据文件名(*.lnk)
{
HRESULT hres ;
IShellLink * psl ;
IPersistFile* ppf ;
WORD wsz[ MAX_PATH] ;
    //创建一个IShellLink实例
    hres = CoCreateInstance( CLSID_ShellLink, NULL,
        CLSCTX_INPROC_SERVER, IID_IShellLink,
        (void **)&psl) ;
if( FAILED( hres))
        return FALSE ;
    //设置目标应用程序
    psl -> SetPath( szPath) ;
    //设置快捷键(此处设为Shift+Ctrl+'R')
    psl -> SetHotkey( MAKEWORD( 'R',
            HOTKEYF_SHIFT |HOTKEYF_CONTROL)) ;
    //从IShellLink获取其IPersistFile接口
    //用于保存快捷方式的数据文件 (*.lnk)
    hres = psl -> QueryInterface( IID_IPersistFile,
            (void**)&ppf) ;
if( FAILED( hres))
        return FALSE ;
// 确保数据文件名为ANSI格式
MultiByteToWideChar( CP_ACP, 0, szLink, -1,
            wsz, MAX_PATH) ;
    //调用IPersistFile::Save
    //保存快捷方式的数据文件 (*.lnk)
hres = ppf -> Save( wsz, STGM_READWRITE) ;
    //释放IPersistFile和IShellLink接口
ppf -> Release( ) ;
psl -> Release( ) ;
return TRUE;
}
//删除文件夹
BOOL DeleteFolder( LPSTR pszFolder)
{
    SHFILEOPSTRUCT fos ;
   
    ZeroMemory( &fos, sizeof( fos)) ;
    fos.hwnd = HWND_DESKTOP;
    fos.wFunc = FO_DELETE ;
    fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ;
    fos.pFrom = pszFolder ;

    // 删除文件夹及其内容
    if( 0 != SHFileOperation( &fos))
        return FALSE ;
    return TRUE;
}
//取得要删除的快捷方式
BOOL GetShortcutDel (
        LPSTR lpszInitDir,//选择文件的开始目录
        LPSTR lpszShortcut)//快捷方式名
{
    OPENFILENAME ofn ;
    char szFilter[] = "Shortcuts/0*.lnk/0" ;

    ZeroMemory(&ofn,sizeof( OPENFILENAME));
    ofn.lStructSize = sizeof( OPENFILENAME) ;
    ofn.hwndOwner = HWND_DESKTOP ;
    ofn.lpstrFilter = szFilter ;
    ofn.nFilterIndex = 0 ;
    ofn.nMaxFile = MAX_PATH ;
    ofn.lpstrTitle = "请选择要删除的快捷方式:" ;
    ofn.lpstrFile = lpszShortcut;
    ofn.lpstrInitialDir = lpszInitDir ;
    ofn.Flags = OFN_FILEMUSTEXIST |
        OFN_PATHMUSTEXIST | OFN_EXPLORER |
        OFN_NODEREFERENCELINKS ;
    //文件浏览
    if(! GetOpenFileName( &ofn))//选择了取消按钮
        return FALSE ;
    return TRUE ;
}
//删除快捷方式的数据文件 (*.lnk)
BOOL DeleteLink( LPSTR lpszShortcut)
{
    SHFILEOPSTRUCT fos ;

    ZeroMemory( &fos, sizeof(fos)) ;
    fos.hwnd = HWND_DESKTOP ;
    fos.wFunc = FO_DELETE ;
    fos.pFrom = lpszShortcut;
    fos.pTo = NULL ;
    fos.fFlags = FOF_SILENT | FOF_ALLOWUNDO ;
    //删除快捷方式(*.lnk)
    if( 0 != SHFileOperation( &fos))
        return FALSE ;
    return TRUE ;
}
// 通知shell有关变化
void NotifyShell(LONG wEventId,//事件标志
            LPSTR szPath)//路径
{   
    SHChangeNotify( wEventId,
                    SHCNF_FLUSH | SHCNF_PATH,
                    szPath,0);
    //取得szPath的父目录
    char* p;
    for( p=szPath+lstrlen(szPath)-1;
            *p != '//';
            p--);
    *p='/0';
    SHChangeNotify(SHCNE_UPDATEDIR
            |SHCNE_INTERRUPT,
            SHCNF_FLUSH | SHCNF_PATH,szPath,0);
}
///////////////////////////////////////////////////
// CSortCutDlg dialog
CSortCutDlg::CSortCutDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CSortCutDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CSortCutDlg)
    //把圆形按钮“桌面”设为选中状态
    m_nLocation = 0;
    ……
}
……
void CSortCutDlg::OnCreateGroup()
{
    LPITEMIDLIST pidlBeginAt, pidlDestination ;
    char szPath[ MAX_PATH] ;

    // 取得开始菜单或桌面的PIDL
    SHGetSpecialFolderLocation( HWND_DESKTOP,
            nBeginAt, &pidlBeginAt) ;
    // 取得新建文件夹的父文件夹
    if( !BrowseForFolder(pidlBeginAt ,
            &pidlDestination,
            "请选择新建文件夹/菜单组的位置:"))
        return ;
    // 把PIDL转换为路径名
    SHGetPathFromIDList( pidlDestination, szPath) ;
    //取得新建文件夹的名字
    CNameDlg name_dlg;
    if(name_dlg.DoModal() == IDCANCEL)
        return;
    //形成完整的新建文件夹名
    wsprintf(szPath+lstrlen(szPath),"//%s",
                name_dlg.m_strName);
    //创建文件夹(子目录)
    if( !CreateDirectory( szPath, NULL))
    {
        MessageBox( "创建文件夹失败!") ;
        return ;
    }
    // 通知shell有关变化
    NotifyShell( SHCNE_MKDIR|SHCNE_INTERRUPT,
                szPath);
}
void CSortCutDlg::OnCreateItem()
{
    char szPath[MAX_PATH]="";
                //快捷方式的目标应用程序名
    char szLink[MAX_PATH]="";
                //快捷方式的数据文件名
    // 取得快捷方式的目标应用程序名
    if( !SelectMenuItem( szPath))
        return ;
    // 取得新建快捷方式所在的文件夹
    //并形成其数据文件名
    if( !GetShortcutCrt( szLink))
        return ;
    // 创建快捷方式
    if(!CreateLink( szPath, szLink) )
        return;
    // 通知shell有关变化
    NotifyShell( SHCNE_CREATE|SHCNE_INTERRUPT,
                szLink) ;
}
void CSortCutDlg::OnDeleteGroup()
{
    LPITEMIDLIST pidlBeginAt, pidlFolder ;
    char szPath[MAX_PATH]="";

    // 取得开始菜单或桌面的PIDL
    SHGetSpecialFolderLocation( HWND_DESKTOP,
                nBeginAt, &pidlBeginAt) ;
    // 取得要删除的文件夹
    if( !BrowseForFolder( pidlBeginAt, &pidlFolder,
            "请选择要删除的文件夹/菜单组:"))
        return ;
    // 把PIDL转化为路径名
    SHGetPathFromIDList( pidlFolder, szPath) ;
    // 删除文件夹
    if(!DeleteFolder( szPath))
        return ;
    // 通知shell有关变化
    NotifyShell( SHCNE_RMDIR|SHCNE_INTERRUPT,
                    szPath) ;
}
void CSortCutDlg::OnDeleteItem()
{
    LPITEMIDLIST pidlBeginAt ;
    char szShortcut[ MAX_PATH]="",
        szPath[ MAX_PATH]="";

    // 取得开始菜单或桌面的PIDL
    SHGetSpecialFolderLocation( HWND_DESKTOP,
                nBeginAt, &pidlBeginAt) ;
    // 把PIDL转化为路径名
    SHGetPathFromIDList( pidlBeginAt, szPath) ;
    // 取得要删除的快捷方式
    if( !GetShortcutDel( szPath, szShortcut))
        return ;
    // 删除快捷方式
    if( !DeleteLink(szShortcut))
        return ;
    // 通知SHELL有关改变
    NotifyShell( SHCNE_DELETE|SHCNE_INTERRUPT,
                szShortcut) ;
}
void CSortCutDlg::OnDesktop()
{
    //设置起始文件夹为桌面
    nBeginAt=CSIDL_DESKTOPDIRECTORY ;   
}
void CSortCutDlg::OnStartmenu()
{
    //设置起始文件夹为“开始”菜单
    nBeginAt=CSIDL_STARTMENU;
}
分组背包问题(MCKP)三大算法对比:贪心、Dyer-Zemel和动态规划谁更强? 本文深入对比了分组背包问题(MCKP)的三大主流算法:贪心算法、Dyer-Zemel算法和动态规划。通过分析各自的原理、实现及性能表现,揭示了贪心算法速度快但非最优,动态规划精确但受限于规模,而Dyer-Zemel算法则在效率与最优性间取得了最佳平衡,是解决中等至大规模MCKP问题的首选方案。 阅读详情

相关推荐

nbiot和2g_浅谈NBIOT

一、什么是NBIOT?1、概念窄带物联网(Narrow Band Internet of Things, NB-IoT),NB-IoT构建于蜂窝网络,只消耗大约180KHz的带宽,使用License频段,可采取带内、保护带或独立载波等三种部署方式,与现有网络共存。可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。2、NBIOT的特点和目标(1)超强覆盖:相对GPRS来...

weixin_39534100的博客 1704

VC 移动,复制,删除文件(SHFileOperation)

(转载于:http://hi.baidu.com/%B4%E7%B2%DD%D0%C4_/blog/item/e3a8200a28f6ea3ab1351d38.html) 总结一下SHFileOperation的用法,希望对大家有用 //删除文件或者文件夹 bool

blackbean的专栏 491

基于MATLAB实现的克里金插值的代码

参考代码 克里金插值matlab代码 youwenfan.com/contentcsb/81657.html。

jghhh01的博客 482

文件属性和删除只读文件,刷新

一、删除只读文件      DeleteFile删除文件:拒绝访问(5).     文件为只读属性,不能用 DeleteFile直接删除两种处理方法     详见MSDN:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365535(v=vs.85).aspx     FILE_ATTRIBUTE_READONLY:

weixin_36587312的博客 3527

一觉醒后ChatGPT 被淘汰了

近日,AI 界貌似出现了一种新的趋势:自主人工智能。这不是空穴来风,最近一个名为 AutoGPT 的研究开始走进大众视野。特斯拉前 AI 总监、刚刚回归 OpenAI 的 Andrej Karpathy 也为其大力宣传,并在推特赞扬:「AutoGPT 是 prompt 工程的下一个前沿。」

Rocky006的博客 13万+

在Ubuntu上通过Wine完美运行企业微信的详细指南

本文提供了在Ubuntu系统上通过Wine兼容层安装和运行企业微信的详细教程。针对官方未提供Linux版本的痛点,指南推荐使用Ubuntu Kylin团队优化打包的Wine环境,通过简单的命令行步骤即可完成部署,并涵盖启动、中文输入法配置、文件管理等常见问题的解决方案,帮助用户实现高效、稳定的办公沟通。

weixin_29306317的博客 232

对文件夹的操作SHFileOperation()的使用

#include SHFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名。   挤时间对这个函数进行了利用了一下。写了四个函数。可以很好的对文件夹进行操作。   /////////////////////////////////////   //函数名:DeleteFolder   //输入参数:LpszPath 要删除的路径指针   //作用:删除指

kingjo002的专栏 820

逆向淘宝x-mini-wua:从加密算法到设备指纹的生成逻辑

本文深入剖析了淘宝风控核心参数x-mini-wua的生成逻辑与加密算法。通过逆向分析,揭示了其作为设备“身份证”的作用,详细拆解了从硬件信息采集、SG_INNER_DATA文件解密、关键参数提取到最终长wua合成的完整技术链条,并探讨了模拟生成与绕过风控的实战思路及注意事项。

year5的博客 1076

C++在不同环境下开发时添加应用程序快捷方式图标

虽然在Linux环境下也是使用CMake编程,但是上述方法不适用,因为在Linux环境下生成的可执行程序是没有图标的,只有创建出来的快捷方式才可以设置图标。右键-资源文件-添加-资源-ico-导入,然后选择自己的ico图标,重新生成就好了。

m0_51415606的博客 1024

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

AI赋能传染病建模:从数据到动力学模型的本地实践指南

这次我们来看一个将 AI 与传染病动力学建模结合的前沿方向。想象一下,你手头有一份流感爆发的病例数据,传统的建模方法可能需要复杂的微分方程和大量的手动调参,而 AI 模型能否直接从数据中“学习”出传播规律,甚至自动跑通整个建模流程?这正是当前研究的热点。根据《Nature》的最新综述,人工智能正在重塑传染病流行病学建模,从参数推断、趋势预测到多源数据融合,AI 技术为解决传统建模中的计算瓶颈和数据难题提供了全新路径。 对于开发者、数据科学家或公共卫生领域的研究者而言,最关心的是:这套方法能不能在本地跑起来?

weixin_29051811的博客 298

注册表编程

VC 实现文件与应用程序关联: http://www.cnblogs.com/RascallySnake/archive/2013/03/01/2939102.html

Tiancaizhaohaiwei的博客 301

ANSYS WORKBENCH——参数化建模以及参数优化(结果导出为Excel)

目录 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 ​ 注:印记面的创建 5、模型属性设置 注:设置优化目标 6、回主界面,选择direct optimization模块 1、打开软件workbench 2、找到static structure,双击打开 3、选择材料 4、参数化建模 至此参数化建模就已经完成啦 注:印记面的创建 印记面一般是一个虚拟的区域,参与实际的网格划分,但是只是由于载.

python_AI_fans的博客 1万+

vc删除应用程序快捷方式

//删除快捷方式的数据文件   (*.lnk) BOOL   DeleteLink(   LPSTR   lpszShortcut) { SHFILEOPSTRUCT   fos   ; ZeroMemory(   &fos,   sizeof(fos))   ; fos.hwnd   =   HWND_DESKTOP   ; fos.wFunc   =   FO_DELETE   ; fos.pFrom   =   lpszShortcut; fos.pTo   =   NULL   ; fos.fFla

houjinfeng210的专栏 3184

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

VC操作Windows快捷方式

简介:这是VC操作Windows快捷方式的详细页面,介绍了和vc,有关的知识,加入收藏请按键盘ctrl+D,谢谢大家的观看!要查看更多有关信息,请点击此处 新建和解析 主要用到的是COM组件。IShellLink和IPersistFile 需要添加的头函数 shobjidl.h IPersistFile主要用到两个成员函数: 1、Save。保存内容到文件中去 2、Load。读取 Load的函数原型 HRESULT Load( LPCOLSTR pszFileName, //快捷

Gary's Blog --- A C++ programmer 1297

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何为程序创建快捷方式

转载之:http://www.cnblogs.com/morewindows/archive/2011/08/14/2138412.html 有时候,为了方便用户使用我们编写的程序,需要在桌面,快速启动或程序组中创建程序的快捷方式。下面就介绍在VC下如何为程序创建快捷方式。 一.得到桌面,快速启动或程序组的路径 这里介绍二个win32 API函数来完成这个任务。 第一个函数 获得系统特

niushitang的专栏 2170

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

创建快捷方式

IPersistFile VC操作Windows快捷方式(自己总结) 二个操作:新建和解析 主要用到的是COM组件。IShellLink和IPersistFile 需要添加的头函数 shobjidl.h IPersistFile主要用到两个成员函数: 1、Save。保存内容到文件中去 2、Load。读取  Load的函数原型  HRESULT Load(    LPCOLSTR pszF...

qq_43080331的博客 366

VC 为程序创建快捷方式的详细讲解

VC 为程序创建快捷方式的详细讲解

ffygvf的博客 234

IShellLink应用(创建快捷方式)

VC操作Windows快捷方式(自己总结) 二个操作:新建和解析 主要用到的是COM组件。IShellLink和IPersistFile 需要添加的头函数shobjidl.h IPersistFile主要用到两个成员函数:1、Save。保存内容到文件中去2、Load。读取Load的函数原型HRESULT Load(LPCOLSTR pszFileName, //...

dizhi5320的博客 247

VC中创建快捷方式

1、共同函数 BOOL CreateLink(LPSTR   szPath,//快捷方式的目标应用程序名              LPSTR   szLink)//快捷方式的数据文件名(*.lnk)    {    HRESULT   hres;    IShellLink* psl;    IPersistFile*   ppf;    WCHAR wsz[MAX_PATH]

thanklife的专栏 2444

VC创建快捷方式

快捷方式: 现在,几乎所有的安装 程序都是在“开始”菜单中添加新的菜单项,或者在桌面上建立新的快捷方式(Shortcut)(有时还要建立相应的菜单组或文件夹来包含多个菜单项或快捷 方式),以便于用户使用时方便快捷地启动软件。当启动一个安装程序后,程序安装完成后会自动创建相应的快捷方式。 Windows 的快捷方式实际上是一个带有扩展名LNK的数据文件,其中包含有用于访问Windows

cp32212116的专栏 1356

VC操作Windows快捷方式(自己总结)

原文链接:http://www.ccgcn.com/bbs/viewthread.php?tid=2074&extra=page%3D1 VC操作Windows快捷方式(自己总结) VC操作Windows快捷方式(自己总结) 二个操作:新建和解析 主要用到的是COM组件。IShellLink和IPersistFile 需要添加的头函数 shobjidl.h IPers

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1513

VC 创建快捷方式和得到桌面路径

 需要先调用 CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); 使用CoUninitialize() 释放资源 //注意lpLink 必须以.lnk为扩展名//如:CeateShortcut(GetDesktopPath()  + L"//QQ.lnk",  L"C://Tencent//QQ//QQ.exe", L"C://Tencent

i_air的专栏 966

vc 创建快捷方式

<br />    //判断是否是第一次运行,如果是第一次运行就创建桌面快捷方式<br />     DWORD dwMark = 0;<br />     DWORD dwSize = sizeof(dwMark);<br /><br />     SHGetValue(HKEY_CURRENT_USER, _T("Software//hrjd//SearchMachine//SearchKey"), TEXT("mark"), NULL, &dwMark, &dwSize);<br /><br /

学而不思则罔 1368
上一篇: 一个非常酷的网站(应该是FLASH的)
下一篇: 编程8字箴言
yxyhack
博客等级 码龄19年 296粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值