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

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

学习技术最好的方式就是拜读优秀的源码,不仅让你学习到先进的技术,更教会你如何编码:编码的风格、注释、思路等等。这段时间我给我自己定了一个目标,就是研究优秀的源码: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仅仅当成一个工具,那是非常好的事,如果把它作为全部,那是最可悲的事。观摩高手的编码,无一不显示这个高手对底层精湛的了解。读读梁肇新的《编程高手箴言》也许你感悟更多。

相关文章
|
供应链 机器人 Serverless
企业如何通过蚂蚁开放联盟链快速上链
蚂蚁区块链开放联盟链提供给企业的,不但是低门槛低成本的上链方案,让上链之路变得轻巧简单,而是是一个链上链外广阔的生态协作机会。
17241 2
企业如何通过蚂蚁开放联盟链快速上链
|
3月前
|
Linux 虚拟化 iOS开发
macOS Tahoe 26 (25A354) 正式版发布,ISO、IPSW、PKG 下载
macOS Tahoe 26 (25A354) 正式版 ISO、IPSW、PKG 下载
593 0
macOS Tahoe 26 (25A354) 正式版发布,ISO、IPSW、PKG 下载
|
5月前
|
XML 搜索推荐 安全
SEO优化让代购销量增长300%:关键词挖掘+内容营销的黄金组合
本文全面解析跨境电商代购系统的SEO优化策略,涵盖关键词研究、页面优化、内容营销、技术SEO及用户体验提升等关键环节,助力代购平台提升搜索排名、吸引精准流量、增强用户信任,实现业务持续增长。
|
JavaScript 前端开发 UED
(详解错误情况,及解决方法)Vue 数据更新了但页面没有更新的情况
(详解错误情况,及解决方法)Vue 数据更新了但页面没有更新的情况
391 0
|
机器学习/深度学习 存储 分布式计算
在阿里云上训练机器学习模型:逻辑回归和GBDT实践指南
机器学习在当今数据驱动的世界中扮演着关键角色,为业务决策提供了强大的支持。本文将详细介绍如何在阿里云上使用相关产品,训练逻辑回归(Logistic Regression)和梯度提升决策树(Gradient Boosted Decision Trees,GBDT)模型。我们将使用MaxCompute、PAI(机器学习平台)、DataWorks等阿里云产品,通过代码示例和详细说明,带你一步步完成整个流程。
581 0
|
达摩院 算法 调度
二次规划问题用MindOpt C++怎么进行建模优化
MindOpt是达摩院决策智能实验室研究的一款优化求解器,目前在优化求解线性规划问题这一功能上取得不错的成绩,希望大家能够帮我们多多打磨其他功能(混合整数线性规划、二次规划、半定规划目前都在公测),让我们的MindOpt在优化求解器这板块成为国产之光。
二次规划问题用MindOpt C++怎么进行建模优化
|
存储 Web App开发 缓存
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告
软件工程是计算机领域的一门专业基础课,它对于培养开发者的软件素质、提高开发者的软件开发能力与软件项目管理能力具有重要意义。本篇介绍实战案例——编写浏览器开发可行性研究报告。
615 1
软件工程高效学 | 实战案例:编写浏览器开发可行性研究报告
|
存储 缓存 弹性计算
阿里云服务器通用型g5、g6、g7实例区别及选择参考
在我们选择阿里云服务器实例规格的时候,如果是选择通用型实例,会发现同样是通用型实例,有通用型g5、通用型g6和通用型g7可选(当然还有g8i、g8y等其他通用型实例可选),他们都属于企业级云服务器,都配有2核4G、4核8G和8核16G等处理器与内存比1:4的配置,那么它们之间有什么区别,下边就这三个实例各自的特点、网络、适用场景及最新活动价格来详细分析一下新手用户应该怎么选择。
阿里云服务器通用型g5、g6、g7实例区别及选择参考
|
JSON 数据格式
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据 by 页一
1583 0
【分享】宜搭集成自动化,Groovy节点一般用法,解析JSON数据