VB利用API函数设定屏幕颜色数

2016-02-19 18:36 30 1 收藏

下面请跟着图老师小编一起来了解下VB利用API函数设定屏幕颜色数,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

原则上,只改这一次,下一次开机会还原,但假如需重开机,才会Update Registry中的设定,并重开机。 !-- frame contents -- !-- /frame contents --

  假如要永久设定其设定值,请将

  

  b = ChangeDisplaySettings(DevM, 0)

  改成

  

  b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

  注:

  DevM.dmBitsPerPel 便是设定颜色数,其实应说每个Pixel要多少Bits来显示

  4 -- 16色

  8 -- 256色

  16 -- 65536色 以此类推

  
  
  
推荐文章:搞笑之可爱水果表情  清新素洁水仙壁纸集


     Option EXPlicit

  Private Declare Function EnumDisplaySettings Lib "user32" Alias _

  "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, _

  ByVal iModeNum As Long, lpDevMode As Any) As Long

  

  Private Declare Function ChangeDisplaySettings Lib "user32" Alias _

  "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long

  Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _

  ByVal dwReserved As Long) As Long

  

  Const EWX_REBOOT = 2 ’ 重开机

  Const CCDEVICENAME = 32

  Const CCFORMNAME = 32

  

  Const DM_BITSPERPEL = &H40000

  Const DISP_CHANGE_SUCCESSFUL = 0

  Const DISP_CHANGE_RESTART = 1

  Const CDS_UPDATEREGISTRY = 1

  Private Type DEVMODE

  dmDeviceName As String * CCDEVICENAME

  dmSpecVersion As Integer

  dmDriverVersion As Integer

  dmSize As Integer

  dmDriverExtra As Integer

  

  dmFields As Long

  dmOrientation As Integer

  dmPaperSize As Integer

  dmPaperLength As Integer

  dmPaperWidth As Integer

  dmScale As Integer

  dmCopies As Integer

  dmDefaultSource As Integer

  dmPrintQuality As Integer

  dmColor As Integer

  dmDuplex As Integer

  dmYResolution As Integer

  dmTTOption As Integer

  dmCollate As Integer

  

  dmFormName As String * CCFORMNAME

  dmUnusedPadding As Integer

  dmBitsPerPel As Integer

  dmPelsWidth As Long

  dmPelsHeight As Long

  dmDisplayFlags As Long

  dmDisplayFrequency As Long

  End Type

  Private DevM As DEVMODE

  Private Sub Command1_Click()

  Dim a As Boolean

  Dim i As Long

  Dim b As Long

  Dim ans As Long

  a = EnumDisplaySettings(0, 0, DevM) ’Initial Setting

  DevM.dmBitsPerPel = 8 ’设定成256色

  DevM.dmFields = DM_BITSPERPEL

  b = ChangeDisplaySettings(DevM, 0)

  If b = DISP_CHANGE_RESTART Then

   ans = MsgBox("要重开机设定才能完成,重开?", vbOKCancel)

   If ans = 1 Then

  b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY)

  Call ExitWindowsEx(EWX_REBOOT, 0)

   End If

  Else

   If b <> DISP_CHANGE_SUCCESSFUL Then

  Call MsgBox("设定有误", vbCritical)

   End If

  End If

  End Sub

  
  
  
  
推荐文章:搞笑之可爱水果表情  清新素洁水仙壁纸集


  

来源:http://www.tulaoshi.com/n/20160219/1618327.html

延伸阅读
----我们看到有的应用程序不管窗口是否活动都使窗口保持在最上层,常见的MicrosoftWord的文件打开和编辑查找窗口就是这样。在VB开发中可以通过调用SetWindowsPos()API函数实现这个功能。该函数声明如下: PrivateDeclareFunctionSetWindowPos Lib"user32"(ByValhwndAsLong,_ ByValhWndInsertAfterAsLong,ByVal xAsLong,ByV...
我曾经写过一个截获MessageBoxW的程序,可以看看,或许对你有一些帮助. 该程序是基于HOOK原理,主要是将自己的函数放到目标PROCESS的地址空间,这里是使用HOOK实现.首先建立一个MOUSE的HOOK程序,然后在全局鼠标HOOK的DLL中做截获动作,可以在PROCESS_ATTACH时做,也可以在鼠标的HOOK链函数中做. 建立全局HOOK我就不说了,可以在网上很多...
第一节:API基础 API说到底就是一系列的底层函数,是系统提供给 用户用于进入操作系统核心,进行高级编程的途径。通 过在Visual Basic应用程序中声明外部过程就能够 访问Windows API(以及其它的外部DLLs)。在声明 了过程之后,调用它的方法与调用Visual Basic自 己的过程相同。要声明一个DLL过程,需要在代码窗 口的"声明"部分增加一个Declare...
WNetAddConnection创建同一个网络资源的永久性连接WNetAddConnection2创建同一个网络资源的连接WNetAddConnection3创建同一个网络资源的连接WNetCancelConnection结束一个网络连接WNetCancelConnection2结束一个网络连接WNetCloseEnum结束一次枚举操作WNetConnectionDialog启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog启...