用VB实现屏幕阴暗操作

用VB实现屏幕阴暗操作
http://www.tongyi.net  作者:燕义怀  出处:中国电脑教育报    点击:1452  

   使用过Windows 9x的用户都应该知道,在关闭Windows系统时,整个屏幕会暗下来,那么,如何在自己开发的应用程序中也实现这一效果呢?我们通过调用一组API函数就可以实现,如果你有兴趣,就跟我来吧!这一组函数是:
   GetDC :用来获取屏幕的设备号;
   ReleaseDC :释放指定的设备;
   CreatePatternBrush :创建图形刷子;
   PatBlt: 利用创建的图形刷子填充指定设备;
   DeleteObject :删除创建的对象(与CreatePatternBrush创建的刷子对象呼应);
   CreateBitmap :创建BMP对象;
   SelectObject :选择当前操作对象;
   InvalidateRect :使操作无效,即恢复变暗前的状态。  
   
   基本思路
   
   首先创建一个位图对象,然后,利用此位图对象创建一个图案刷子,选择指定设备为当前设备,利用已经创建的图案刷子填充当前设备,删除创建的刷子对象即可使当前设备变暗。调用InvalidateRect函数就可使指定设备恢复到变暗前的状态。
     
   步 骤
      
   1、创建一个Form1窗体,设置2个Command按钮,将Command1和Command2的Caption属性分别设置为:“变暗”和“恢复”。
   2、在窗体代码模块中声明API函数和相应的类型,代码如下:
   Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
   End Type
   Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
   Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
   Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
   Private Declare Function PatBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal dwRop As Long) As Long
   Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
   Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
   Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
   Private Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
   3、编写代码实现程序功能,由于版面所限,具体代码将放到CCE网站(http://www.cce.com.cn)。
   以上就是屏幕变暗的方法。如果要使窗体、图片框等对象变暗,只要使窗体或图片框等对象获取句柄即可,修改Command1_Click过程和Command2_Click过程中的以下语句即可实现窗体变暗。
   hdc5=Form1.Hdc;
   Width5=Form1.width;
   height5=Form1.height;
   ReleaseDC(Form1.hwnd,hdct) 
   aa=InvalidateRect (Form1.hwnd,bottom,1)。
   以上程序在VB6.中文版,Windwos 98 环境中运行通过。有兴趣的朋友可以去试一试,看到这种效果是不是觉得很惊奇呢!

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: AES(高级加密标准)是目前广泛使用的对称加密算法之一,ECB(电子密码本)是AES的一种工作模式。 在VB实现AES/ECB,首先需要导入相应的库,在VB.NET中可以使用System.Security.Cryptography命名空间下的AesManaged类来实现AES算法。以下是实现AES/ECB的简单代码示例: ```vb Imports System.Security.Cryptography Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim plainText As String = "Hello, World!" Dim key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} ' 16字节的密钥 Dim encryptedData As Byte() Using aes As New AesManaged() aes.Mode = CipherMode.ECB ' 设置工作模式为ECB aes.Padding = PaddingMode.PKCS7 ' 设置填充模式为PKCS7 aes.Key = key Using encryptor As ICryptoTransform = aes.CreateEncryptor() Dim plainData As Byte() = System.Text.Encoding.UTF8.GetBytes(plainText) encryptedData = encryptor.TransformFinalBlock(plainData, 0, plainData.Length) End Using End Using Dim encryptedText As String = Convert.ToBase64String(encryptedData) MessageBox.Show("加密后的文本:" & encryptedText) End Sub End Class ``` 该代码中,首先创建一个AesManaged对象,然后设置工作模式为ECB,填充模式为PKCS7。接下来设置密钥(16字节),通过CreateEncryptor方法创建一个加密转换器,使用该转换器将明文数据加密成密文数据。最后,将密文数据转换为Base64字符串,并弹出消息框显示加密后的文本。 需要注意的是,ECB模式可能存在安全问题,因为它每次使用相同的密钥和数据块加密时都会产生相同的密文块,容易受到字典攻击和重放攻击的威胁。在实际应用中,更好的选择是使用更安全的工作模式,如CBC(密码块链)或CTR(计数器)模式。 ### 回答2: AES(Advanced Encryption Standard)是一种对称加密算法,而ECB(Electronic Codebook)是一种AES的加密模式。如果要使用VB实现AES/ECB,可以借助第三方库或自己编写代码来完成。 如果选择使用第三方库来实现AES/ECB,可以使用.NET Framework提供的System.Security.Cryptography命名空间中的AesManaged类。以下是一个示例代码: ```vb Imports System.Security.Cryptography Imports System.Text Public Class AesEncryption Private Function Encrypt(plainText As String, key As Byte(), iv As Byte()) As String Using aes As New AesManaged() aes.Key = key aes.IV = iv aes.Mode = CipherMode.ECB Dim encryptor As ICryptoTransform = aes.CreateEncryptor(aes.Key, aes.IV) Dim cipherBytes As Byte() = Nothing Using ms As New IO.MemoryStream() Using cs As New CryptoStream(ms, encryptor, CryptoStreamMode.Write) Dim plainBytes As Byte() = Encoding.UTF8.GetBytes(plainText) cs.Write(plainBytes, 0, plainBytes.Length) End Using cipherBytes = ms.ToArray() End Using Dim encryptedText As String = Convert.ToBase64String(cipherBytes) Return encryptedText End Using End Function Private Function Decrypt(cipherText As String, key As Byte(), iv As Byte()) As String Using aes As New AesManaged() aes.Key = key aes.IV = iv aes.Mode = CipherMode.ECB Dim decryptor As ICryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV) Dim plainBytes As Byte() = Nothing Using ms As New IO.MemoryStream() Using cs As New CryptoStream(ms, decryptor, CryptoStreamMode.Write) Dim cipherBytes As Byte() = Convert.FromBase64String(cipherText) cs.Write(cipherBytes, 0, cipherBytes.Length) End Using plainBytes = ms.ToArray() End Using Dim decryptedText As String = Encoding.UTF8.GetString(plainBytes) Return decryptedText End Using End Function Public Sub TestAesEncryption() Dim plainText As String = "Hello, world!" Dim key As Byte() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} Dim iv As Byte() = {17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32} Dim encryptedText As String = Encrypt(plainText, key, iv) Dim decryptedText As String = Decrypt(encryptedText, key, iv) Console.WriteLine("Plain Text: " & plainText) Console.WriteLine("Encrypted Text: " & encryptedText) Console.WriteLine("Decrypted Text: " & decryptedText) End Sub End Class ``` 以上示例代码中,使用AesManaged类来进行AES加密和解密操作,设置密钥和初始化向量(IV),并将模式设置为ECB。Encrypt函数用于加密字符串,Decrypt函数用于解密字符串。TestAesEncryption函数用于测试加密和解密过程。 通过以上方式,可以使用VB实现AES/ECB加密算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gnuljf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值