升级后,API 调用失败了,从 VB6 -> VB.net 2005 Express

carol1980 2006-02-05 02:36:05
原来的一段 VB6 的代码,已经可以成功运行了,用来调解屏幕亮度的,现在升级到了VB.net 里,程序在SaveGamma里的GetDeviceGammaRamp处,就结束了,搞不清怎么回事。

我不知道是不是还有些VB6语言的内容,vb.net 不支持的 :( 请大家帮帮忙


VB 的代码:

Option Explicit

'Gamma Type
Private Type Gamma
Red As Integer
Green As Integer
Blue As Integer
End Type

Private GammaDay As Gamma 'Day Gamma
Private GammaNight As Gamma 'Night Gamma



'Gamma APIs
Private Ramp1(0 To 255, 0 To 2) As Integer
Private Ramp2(0 To 255, 0 To 2) As Integer
Private Declare Function GetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long
Private Declare Function SetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Long, lpv As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long


'Set Gamma
Public Sub SetGamma(ByVal intRed As Integer, ByVal intGreen As Integer, ByVal intBlue As Integer)
Dim i As Integer
Dim ScrDC As Long

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

intRed = intRed / 2
intGreen = intGreen / 2
intBlue = intBlue / 2

'Change Ramp
For i = 0 To 255
If intRed < 0 Then Ramp2(i, 0) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 0)) * (100 - Abs(intRed)) / 100)
If intRed = 0 Then Ramp2(i, 0) = Ramp1(i, 0)
If intRed > 0 Then Ramp2(i, 0) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 0))) * (100 - intRed) / 100))
If intGreen < 0 Then Ramp2(i, 1) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 1)) * (100 - Abs(intGreen)) / 100)
If intGreen = 0 Then Ramp2(i, 1) = Ramp1(i, 1)
If intGreen > 0 Then Ramp2(i, 1) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 1))) * (100 - intGreen) / 100))
If intBlue < 0 Then Ramp2(i, 2) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 2)) * (100 - Abs(intBlue)) / 100)
If intBlue = 0 Then Ramp2(i, 2) = Ramp1(i, 2)
If intBlue > 0 Then Ramp2(i, 2) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 2))) * (100 - intBlue) / 100))
Next

'Set Gamma
SetDeviceGammaRamp ScrDC, Ramp2(0, 0)

End Sub

'Save Gamma
Public Sub SaveGamma()
Dim ScrDC As Long

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

'Reset it
GetDeviceGammaRamp ScrDC, Ramp1(0, 0)

End Sub

'RestoreGamma
Public Sub RestoreGamma()
Dim ScrDC As Long

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

'Reset it
SetDeviceGammaRamp ScrDC, Ramp1(0, 0)

End Sub

Private Function ConvToSignedValue(lngValue As Long) As Integer

'Cheezy method for converting to signed integer
If lngValue <= 32767 Then
ConvToSignedValue = CInt(lngValue)
Exit Function
End If

ConvToSignedValue = CInt(lngValue - 65535)

End Function

Private Function ConvToUnSignedValue(intValue As Integer) As Long

'Cheezy method for converting to unsigned integer
If intValue >= 0 Then
ConvToUnSignedValue = intValue
Exit Function
End If

ConvToUnSignedValue = intValue + 65535

End Function

Private Sub Command1_Click()
GammaDay.Red = 0
GammaDay.Green = 0
GammaDay.Blue = 0
SetGamma GammaDay.Red, GammaDay.Green, GammaDay.Blue
End Sub

Private Sub Command2_Click()
GammaNight.Red = -64
GammaNight.Green = -64
GammaNight.Blue = -64
SetGamma GammaNight.Red, GammaNight.Green, GammaNight.Blue
End Sub

Private Sub Form_Load()
SaveGamma
End Sub

Private Sub Form_Unload(Cancel As Integer)
RestoreGamma
End Sub

...全文
146 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
carol1980 2006-02-06
  • 打赏
  • 举报
回复
自己顶一下~
carol1980 2006-02-06
  • 打赏
  • 举报
回复



