深入浅出屏幕保护程序编程

C++程序如何禁止或暂停Windows的自动屏保、休眠等节电模式 如何禁止或暂停Windows的自动屏保、休眠等节电模式 ...... 阅读详情
深入浅出屏幕保护程序编程  作者:董晓 发布时间:2001/03/28
 
文章摘要:
  现在V程序画面越来越精美,功能越来越强大,可以提供图象,动画,音频,视频等所有的多媒体功能。尽管我们可以很容易获得漂亮的屏幕保护程序,但自己制作屏幕保护程序对用户也许更有吸引力,下文便对如何制作屏幕保护程序做了详细介绍。
       

正文: 



深入浅出屏幕保护程序编程
  


  读者对屏幕保护程序已经相当熟悉了。去年泰坦尼克号的屏幕保护程序风行了全世界,足见其魅力。有的屏幕保护程序功能十分强大,可以提供图象,动画,音频,视频等所有的多媒体功能。尽管可以很容易获得漂亮的屏幕保护程序,但拥有自己的屏幕保护程序对用户也许更有吸引力。
  VC5.0/6.0是开发屏幕保护程序的好工具。静态链接库SCRNSAVE.LIB对屏幕保护程序提供了支持。SCRNSAVE.LIB包含了建立屏幕保护程序的主程序和缺省功能,用户可以方便地使用SDK进行编程并与之连接。尽管SDK编程相对MFC麻烦,但编写相对简单的屏幕保护程序却相当容易甚至比用MFC编程更简单。
  也可以使用MFC编写屏幕保护程序。但遗憾的是MFC不支持SCRNSAVE.LIB,必须手工完成原来由SCRNSAVE.LIB提供的功能,比较麻烦和不好理解。不过,编写复杂的屏幕保护程序时,MFC对于显示模块和对话框处理可以提供比SDK方便得多的功能。为简单起见先介绍如何使用SDK编写屏幕保护程序。

一. 屏幕保护程序和SCRNSAVE.LIB

  先从开发者的角度对屏幕保护程序说明如下:
  首先,屏幕保护程序是Win32 API 支持一种特殊的应用程序并由系统自动激活。其机制是当条件满足时,系统向当前活动窗口发出字参数 wParam 值为SC_SCREENSAVE 的WM_SYSCOMMAND消息,然后由当前活动窗口执行SYSTEM.INI文件中[boot]区指定的屏幕保护程序。

  屏幕保护程序激活的条件是
  1. 在规定时间内没有鼠标或键盘输入.
  2. 当前的活动窗口是标准的WINDOWS应用程序。因为非WINDOWS应用,不会理睬WM_SYSCOMMAND消息。
  3. 显然,如果当前活动的程序接管了字参数 wParam 值为SC_SCREENSAVE 的WM_SYSCOMMAND 消息并且不传递到 DefWindowProc函数就可以禁止屏幕保护程序。这对某些运行中不愿意被打断的程序如视频播放,光盘刻录程序特别有用。

  其次,可以在控制面板的显示器中选择需要的屏幕保护程序,并可以配置屏幕保护程序的参数。屏幕保护程序应该提供配置屏幕保护程序的对话框。

  再次,屏幕保护程序有特别的输出函数,资源定义和变量声明。SCRNSAVE.LIB包含了建立屏幕保护程序的主程序。屏幕保护程序启动时SCRNSAVE.LIB自动创建一全屏窗口,并描述窗口类为无光标的满黑屏。
  用户编写的屏幕保护程序必须包含三个基本函数ScreenSaverProc,ScreenSaverConfigureDialog 和RegisterDialogClasses 并与SCRNSAVE.LIB连接。
  1.ScreenSaverProc 窗口函数处理特定的消息并把未处理的消息传递给SCRNSAVE.LIB 。ScreenSaverProc 一般处理以下消息:
  WM_CREATE 读取.INI或注册表的初始化数据,设置定时器以及其他初始化操作。
  WM_ERASEBKGND 擦除背景为下一步绘图作准备。
  WM_TIMER 进行绘图输出。用户可以实现自己的动画功能以及其他操作。
  WM_DESTROY 删除定时器以及其他对象
  ScreenSaverProc 把未处理的消息传递到SCRNSAVE.LIB中的 DefScreenSaverProc函数 处理。由它完成许多复杂和关键的操作比如何时激活,何时关闭等,大大方便了屏幕保护程序的编写。
  2.ScreenSaverConfigureDialog函数处理屏幕保护程序配置对话框。该对话框由控制面板的显示器设置程序调用。用户输入的配置数据输出到.INI或注册表中。
  3. RegisterDialogClasses函数登记屏幕保护程序配置对话框的窗口类。如果不使用特殊的窗口或控件,可以简单地返回TRUE。

  另外,编写屏幕保护程序还有一些原则。
  1. 为使控制面板能够识别,屏幕保护程序的扩展名必须改为.SCR并存放在WINDOWS目录下。
  2. 屏幕保护程序的图标(ICON)在资源文件中必须定义为ID_APP。ID_APP由系统的SCRNSAVE.H.定义。
  3. 资源文件中必须包含一描述字符串。该字符串用于控制面板显示屏幕保护程序的名字。它必须位于字符串表的首位。SCRNSAVE.H.定义其ID为1。
  4. 资源文件中屏幕保护程序配置对话框的ID必须为DLG_SCRNSAVECONFIGURE。它由系统的SCRNSAVE.H.定义。

