"getdevicecaps" funktioniert nicht unter VB 2005 Express

henning246

Grünschnabel
Hallo!

Ich versuche, mittels "getdevicecaps" die aktuelle Bildschirmauflösung zu ermitteln (s. Codeschnipsel) :

Code:
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As Integer, ByVal nIndex As Integer) As Integer

Public Sub GetCurrentSettings(ByVal hDC As Integer, ByRef x As Short, ByRef y As Short, ByRef Colors As Short, ByRef Frequenz As Short)
		
        x = GetDeviceCaps(hDC, HORZRES)
	y = GetDeviceCaps(hDC, VERTRES)
	Colors = GetDeviceCaps(hDC, BITSPIXEL)
        Frequenz = GetDeviceCaps(hDC, VREFRESH)

	End Sub

Das funktioniert unter VB 6.0 auch einwandfrei.

Nun habe ich versucht, das ganze in VB 2005 Express Edition zu übertragen, aber "getdevicecaps" scheint hier nicht zu funktionieren. Ich bekomme für alle Werte (x,y,Colors,Frequenz) immer nur den Wert "0".
Es gibt keinerlei Fehlermeldung oder Warnung vom Debugger.

Ich habe schon stundenlang "gegooglet" und auch dieses Forum durchsucht, aber niemand scheint dieses Problem zu haben.

Was habe ich übersehen? Warum funktioniert "getdevicecaps" nicht unter VB2005?


Mein Betriebssystem: Vista.


Vielen Dank,
Henning
 
Hallo henning,

das Problem ist, dass sich die Datentypen von v.6 zu .NET geändert haben. So auch die Syntax der DLL-Funktionen. Der hDC-Parameter muss nun vom Typ IntPtr sein, dann sollte es funktionieren.

Gruß
PhoenixLoe
 
Hallo!

Danke für die Antwort!

Aber auch so funktioniert es nicht. Die ermittelten Werte sind immer noch alle 0.

Code:
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hDC As IntPtr, ByVal nIndex As Int32) As Int32


Gruss,
Henning
 
Die einzige Erklärung dafür, die ich hätte, wäre, dass das übergebene Device-Handle ungültig ist. Wie erhälst du denn den hDC-Parameter eigentlich?
 
Ich habe ein einfaches Testprogramm erzeugt.

Die Variablen habe ich in der Klasse Form1 deklariert:

Code:
Friend Class Form1
	Inherits System.Windows.Forms.Form
	Dim Colors As Short
	Dim Frequenz As Short
	Dim x As Short
    Dim y As Short
    Dim hDC As Integer

.......

Und in dieser Klasse rufe ich dann beim Programmstart die Funktion GetCurrentSettings auf.


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


        GetCurrentSettings(Me.hDC, x, y, Colors, Frequenz)

...........

"getdevicecaps" und "GetCurrentSettings" stehen in einem Modul.

Hoffe, das beantwortet Deine Frage!? (Bin noch nicht soooo lange dabei...)
 
Naja, ich bin mir zwar gerade nicht wirklich sicher, aber ich glaube, dass ein Fenster für diese Funktion kein geeigneter Gerätekontext ist. Schließlich bräuchtest du das Handle des Bildschirms, nicht des Fensters.

Versuche mal herauszufinden, wie man das Handle des Bildschirms ermitteln kann. Ich bleibe auch dran.

Gruß
PhoenixLoe
 
So, ich hab nun noch ein wenig gestöbert und im Hilfesystem von VB2005 unter folgender Url was gefunden:

ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.de/dv_VBVers/html/24cd2d55-ebf1-42d6-b755-00e9001f1cb8.htm

Hier werden Unterschiede von VB6 und VB 2005 aufgelistet. Und da steht zu hDC folgendes:

HDC-Eigenschaft
Neue Implementierung. Gerätekontexte werden mit GDI+ nicht mehr benötigt.

Es gibt diese Implementierung für VB2005 wohl nicht mehr.

Nun werde ich mich wohl mit GDI+ auseinandersetzen müssen?!

Na ja,
Henning
 

Neue Beiträge

Zurück