`
阿尔萨斯
  • 浏览: 4414212 次
社区版块
存档分类
最新评论

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

 
阅读更多

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




<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
分享到:
评论

相关推荐

    vbAccelerator-Archive:最终的尝试是将古老的vbAccelerator网站存档,该网站于2015年12月消失

    vbAccelerator.com存档此回购是最后一次尝试来存档古老的vbAccelerator网站(和代码示例)的尝试,该网站于2015年11月从网络上消失了。感谢的预见性,可以预先存档所有内容。 这个档案库是基于他的工作。 原始...

    替换 Windows 公共对话框的 DLL 和演示程序的源代码,具有HOOK 功能(86KB)...

    标题中的“替换 Windows 公共对话框的 DLL 和演示程序的源代码,具有HOOK 功能”涉及的是Windows编程中的一项高级技术,主要是关于系统对话框的自定义和扩展。Windows公共对话框是操作系统提供的一组标准对话框,如...

    列表重绘ActiveX控件(控件,代码,实例)

    ActiveX重绘列表/组合框控件. 可以自定义重绘等事件代码. ...http://www.vbaccelerator.com/home/vb/Code/Controls/Combo_and_List_Boxes/Owner_Draw_Combo_and_List_Box/VB6_Owner_Draw_Combo_List_Control.asp

    vb 超酷菜单 彩色渐变 可显示背景图片,可添加菜单图标 可以有声音

    5. **VBAccelerator Menu3**:这个标签可能指的是VBAccelerator网站提供的一个菜单控件示例,它可能包含更高级的功能和定制选项。VBAccelerator是一个提供VB代码示例和组件的资源库,Menu3可能是一个改进的菜单控件...

    VB6-SirkMini_2019.02.20 (1).rar

    数据呈现更方便)、VBCCR(替换MS通用控件)、Deelx (正则表达式引擎)、Jmail(邮件客户端组件)、VBCorLib(常用算法和工具组件)、vbAccelerator(系列界面控件)、TypeLib(TLB文件,高级系统编程必备系统接口...

    VB6 的 ToolBar 的源码及演示例子

    2. `mWinGeneral.bas`: 此文件可能包含了通用的Windows API函数和辅助函数,这些函数可能被用来与系统进行更底层的交互,例如设置按钮的外观、获取或设置窗口样式等。 3. `mMain.bas`: 这个文件很可能包含主应用...

    VB6_SGrid_2_Demonstration.zip_ sgr_grid_grid vb_outlook_vbaccele

    优秀的VB_GRID,可以查看源代码Visit vbAccelerator - the VB programmer s resourceS-Grid 2.0 is an all VB grid giving you the control other grids don t, and all in 480kb. Create Outlook-style grids, span ...

    ICQ图形菜单

    VBAccelerator是一个提供VB代码示例、控件和教程的网站,它为开发者提供了许多实用工具和组件,帮助他们快速开发出具有专业外观和功能的应用程序。"Menu3"可能是这个库中的一个版本,专门针对图形菜单的创建和管理。...

    vb6mousewheel

    7. **第三方控件**:也有一些第三方控件,如`vbAccelerator`,提供了对`MouseWheel`事件的内置支持,简化了开发过程。 8. **测试与调试**:在编写和测试`MouseWheel`事件处理时,确保你的鼠标设置正确,且鼠标的...

    VB实现XP风格窗体

    在Windows XP操作系统推出后,其独特的界面风格受到了用户的欢迎,开发者也希望能将这种风格应用到他们的应用程序中,提升用户体验。本文将深入探讨如何通过VB实现这一目标。 在VB中,实现XP风格窗体主要涉及以下几...

    Using DIB Sections in VB

    &lt;br&gt; This is a supporting article describing in more detail the DIB Section techniques used in the vbAccelerator Image Processor. It describes what DIB Sections are, how to use them and ...

    asp.net日历控件

    在提供的压缩包中,包含了"日历控件(包括源码)",这可能是一个第三方开发的日历控件,例如VBAccelerator网站的作品。VBAccelerator是一个知名的资源网站,提供了许多ASP.NET的开源组件和示例代码。这个日历控件可能...

    分享一个功能丰富的comdlg类_VB源码版

    内容索引:VB源码,控件组件,comdlg32.ocx 分享一个功能和使用方法与comdlg32.ocx基本一样的开源类,呵呵,当然是从VBAccelerator转来的,因为觉得自己用着挺方便,不敢独享,网上要有分享的精神哦。个人觉得这个源码...

    非常漂亮的菜单控件,老外的

    这个控件可能适用于多种编程语言,如VB(Visual Basic)或者其他.NET框架的语言,因为它提到了“Vbaccelerator”。 文件名称“_ICQ Vbaccelerator Menu3”进一步揭示了一些信息。首先,“ICQ”可能是一个参考,暗示...

    mel-grubb-ii-formshaper__1-28524

    笔记: UI使用了我的VBAccelerator的cCommonDialog和cRegistry类的个人版本,以及我自己的cMRU和modError,所有这些都包含在此软件包中。 梅尔·格鲁布二世Cyber​​Haus更多信息 提交时间2001-10-30 13:41:36 经过...

Global site tag (gtag.js) - Google Analytics