利用Windows API获得系统高级功能

邹刚

  VB无疑是最先进的编程工具之一,但在涉及windows 32位系统的核心编程方面——譬如一些高级功能的实现上,它仍然显得有些力不从心,这需要我们充分利用vb的强大的Windows API函数调用能力来弥补。以下代码将向您展示如何利用Windows API控制系统托盘(图标)区、开始菜单、任务栏以及禁用/起用ctrl-alt-del、退出网络登录、立即关机、重新启动等系统高级功能。

  启动VB6,建立一个标准exe工程,添加14个command按钮,caption属性依次为 “隐藏开始菜单”、“显示开始菜单”、“隐藏系统托盘”、“显示系统托盘”、“禁用 ctrl-alt-del”、“起用 ctrl-alt-del”、“隐藏任务栏”、“显示任务栏”、“立即重新启动”、“关机”、“退出网络登陆”、“显示关机对话框”,调整上述控件到适当位置,双击窗体,写入以下代码:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'寻找窗口列表中第一个符合指定条件的顶级窗口
'lpClassName指向包含了窗口类名的空中止(C语言)字串的指针;或设为零,'表示接收任何类
'lpWindowName指向包含了窗口文本(或标签)的空中止(C语言)字串的指针;'或设为零,表示接收任何窗口标题

Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'控制窗口的可见性
'hwnd窗口句柄,要向这个窗口应用由nCmdShow指定的命令
'nCmdShow为窗口指定可视性方面的一个命令

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
'在窗口列表中寻找与指定条件相符的第一个子窗口 
'hWnd1在其中查找子的父窗口
'hWnd2从这个窗口后开始查找。这样便可利用对FindWindowEx的多次调用找到符合条件的所有子窗口。如设为零,表示从第一个子窗口开始搜索

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long)
'退出windows,并用特定的选项重新启动

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
'允许获取和设置数量众多的windows系统参数
'uAction指定要设置的参数

Private Const EWX_LOGOFF = 0'中止进程,然后注销
Private Const EWX_SHUTDOWN = 1'关掉系统电源
Private Const EWX_REBOOT = 2'重新引导系统
Private Const EWX_FORCE = 4'强迫中止没有响应的进程
Private Const SPI_SCREENSAVERRUNNING = 97

Private Sub Command1_Click() '隐藏开始菜单
Dim Handle As Long, FindClass As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "Button", vbNullString)
ShowWindow Handle, 0
End Sub

Private Sub Command11_Click() '起用 ctrl-alt-del
Dim ret As Integer
Dim pOld As Boolean
ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
End Sub

Private Sub Command12_Click() '禁用 ctrl-alt-del
Dim ret As Integer
Dim pOld As Boolean
ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)
End Sub

Private Sub Command13_Click() '立即重新启动
ExitWindowsEx EWX_REBOOT, 0
End Sub

Private Sub Command14_Click() '关机
ExitWindowsEx EWX_SHUTDOWN, 0
End Sub

Private Sub Command15_Click() '退出网络登陆
ExitWindowsEx EWX_LOGOFF, 0
End Sub

Private Sub Command16_Click() '显示关机对话框
ExitWindowsEx EWX_FORCE, 0
End Sub

Private Sub Command2_Click() '显示开始菜单
Dim Handle As Long, FindClass As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "Button", vbNullString)
ShowWindow Handle, 1
End Sub

Private Sub Command5_Click() '隐藏系统托盘
Dim FindClass As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "TrayNotifyWnd", vbNullString)
ShowWindow Handle, 0
End Sub

Private Sub Command6_Click() '显示系统托盘
Dim FindClass As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
Handle = FindWindowEx(FindClass, 0, "TrayNotifyWnd", vbNullString)
ShowWindow Handle, 1
End Sub

Private Sub Command7_Click() '显示任务栏
Dim FindClass As Long, FindClass2 As Long, Parent As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
FindClass2 = FindWindowEx(FindClass, 0, "ReBarWindow32", vbNullString)
Parent = FindWindowEx(FindClass2, 0, "MSTaskSwWClass", vbNullString)
Handle = FindWindowEx(Parent, 0, "SysTabControl32", vbNullString)
ShowWindow Handle, 0
End Sub

Private Sub Command8_Click() '隐藏任务栏
Dim FindClass As Long, FindClass2 As Long, Parent As Long, Handle As Long
FindClass = FindWindow("Shell_TrayWnd", "")
FindClass2 = FindWindowEx(FindClass, 0, "ReBarWindow32", vbNullString)
Parent = FindWindowEx(FindClass2, 0, "MSTaskSwWClass", vbNullString)
Handle = FindWindowEx(Parent, 0, "SysTabControl32", vbNullString)
ShowWindow Handle, 1
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End
End Sub

