| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 编程技术 >> 程序设计 >> 文章正文 用户登录 新用户注册
  用VC写一个完整的屏幕保护程序          【字体:
用VC写一个完整的屏幕保护程序
作者:未知    文章来源:CnXHacker.Net    点击数:    更新时间:2006-10-26    
p;           以上窗口创建使用同一个窗口类(Window Class(WNDCLASS)),当然也是同一个消息响应函数(Window’s Procedure)。最后显示窗口,开始消息循环。
         返回值=sm_passwordchange:
                用LoadLibrary()和 GetProcessAdress()API获得密码设置函数指针,密码设置函数类型为:DOWORD  PASCAL  ( LPCSTR, HWND, DWORD, LPVOID ),然后调用该函数进行密码更改。
         返回值=sm_config
                显示一个对话框(Dialog),获取用户信息,在程序中进行相应的更改。

屏幕保护程序的退出机制反映在程序的消息响应函数(Window’s Procedure)中,当按下键盘上任何一个健或者鼠标移动计数超过5次(防止桌面振动等因素导致的鼠标移动),程序进入退出机制,在sm_test或者sm­­_full情况下查看屏幕保护程序是否设置密码,如果是,验证密码,正确,程序退出,错误,程序继续。当程序验证密码时,通过全局变量g_bCheckingSaverPassword告诉消息响应函数对屏幕刷新,以保证密码的输入。其他情况(sm_config, sm_preview)不用验证密码直接退出。这些功能包括在自定义的函数InterruptSaver( )和ShutdownSaver( )中。

上述各个函数的详细代码如下:

1、 CreateSaverWindow 函数:

HWND CreateSaverWindow(SaverMode mode, HWND hWndParent,HINSTANCE hInstance)
{
    HWND hWnd;
    RECT rc;
    DWORD dwStyle;

                           hWnd=NULL;
                          
    switch ( mode )
    {
        case sm_preview:
            GetClientRect(hWndParent, &rc );
            dwStyle = WS_VISIBLE | WS_CHILD;
            AdjustWindowRect( &rc, dwStyle, FALSE );
            hWnd = CreateWindow( TEXT("SaverWndClass"), TEXT("SaverWindow"), dwStyle,
                                    rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
                                    hWndParent, NULL, hInstance, NULL);
            break;

        case sm_test:
            rc.left = rc.top = 50;
            rc.right = rc.left+600;
            rc.bottom = rc.top+400;
            dwStyle = WS_VISIBLE | WS_OVERLAPPED | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU;
            AdjustWindowRect( &rc, dwStyle, FALSE );
            hWnd = CreateWindow( TEXT("SaverWndClass"), TEXT("SaverWindow"), dwStyle,
                                   rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top,
                                   NULL, NULL, hInstance, NULL);
            break;

        case sm_full:
           
            rc.left=rc.top=0;
                                     rc.bottom=GetSystemMetrics(SM_CYSCREEN);
                                     rc.right=GetSystemMetrics(SM_CXSCREEN);
                                     dwStyle = WS_VISIBLE | WS_POPUP;

            hWnd = CreateWindowEx( WS_EX_TOPMOST, TEXT("SaverWndClass"),
                    TEXT("SaverWindow"), dwStyle, rc.left, rc.top, rc.right - rc.left,
                    rc.bottom - rc.top, NULL, NULL, hInstance, NULL);
               
    }

                          

    if(mode == sm_preview )
    {
        // 开始预览时,进入一个短暂的循环以使系统显示控制面板有足够的时间初始化
        g_bWaitForInputIdle = TRUE;
        // 开始循环
        PostMessage( g_hWnd, WM_USER, 0, 0 );

        MSG msg;

        while( g_bWaitForInputIdle )
        {
            // 如果If 返回 FALSE, 结束循环
            if( !GetMessage( &msg, g_hWnd, 0, 0 ) )
            {
                // 结束循环
                PostQuitMessage(0);
                break;
            }

            TranslateMessage( &msg);
            DispatchMessage( &msg);
        }
    }
   

    return hWnd;
}

2、 Window消息响应函数:

LRESULT CALLBACK SaverProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch ( uMsg )
        {
        case WM_USER:
            //预览开始循环,500ms空闲时间用于控制面板的初始化。
            SetTimer( hWnd, 1, 500, NULL );
            break;

        case WM_TIMER:
            // 500ms时间到,预览循环结束。
            g_bWaitForInputIdle = FALSE;
            KillTimer( hWnd, 1 );
            break;

        case WM_DESTROY:
            ShutdownSaver();
            break;

        case WM_SETCURSOR:
            if ( g_SaverMode == sm_full && !g_bCheckingSaverPassword )
            {
                //隐藏鼠标指针
                SetCursor( NULL );
                return TRUE;
            }
            break;

        case WM_PAINT:
        {
           
            PAINTSTRUCT ps;
            BeginPaint( hWnd, &ps );


                RECT rc;
                GetClientR

上一页  [1] [2] [3] [4] [5] 下一页

文章录入:IceRiver    责任编辑:IceRiver 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    用VMware虚拟环境让恶意软件
    设陷阱用VMware虚拟环境让恶
    zcfgsvc.exe - zcfgsvc - 进
    winstylerthemesvc.exe - wi
    6to4svc - 6to4svc.dll - DL
    yiesrvc.dll - yiesrvc - DL
    阿利谈安全之安装了 SAVCE的
    学会用 VC++ 动态链接库编写
    学会用 VC++ 动态链接库编写
    用vbs来写sql注入等80端口的
      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    Powered by ICE RIVER - STUDIO
    » CnXHacker.CoM   © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved.