tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
539
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    henning246 henning246 ist offline Rookie
    Registriert seit
    Jan 2008
    Beiträge
    7
    Hallo!

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

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     
    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
     

  2. #2
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    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
     

  3. #3
    henning246 henning246 ist offline Rookie
    Registriert seit
    Jan 2008
    Beiträge
    7
    Hallo!

    Danke für die Antwort!

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

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


    Gruss,
    Henning
     

  4. #4
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    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?
     

  5. #5
    henning246 henning246 ist offline Rookie
    Registriert seit
    Jan 2008
    Beiträge
    7
    Ich habe ein einfaches Testprogramm erzeugt.

    Die Variablen habe ich in der Klasse Form1 deklariert:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     
    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 :
    1
    2
    3
    4
    5
    6
    7
    
     
    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...)
     

  6. #6
    PhoenixLoe PhoenixLoe ist offline Mitglied Gold
    Registriert seit
    Apr 2005
    Beiträge
    120
    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
     

  7. #7
    henning246 henning246 ist offline Rookie
    Registriert seit
    Jan 2008
    Beiträge
    7
    Oki, vielen Dank erstmal!

    Ich werde es weiter versuchen und falls ich draufkomme, werd ich mich melden.

    Gruss,
    Henning
     

  8. #8
    henning246 henning246 ist offline Rookie
    Registriert seit
    Jan 2008
    Beiträge
    7
    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
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 17.02.09, 10:49
  2. "getdevicecaps" funktioniert nicht unter VB 2005 Express
    Von henning246 im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 20.01.08, 14:49
  3. Antworten: 1
    Letzter Beitrag: 28.08.07, 09:38
  4. Antworten: 4
    Letzter Beitrag: 24.08.07, 15:58
  5. getURL("http://abc.de" "_blank"); - funktioniert nicht mehr
    Von ali-gator im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 04.05.06, 10:31