叶帆工作室

嵌入式开发爱好者(十年开发经验,精通C/C++/VC/VB/C#...)

叶帆
叶帆的公告
本博客原创文章,作者保留一切权利,需经作者同意后方可转载,转载时 请注明[叶帆工作室]及文章链接。yefan@vip.sina.com
【简介】叶帆[微软MVP]
【文章】叶帆文章列表
【软件】叶帆共享软件列表
最近评论
jacle169:峰哥, micro Framework3.0 beta出了,我已经装到vs08里了,但是你的sdk不能注册到vs08里,你帮帮忙改个vs08 里能用的sdk吧,谢谢.
赵广涛:高手帮帮忙,VB画有两个Y轴的曲线图怎么画?
sfweb2008:老兄:
你真厉害!
你有VB Api函数功能及用法详解吗?我有好多这方面的问题不是很明白!还请指教,谢谢!

我的邮箱xsdjxx@tom.com
xweil:谢谢你的推荐,享用受益中
changesway:很有收获!谢谢
文章分类
收藏
    相册
    叶帆照片
    【叶帆软件】
    [01]VB源码之友(V2.1.548)
    [02]API浏览器.net(V5.0)
    [03]叶帆成语词典(V2.0.8)
    [04]叶帆密码库(V1.2.8)
    【叶帆资源】
    DAO 2.0引擎
    叶帆快速通道
    Windows Embedded 专题
    中文MSDN
    叶帆圈子--工业自动化
    叶帆工作室(博客园)
    叶帆工控--工业自动化
    叶帆群组--工业应用开发
    微软中文技术论坛
    瑞康社区论坛
    叶帆友情链接
    张欣
    枕善居
    莫依
    葛涵涛
    郑建
    陈辉
    马宁
    马骐
    魏涛序
    黎波
    存档
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 另类屏蔽系统键(Ctrl+Alt+Del)兼谈www.vbaccelerator.com网站收藏

    新一篇: 无崩溃(VB IDE)子类技术实现 | 旧一篇: 要想做真正的编程高手,还是应该踏实些,告别浮躁

            学习技术最好的方式就是拜读优秀的源码,不仅让你学习到先进的技术,更教会你如何编码:编码的风格、注释、思路等等。这段时间我给我自己定了一个目标,就是研究优秀的源码:MenuHook、Skins、Form++等等。

            在www.vbaccelerator.com上看到了一篇关于创建桌面的代码,代码很简短,用了几个API函数,就实现了新桌面的创建,这个新桌面与我们的默认的桌面没有任何关系,在我们新的桌面上你可以打开相应的应用程序。其实本质上它不是“屏蔽”了系统键(Ctrl+Alt+Del),这三个键系统照样相应,只不过windows任务管理器出现在默认桌面,在新创建的桌面没有显示罢了,不过效果却达到了(此外、windows其它的系统键也一概是这样被屏蔽了)。这种方法对工控开发很有好处,因为工业监控程序都是全屏,并且独占系统的资源(一般不允许打开非监控程序的软件),所以新开一个桌面给工控程序用是完全可能和有必要的,并且效果绝佳(并不需要用各种技术来屏蔽系统键了),此外在程序中我们还可以检测自己运行在哪一个桌面的,如果不是预定的桌面,我们的程序可以拒绝运行,这样可以避免一些非独立的组件单独被加载。

           这是创建桌面的关键源码,具体请上www.vbaccelerator.com网站查看。

     '*************************************************************************
    '**函 数 名:Create
    '**输    入:ByVal sDesktopName(String) -
    '**输    出:无
    '**功能描述:创建一个指定名称的左面
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-12-27 12:01:48
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.3
    '*************************************************************************
    Public Sub Create(ByVal sDesktopName As String)
        Dim lR As Long
       
        '返回当前线程所在的桌面句柄
        m_hDesktopThreadOld = GetThreadDesktop(GetCurrentThreadId())
       
        '判断DLL调用是否有误
        ApiErrorHandler Err.LastDllError, (m_hDesktopThreadOld = 0)
       
        '当前选择的桌面
        m_hDesktopInputOld = OpenInputDesktop(0, False, DESKTOP_SWITCHDESKTOP)
        ApiErrorHandler Err.LastDllError, (m_hDesktopInputOld = 0)
       
        '创建桌面
        m_hDesktop = CreateDesktop(StrPtr(sDesktopName), ByVal 0&, ByVal 0&, 0, GENERIC_ALL, ByVal 0&)
        ApiErrorHandler Err.LastDllError, (m_hDesktop = 0)
       
        If Not (m_hDesktop = 0) Then
            lR = SetThreadDesktop(m_hDesktop)
            lR = SwitchDesktop(m_hDesktop)
            m_sDesktop = sDesktopName
        End If

    End Sub

    '*************************************************************************
    '**函 数 名:ClearUp
    '**输    入:无
    '**输    出:无
    '**功能描述:
    '**全局变量:
    '**调用模块:
    '**作    者:叶帆
    '**日    期:2005-12-27 13:00:27
    '**修 改 人:
    '**日    期:
    '**版    本:V1.0.3
    '*************************************************************************
    Public Sub ClearUp()
        If Not (m_hDesktopInputOld = 0) Then
            SwitchDesktop m_hDesktopInputOld           '设置为默认的桌面
            m_hDesktopInputOld = 0
        End If
        If Not (m_hDesktopThreadOld = 0) Then
            SetThreadDesktop m_hDesktopThreadOld       '默认原桌面线程
            m_hDesktopThreadOld = 0
        End If
        If Not (m_hDesktop = 0) Then
            CloseDesktop m_hDesktop                    '关闭新创建的桌面
            m_hDesktop = 0
        End If
    End Sub

    ==========================================

           www.vbaccelerator.com网站真是一个国外较为优秀的VB开源网站,虽然在2005年之前就停止更新了,不过上面的技术还是值得我们深入研究的。

          仔细研究网站上面的源码,你发现几乎所有的源码都会引用一个SSubTmr6.dll组件,其实这个组件是VB开发的一个COM(进程内组件),实现的就是窗口的子类功能(此外包含一个API 创建的定时器)。

          此外用的最多的就是GUI库的API,大都是创建一个内存DC,在此基础上用API进行内存DC操作。由于我MFC大部分做的都是后台驱动,所以GUI的知识掌握不太多,所以看这部分就比较吃力,所以我觉的要想学习好windows编程,VC必须要学,因为它从底层向你展现程序实现的细节,你能理解并且可以设计出更高级的应用。

         谈点自己的感触:如果把VB仅仅当成一个工具,那是非常好的事,如果把它作为全部,那是最可悲的事。观摩高手的编码,无一不显示这个高手对底层精湛的了解。读读梁肇新的《编程高手箴言》也许你感悟更多。

        

    发表于 @ 2005年12月28日 10:12:00|评论(loading...)|编辑

    新一篇: 无崩溃(VB IDE)子类技术实现 | 旧一篇: 要想做真正的编程高手,还是应该踏实些,告别浮躁

    评论

    #Sunlight 发表于2005-12-28 19:57:00  IP: 61.6.90.*
    HookMenu 1.4 by Vlad Vissoultchev is located at:
    http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=40518&lngWId=1

    HookMenu 1.5 by NR/GN is located at:
    http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=49985&lngWId=1

    But Vb menus are ANSI only;Hookmenu 1.4 & 1.5 aren't fully compatible with Unicode.
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 叶帆