转载于:https://www.cnblogs.com/kevinGao/archive/2011/11/06/2238883.html

利用Windows API获得系统高级功能相关推荐

  1. 使用Windows XP的系统修复功能

    对于使用Windows XP系统的朋友来说,当系统出现崩溃或者系统使用时出现一些莫名其妙的错误时,你采用什么方法解决呢?一般都是采用重装系统或者使用Ghost恢复等--[@more@] 但是使用这些方 ...

  2. python电脑怎么打开任务管理器_利用Python调用Windows API,实现任务管理器功能

    任务管理器具体功能有: 1. 列出系统当前所有进程. 2. 列出隶属于该进程的所有线程. 3. 如果进程有窗口,可以显示和隐藏窗口. 4. 强行结束指定进程. 通过Python调用Windows AP ...

  3. 利用Python调用Windows API,实现任务管理器功能

    任务管理器具体功能有: 1. 列出系统当前所有进程. 2. 列出隶属于该进程的所有线程. 3. 如果进程有窗口,可以显示和隐藏窗口. 4. 强行结束指定进程. 通过Python调用Windows AP ...

  4. windows API 创建系统托盘图标

    系统托盘在我们使用的程序中很普遍,下面我们来看一个很不错的例子,使用Win32 API实现,对理解系统托盘有些帮助. [cpp] view plaincopyprint? #include <w ...

  5. C# 获得窗体句柄并发送消息(利用windows API可在不同进程中获取)

    C#使用Windows API获取窗口句柄控制其他程序窗口 编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的 ...

  6. 自学Python+windows API自动化操作桌面功能

    目    录 一.windows API 1.官方文档 2.pywin32 3.win32api 4.win32gui 5.win32clipboard 二.windows API的另一种键鼠输入 1 ...

  7. C# 使用Windows API获取系统当前鼠标信息(图案)

    通过使用Windows API来获取当前鼠标的图案,不论是系统图片还是自定义图标都能够获取到,在这个示例中,为了方便测试,给Form1添加了一个KeyPress事件,在程序激活状态下,将鼠标移动到任意 ...

  8. windows清理_Windows系统高级清理工具,实力吊打360!

    哈喽,各位小伙们,前几天给大家分享过一款Windows系统最强大的卸载工具IObit Uninstaller,用过的人都知道它的强大,如果还有没有体验过这款工具的小伙们建议你也去用用看,那么今天给大家 ...

  9. 【转】利用Windows API调用摄像头

    原文地址:http://blog.csdn.net/anya/article/details/4371256 从网上找了很多关于视频捕捉录制及压缩的资料,发现大多数的视频在录制过程中,呈漏斗状,稍微动 ...

最新文章

  1. c打印char* 数据_JAVA基础篇(数据类型)
  2. Redis进阶-如何从海量的 key 中找出特定的key列表 Scan详解
  3. c++:MFC EDIT控件内容的四种处理方式使用(CEdit控件类型与CString 值联动)
  4. 如何设计折叠样式的屏幕(类似MIGO的屏幕)
  5. Gradle初探(一):创建一个Gradle项目
  6. 剔除异常值栅格计算器_基于数据流的异常检测: Random Cut Forest
  7. css empty_何时使用:empty和:blank CSS伪选择器
  8. 中国科学家突破二氧化碳人工合成淀粉技术
  9. 大数据_Hbase-数据存储介绍---Hbase工作笔记0002
  10. [Python] 函数来判断一个对象是否是一个已知的类型:isinstance(object, classinfo)
  11. NTC热敏电阻的主要技术参数
  12. [usOJ5677]御神渡
  13. 纯HTML标签详解(摘自阿里西西)
  14. 禅修内观 | 一个璀璨的思想成就
  15. [转]读《简约至上》有感 - 及我的支语片言
  16. 基于vue技术栈制作自己的简历网站问题总结篇(入门vue基础项目)
  17. 记一次服务器被攻击经历
  18. java.sql.SQLSyntaxErrorException: Table ‘XXX‘ doesn‘t exist
  19. 苹果几是双卡双待_iphone11 pro苹果大革新,支持双卡双待
  20. python也很浪漫一朵玫瑰送给小姐姐

热门文章

  1. 以大多数人的努力程度之低,根本轮不到去拼天赋
  2. CheckBox in ListView
  3. 教程:创建简单的 ETL 包
  4. 我为什么雇佣家庭主妇做软件测试
  5. [PHP]常量的一些特性
  6. 对计算机领域中间层的理解
  7. TiDB 源码阅读系列文章(十六)INSERT 语句详解
  8. Linux集群服务 LVS
  9. C++ Primer笔记 容器和算法(2)
  10. Hadoop生态圈以及各组成部分的简介