:( 没有人指导一下吗?
carol1980 2006-02-05
  • 打赏
  • 举报
回复
这个是升级后的VB.net代码,只手工把 as any 的地方,都改成了 Object, 其他都是自动的结果

Option Strict Off
Option Explicit On
Friend Class Form1
Inherits System.Windows.Forms.Form

'Gamma Type
Private Structure Gamma
Dim Red As Short
Dim Green As Short
Dim Blue As Short
End Structure

Private GammaDay As Gamma 'Day Gamma
Private GammaNight As Gamma 'Night Gamma



'Gamma APIs
Private Ramp1(255, 2) As Short
Private Ramp2(255, 2) As Short
'UPGRADE_ISSUE: Declaring a parameter 'As Any' is not supported. Click for more: 'ms-help://MS.VSExpressCC.v80/dv_commoner/local/redirect.htm?keyword="FAE78A8D-8978-4FD4-8208-5B7324A8F795"'
Private Declare Function GetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Integer, ByRef lpv As Object) As Integer
'UPGRADE_ISSUE: Declaring a parameter 'As Any' is not supported. Click for more: 'ms-help://MS.VSExpressCC.v80/dv_commoner/local/redirect.htm?keyword="FAE78A8D-8978-4FD4-8208-5B7324A8F795"'
Private Declare Function SetDeviceGammaRamp Lib "gdi32" (ByVal hdc As Integer, ByRef lpv As Object) As Integer
'UPGRADE_ISSUE: Declaring a parameter 'As Any' is not supported. Click for more: 'ms-help://MS.VSExpressCC.v80/dv_commoner/local/redirect.htm?keyword="FAE78A8D-8978-4FD4-8208-5B7324A8F795"'
'UPGRADE_ISSUE: Declaring a parameter 'As Any' is not supported. Click for more: 'ms-help://MS.VSExpressCC.v80/dv_commoner/local/redirect.htm?keyword="FAE78A8D-8978-4FD4-8208-5B7324A8F795"'
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Object, ByRef Source As Object, ByVal Length As Integer)
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Integer) As Integer
Private Declare Function GetDesktopWindow Lib "user32" () As Integer


'Set Gamma
Public Sub SetGamma(ByVal intRed As Short, ByVal intGreen As Short, ByVal intBlue As Short)
Dim i As Short
Dim ScrDC As Integer

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

intRed = intRed / 2
intGreen = intGreen / 2
intBlue = intBlue / 2

'Change Ramp
For i = 0 To 255
If intRed < 0 Then Ramp2(i, 0) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 0)) * (100 - System.Math.Abs(intRed)) / 100)
If intRed = 0 Then Ramp2(i, 0) = Ramp1(i, 0)
If intRed > 0 Then Ramp2(i, 0) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 0))) * (100 - intRed) / 100))
If intGreen < 0 Then Ramp2(i, 1) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 1)) * (100 - System.Math.Abs(intGreen)) / 100)
If intGreen = 0 Then Ramp2(i, 1) = Ramp1(i, 1)
If intGreen > 0 Then Ramp2(i, 1) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 1))) * (100 - intGreen) / 100))
If intBlue < 0 Then Ramp2(i, 2) = ConvToSignedValue(ConvToUnSignedValue(Ramp1(i, 2)) * (100 - System.Math.Abs(intBlue)) / 100)
If intBlue = 0 Then Ramp2(i, 2) = Ramp1(i, 2)
If intBlue > 0 Then Ramp2(i, 2) = ConvToSignedValue(65535 - ((65535 - ConvToUnSignedValue(Ramp1(i, 2))) * (100 - intBlue) / 100))
Next

'Set Gamma
SetDeviceGammaRamp(ScrDC, Ramp2(0, 0))

End Sub

'Save Gamma
Public Sub SaveGamma()
Dim ScrDC As Integer

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

'Reset it
GetDeviceGammaRamp(ScrDC, Ramp1(0, 0))

End Sub

'RestoreGamma
Public Sub RestoreGamma()
Dim ScrDC As Integer

'Get Screen's DC
ScrDC = GetDC(GetDesktopWindow)

'Reset it
SetDeviceGammaRamp(ScrDC, Ramp1(0, 0))

End Sub

Private Function ConvToSignedValue(ByRef lngValue As Integer) As Short

'Cheezy method for converting to signed integer
If lngValue <= 32767 Then
ConvToSignedValue = CShort(lngValue)
Exit Function
End If

ConvToSignedValue = CShort(lngValue - 65535)

End Function

Private Function ConvToUnSignedValue(ByRef intValue As Short) As Integer

'Cheezy method for converting to unsigned integer
If intValue >= 0 Then
ConvToUnSignedValue = intValue
Exit Function
End If

ConvToUnSignedValue = intValue + 65535

End Function

Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
GammaDay.Red = 0
GammaDay.Green = 0
GammaDay.Blue = 0
SetGamma(GammaDay.Red, GammaDay.Green, GammaDay.Blue)
End Sub

Private Sub Command2_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command2.Click
GammaNight.Red = -64
GammaNight.Green = -64
GammaNight.Blue = -64
SetGamma(GammaNight.Red, GammaNight.Green, GammaNight.Blue)
End Sub

Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
SaveGamma()
End Sub

Private Sub Form1_FormClosed(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
RestoreGamma()
End Sub
End Class

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