二.编程实例

  1.最小的屏幕保护程序MiniSaver。这是一个仅包含最基本模块的屏幕保护程序,运行时在屏幕上显示一行活动的文字。步骤如下:
  第一步,在VC5.0/6.0中建立32位应用工程(不选MFC WIZARD EXE).建立如下的MiniSaver.CPP文件:
#include
#include
// SCRNSAVE.LIB的头文件
#include "resource.h"
//声明三个基本的函数
LRESULT WINAPI ScreenSaveProc
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI ScreenSaveConfigureDialog
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI RegisterDialogClasses(HINSTANCE);
//定义三个基本的函数
LRESULT WINAPI ScreenSaverProc
(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam)
{ HDC hDC;
RECT rc;
static int xpos;//文本的横坐标
static char SlideText[]="欢迎使用屏幕保护程序!";
static UINT timerID;//定时器
switch (message)
{
case WM_CREATE:
xpos=0;
timerID=SetTimer(hWnd,1,250,NULL);//设置定时器
break;

case WM_ERASEBKGND:
//空操作,交由DefScreenSaverProc处理
break;
case WM_TIMER:
hDC=GetDC(hWnd);
//清屏
SetRect(&rc,0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN))
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
//输出文本
SetTextColor(hDC,RGB(255*rand(),
255*rand(),255*rand()));
SetBkColor(hDC,RGB(0,0,0));
TextOut(hDC,xpos,GetSystemMetrics(SM_CYSCREEN)/2,
SlideText,strlen(SlideText));
//移动文本的横坐标
xpos=(xpos+10)%GetSystemMetrics(SM_CXSCREEN);
ReleaseDC(hWnd,hDC);
break;

case WM_DESTROY:
KillTimer(hWnd,timerID);//删除定时器
PostQuitMessage (0);
return 0;
}
return DefScreenSaverProc
(hWnd,message,wParam,lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{//暂时不需要配置对话框,仅返回FALSE
return FALSE;
}

BOOL WINAPI RegisterDialogClasses
(HINSTANCE hInstance)
{//一般不需要,仅返回TRUE
return TRUE;
}


  第二步,定义资源文件MiniSaver.rc。在VC环境下生成一图标,其ID为ID_APP。向字符串表加入ID为IDS_DESCRIPTION字符串"MiniSaver",并作为字符串表第一项
  第三步,编译连接并将生成的MiniSaver.EXE更名为MiniSaver.SCR拷入WINDOWS目录。注意, 编译前一定要在Project菜单的Setting中的Link选项中加上SCRNSAVE.LIB库。
  第四步,控制面板的显示器设置中选择屏幕保护程序MiniSaver就可以使用了。注意不要急于配置屏幕保护程序,因为MiniSaver还有没提供配置对话框。

  2.较完整的屏幕保护程序MySaver。该屏幕保护程序提供了配置对话框和关于对话框,并且使用了图象显示。读者可以将自己喜爱的图象加到资源中。
  第一步,在VC5.0/6.0中建立32位应用工程(不选MFC WIZARD EXE)并定义资源文件MiniSaver.rc。
    在VC环境下生成一图标,其ID为ID_APP。
    向字符串表加入ID为IDS_DESCRIPTION字符串"MiniSaver",并作为字符串表第一项。加入ID为idsAPPName
    字符串"Screen Saver.MySaver",说明见后面程序。
    加入ID为IDB_BITMAP1的位图
    加入ID为DLG_ABOUT对话框。仅有一ID为IDOK的按钮
    加入ID为ID_APP。此对话的ID由SCRNSAVE.H定义且只能为DLG_SCRNSAVECONFIGURE。其中有ID为IDC_EDIT
    的EDIT控件,ID为IDOK,IDCANCEL和IDABOUT的按钮。
    值得注意的是RESOURCE.H定义的ID_APP和DLG_SCRNSAVECONFIGURE可能与SCRNSAVE.H预定义的值冲突,可
    手动地将RESOURCE.H中的ID_APP设为100,DLG_SCRNSAVECONFIGURE设为2003即可。
  第二步,建立如下的MySaver.CPP文件:
#include #include

#include "resource.h"
//声明三个基本的函数
LRESULT WINAPI ScreenSaveProc
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI ScreenSaveConfigureDialog
(HWND,UINT,WPARAM,LPARAM);
BOOL WINAPI RegisterDialogClasses(HINSTANCE);
BOOL WINAPI AboutDialog(HWND,UINT,WPARAM,LPARAM);
//定义全局变量
char szIniFileName[]="control.ini";
//屏幕保护程序配置数据存放在control.ini文件
char szSection[32];
//屏幕保护程序配置数据在control.ini文件位置区名称
char szEntry[]="Slide Text:";
//屏幕保护程序配置数据项名称
char SlideText[256];
//屏幕保护程序配置数据,这里是文本内容
//定义三个基本的函数
LRESULT WINAPI ScreenSaverProc
(HWND hWnd,UINT message, WPARAM wParam,
LPARAM lParam)
{ static HBITMAP hBmp;//位图句柄
HDC hDC,hMemDC;//hMemDC是内存设备,缓存位图。
RECT rc;
static int xpos=0;
static UINT timerID;
switch (message)
{
case WM_CREATE:
//文件位置区名称szSection赋值为资源
idsAPPName。其中hMainInstance为//SCRNSAVE.LIB
定义的屏幕保护程序实例句柄
LoadString(hMainInstance,idsAPPName,
szSection,sizeof(szSection));
strcpy(SlideText,"欢迎使用屏幕保护程序!");
//读control.ini文件中[Screen Saver.MySaver]
区的配置数据到SlideText
GetPrivateProfileString(szSection,szEntry,
SlideText,SlideText,
sizeof(SlideText),szIniFileName);
//取位图
hBmp=LoadBitmap(hMainInstance,
MAKEINTRESOURCE(IDB_BITMAP1));
timerID=SetTimer(hWnd,1,250,NULL);
break;

case WM_ERASEBKGND:
hDC=GetDC(hWnd);
//显示位图
hMemDC=CreateCompatibleDC(hDC);
SelectObject(hMemDC,hBmp);
SetRect(&rc,0,0,GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN)-25);
BitBlt(hDC,rc.top,rc.left,rc.right,rc.bottom,
hMemDC,rc.top,rc.left,SRCCOPY);
//清除底行,为文本显示作准备。
SetRect(&rc,0,GetSystemMetrics(SM_CYSCREEN)-25
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
ReleaseDC(hWnd,hDC);
DeleteDC(hMemDC);
return 1;

case WM_TIMER:
hDC=GetDC(hWnd);
//清除底行
SetRect(&rc,0,GetSystemMetrics(SM_CYSCREEN)-25,
GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
FillRect(hDC,&rc,GetStockObject(BLACK_BRUSH));
//输出文本
SetTextColor(hDC,RGB(255*rand(),
255*rand(),255*rand()));
SetBkColor(hDC,RGB(0,0,0));
TextOut(hDC,xpos,GetSystemMetrics(SM_CYSCREEN)-25,
SlideText,strlen(SlideText));
xpos=(xpos+10)%GetSystemMetrics(SM_CXSCREEN);
ReleaseDC(hWnd,hDC);
break;

case WM_DESTROY:
DeleteObject(hBmp);
KillTimer(hWnd,timerID);
PostQuitMessage (0);
return 0;
}
return DefScreenSaverProc
(hWnd,message,wParam,lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{ switch (message)
{
case WM_INITDIALOG:
LoadString(hMainInstance,idsAPPName,
szSection,sizeof(szSection));
strcpy(SlideText,"欢迎使用屏幕保护程序!");
GetPrivateProfileString(szSection,
szEntry,SlideText,
SlideText,sizeof(SlideText),szIniFileName);
SetDlgItemText(hWnd,IDC_EDIT,SlideText);
SetFocus(GetDlgItem(hWnd,IDC_EDIT));
return FALSE;

case WM_COMMAND:
switch(wParam)
{
case IDOK:
//取EDIT控件文本数据并写入control.ini文件
GetDlgItemText(hWnd,IDC_EDIT,
SlideText,sizeof(SlideText));
WritePrivateProfileString(szSection,
szEntry,SlideText,szIniFileName);
EndDialog(hWnd,TRUE);
return TRUE;

case IDCANCEL:
EndDialog(hWnd,FALSE);
return TRUE;

case IDABOUT:
//调用ABOUT对话框
DialogBox(hMainInstance,
MAKEINTRESOURCE(DLG_ABOUT),
hWnd,(FARPROC)AboutDialog);
return TRUE;
}
break;
}
return FALSE;
}

BOOL WINAPI RegisterDialogClasses
(HINSTANCE hInstance)
{
return TRUE;
}

BOOL WINAPI AboutDialog
(HWND hWnd,UINT message,WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
switch(wParam)
{
case IDOK:
EndDialog(hWnd,TRUE);
return TRUE;
}
break;
}
return FALSE;
}

   最后,编译连接并将生成的MiniSaver.EXE更名为MiniSaver.SCR拷入WINDOWS目录。此时可以使用配置对话框了。


作者会员名:heliking

 
scrnsave.scr.zip scrnsave.scrscrnsave.scr 立即下载

相关推荐

scrnsave 屏幕保护

scrnsave 实现对桌面的黑屏,有他一定的使用价值。

屏幕保护程序命令行参数

本文介绍了标记为 4.0 或更高版本的 Win32 屏幕保护程序命令行参数。 原始产品版本: Win32 屏幕保护程序原始 KB 编号: 182383 Windows通过命令行参数与屏幕保护程序进行通信。 ScrnSave.lib 库为编写以使用它的屏幕保护程序处理此操作,但标记为 4.0 或更高版本的其他 Win32 屏幕保护程序必须处理以下命令行参数: 控制台复制 ScreenSaver - Show the Settings dialog box. ScreenS...

GuoGuoABC 1405

VC 屏幕保护scr 屏保程序范例.rar

VC 实现屏幕保护程序,相信屏保程序大家都不陌生吧,本程序可编译生成 scr格式的屏保程序,当然,只是大致的展示这类程序的实现过程,要想真正成为屏保,还要做一些其它的功课,比如动画效果之类的。其实原理还是挺简单的,由计数器调用DrawBitmap()函数,切换图片;   注意,下面两个函数中的IDB_BITMAP1, dc.BitBlt(0,0,800,600……以及if(nIndexBit>=5)中的有关数据依据你的bmp图片个数、尺寸、位置不同而不同,我是选择了5张800x600的bmp图片。ID值是连续的,IDB_BITMAP1最小,因为是屏保程序,因此响应键盘、鼠标是屏幕保护程序不可缺少的,还涉及到一些计时器添加、删除的相关技巧。

win32 屏保开发

<br />需要使用的静态库:scrnsave.lib;<br /> 需要包含的头文件:scrnsave.h<br /> 需要实现的三个函数:<br />(1)屏保的消息处理函数<br /> LRESULT WINAPI ScreenSaverProc(HWND,UINT,WPARAM,LPARAM);<br />(2)屏保配置对话框<br /> BOOL WINAPI ScreenSaverConfigureDialog(HWND,UINT,WPARAM,LPARAM);<br />(3)登记屏幕

kinghzking的专栏 2389

屏保程序,VC写的,非常稳定

屏保程序,不是scrnsave_lib写的 可以播放图片

VC++ MFC 地球 屏保

使用球面化技术,关于球面化,可到我的博客上看看。 本程序基于MFC对话框,没有使用到scrnSave.lib,完整实现屏保,包括预览,设置。 郁闷啊,360竟然说是病毒,NND!

让应用程序禁止Windows屏幕保护

----如果在你的程序中需要一个很长的时间段来进行大量的数据处理,这段时间长得足以使Windows因检测不到用户动作而激活屏幕保护程序,一旦启动了屏幕保护程序,你的程序运行实际上就变慢了,这会大大影响程序的正常运行。有没有一种方法,使程序在进行长时间的数据处理前关掉屏幕保护呢?答案是肯定的。Windows在启动屏幕保护程序前会向当前激活的应用程序发送WM_SYSCOMMAND消息,其中wParam

xiaoyanzi的专栏 2149

visual c++编写.scr屏幕保护程序 黑客帝国屏保 源代码.zip

visual c++编写.scr屏幕保护程序 黑客帝国屏保 源代码.zip

Hibernate3主要的新特性(转载)

Hibernate3主要的新特性(转载) <!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/elements/1.1/"xmlns:trackback="http://madskills.com/public/xml/rss/mod

疯猫 1052

逆变器专题(3)-锁相环-PLL

锁相环作为并网逆变器的第一道门户,其锁相的精度将直接影响逆变器是否并网成功,若锁相精度较差,则会直接导致系统的功率因数下降,产生无功等等。在有关文献中指出,提高PLL带宽可以准确且快速进行锁相,而当电网电压含有谐波时,可适当降低带宽抵制谐波的干扰。成为变化量,而如果两者旋转速度达到一致时,所在的交轴分量。ki很大,即带宽很大时,稳定裕度不够,锁相环锁不住。为交流量,当频率锁定而相位没有锁定时,即。,即控制环前馈,可实现将锁相速度的加快。控为0,则可实现系统完美锁相。mod,取余,可减少存储空间。

cyc19980105的博客 6181

linux下autocad完美替代品bricscad的安装运行

前言 在Linux平台下,能完美兼容.dwg文件的软件并不多。 虽然国产的中望和浩辰为适配uos操作系统,近期都推出了linux版本,但目前好像还没有对应的破姐流出。(如果有的话请私信我或留下评论) 然而有了这一款源自比利时的软件——bricscad,linux下查看和编辑.dwg文件再也不是噩梦了! 安装pj 资源链接:https://pan.baidu.com/s/1dC7zarlqwuO5fa4CBL_KGQ 提取码:24j6 1.下载对应的压缩包,解压并安装其中对应的deb或rpm软件包。 2.在C

weixin_35259117的博客 4478

Hibernate 3.3主要的新特性包括

  Hibernate 3.3 主要的新特性包括: 重新设计、模块化 JARs—— 现在有很多定义良好的 JARs ,而不是一个大的 JAR 文件 —— 这使得用户可以轻松了解依赖关系并将其最小化,同时还使得组织可以定制 Hibernate ,移除不需要的部分 基于 Maven 的构建 —— 现在 Hibernate 使用 Apache Maven 构建系统进行构...

SNS创造者/java记录 150

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6170

Hibernate 3.3主要的新特性包括3

spring-hibernate.xml 的代码: &lt; annotations 的 配置 &gt; 1.  &lt;?xml version= "1.0"  encoding= "UTF-8" ?&gt;   2.  &lt;beans xmlns= "http://www.springframework.org/schema/beans"  x...

SNS创造者/java记录 146

科研人必备!用WisPaper搭建个人文献知识库的完整指南(附Zotero联动技巧)

本文详细介绍了如何利用WisPaper搭建高效的个人文献知识库,包括文件命名标准化、文件夹结构设计、语义搜索技巧及与Zotero的深度联动方法。通过智能标签系统和知识图谱功能,科研人员可以快速定位关键文献,提升研究效率。特别适合需要管理大量学术文献的研究者。

weixin_30823001的博客 266

SAP 中租赁资产的实现需区分经营租赁与融资租赁,核心围绕资产主数据配置、折旧与利息设置、科目分配及业务操作展开

摘要:SAP系统租赁资产管理需区分经营租赁与融资租赁,通过SPRO配置资产主数据、折旧范围、利息计算及科目分配。关键步骤包括:激活折旧范围利息计算(OABZ)、设置租赁资产类别(OAYZ)、维护总账科目(AO90)及创建租赁资产主数据(AS01)。业务操作涵盖资产资本化(ABZON)、折旧利息过账(AFAB)、租金支付(F-53)及终止处理(ABUMN)。核心配置要点在于准确设置租赁类型、利率参数和科目联动,确保系统自动计算折旧与利息并生成正确凭证。

金牌架构师 1069

Hibernate 3.3主要的新特性包括2

&lt;/ prop &gt; 23                   &lt; prop  key ="hibernate.cache.use_query_cache"&gt; ${hibernate.cache.use_query_cache} &lt;/ prop &gt; 24                   &lt; prop  key ="hibernate.cac...

SNS创造者/java记录 161

使用Qt和MX Component插件实现与菱PLC的通信

在本文中,我们介绍了如何使用Qt和MX Component插件实现与菱PLC的通信。我们首先安装和配置了MX Component插件,并在Qt项目中初始化和使用MX Component来连接、读取和写入PLC的数据。安装完成后,您需要在Qt项目中配置MX Component的路径,以便Qt可以找到所需的库文件。在本文中,我们将探讨如何使用Qt和MX Component插件来实现与菱PLC的通信。在主函数中,我们将初始化MX Component,并创建一个与PLC通信的示例。在上面的代码中,我们使用了。

TlScratch的博客 995

Hibernate 3新特性介绍及发展趋势

Hibernate是一种强大的可提供对象-关系持久化和查询服务的中间件,它可以使程序员依据面向对象的原理开发持久化类,实现对象之间的关联、继承、多态、组合、集合等。 Hibernate提供了它特有的数据库查询语言HQL,这种查询语言屏蔽了不同数据库之间的差别,使你可以编写统一的查询语句执行查询。不同于其他持久化解决方案的是Hibernate并没有把SQL的强大功能屏蔽掉,而是仍然兼容SQL,这...

weixin_30808253的博客 120

iStoreOS路由器(openwrt软路由) AdGuard Home 客户端 IP 总是 localhost(127.0.0.1)?这样设置让你精准识别真实IP!

在iStoreOS等软路由上部署AdGuard Home时,客户端IP常显示为localhost(127.0.0.1)。本文详细介绍如何让adguardhome直接识别客户端真实IP🌐,帮助你实现网络流量的精准追踪和管理。🔍

XiaoqiangClub的博客 2249

【MicroPython编程-ESP32篇:设备驱动】-SHT31温度湿度传感器驱动

SHT31 是 Sensirion 的下一代温湿度传感器。 它建立在一个新的 CMOSens® 传感器芯片之上,该芯片是 Sensirion 新湿度和温度平台的核心。

视觉与物联智能 228

Hibernate3 新特性

Hibernate3主要的新特性包括: 1:实现了EJB3风格的持久化操作。在原有的saveOrUpdate()和saveOrUpdateCopy()两个方法之外,又提供了EJB3风格的create()和merge()两个操作。 2:提供更强的映射灵活性。允许将一个类映射到多张表,允许混合使用“每个继承体系一张表”和“每个子类一张表”的映射策略,等等。 3:支持存储过程和手写SQL,并且可以...

zengenry的专栏 244

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

hibernate3和hibernate4的实现与区别,求解释

hibernate3和hibernate4都什么不同 在用的时候有哪些注意的 配置是什么 求高手指点

u011565960的专栏 684

深度学习工具包 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")

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Atitit hibernate3 hinernate4 hibernate5新特性attilax总结

Atitit hibernate3 hinernate4 hibernate5新特性attilax总结             1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和hibernate3.3部分区别 - WTOM的博客 - 博客频道 - youkuaiyun.com.html1 1.3. Hibernate 5.1.0 正式版发布,新版本带来了一些新特性...

weixin_34337381的博客 249

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

hibernate4和hibernate3的区别

hibernate4.0+版本和3.0+版本的区别总结 马老师说的好。要穿一手鞋,so,自己总结下hibernate4.1版本中的新特性和hibernate3.3做区别 1.数据库方言设置 org.hibernate.dialect.MySQL5Dialect 在3.3版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5D

q1219611916的专栏 738
上一篇: 从C++到Java --理解面向对象是关键所在
下一篇: 利用MFC 在运行中动态创建新窗口
CandyCat
博客等级 码龄26年 23粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值