SystemParametersInfo(SPI_GETNONCLIENTMETRICS,...

30/12/2007 - 00:12 von Gert Wietzorek | Report spam
Hallo zusammen,

ich verzweifele an diesem doch an sich einfachen Funktionsaufruf. Bin
mir sicher, das alle Deklarationen lt. Doku korrekt sind. Die
zurückgelieferte Struktur wird jedoch nicht gefüllt. Mir scheint's ja
eher ein Fehler der Dokumentation zu sein. Vielleicht weiß jemand Rat wo
es hakt...

<--


Private Declare Function SystemParametersInfo Lib _
"USER32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam _
As Long, lpvParam As Any, ByVal fuWinIni As Long) _
As Long
Private Const SPI_GETNONCLIENTMETRICS = 41

Private Const LF_FACESIZE = 32

Private Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName As String * LF_FACESIZE
End Type

'(Deklaration von lfFaceName als Bytearray bringts auch nicht)

Private Type NONCLIENTMETRICS
uiSize As Long
iBorderWidth As Long
iScrollWidth As Long
iScrollHeight As Long
iCaptionWidth As Long
iCaptionHeight As Long
lfCaptionFont As LOGFONT
iSMCaptionWidth As Long
iSMCaptionHeight As Long
lfSMCaptionFont As LOGFONT
iMenuWidth As Long
iMenuHeight As Long
lfMenuFont As LOGFONT
lfStatusFont As LOGFONT
lfMessageFont As LOGFONT
iPaddedBorderWidth As Long
End Type

Private SPI_Info As NONCLIENTMETRICS

Private Sub Class_Initialize()
SPI_Info.uiSize = Len(SPI_Info)
Call Me.Refresh
End Sub

Public Sub Refresh()
Call SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, _
SPI_Info, 0)
End Sub


->

Gruß

Gert





| Antworten nur in die Newsgroup, |
| die E-Mail Adressen existieren nicht! |
| |
| answers and questions only to the newsgroup,|
| the email adresses are not valid |
| |
| http://www.gwsoftware.de |
 

Lesen sie die antworten

#1 Timo Kunze
30/12/2007 - 00:25 | Warnen spam
Gert Wietzorek schrieb:
ich verzweifele an diesem doch an sich einfachen Funktionsaufruf. Bin
mir sicher, das alle Deklarationen lt. Doku korrekt sind. Die
zurückgelieferte Struktur wird jedoch nicht gefüllt. Mir scheint's ja
eher ein Fehler der Dokumentation zu sein. Vielleicht weiß jemand Rat wo
es hakt...


Du führst den Code nicht unter Vista aus, oder?
Das Problem ist folgendes: NONCLIENTMETRICS hat mit Vista einen neuen
Member bekommen: iPaddedBorderWidth
Bei SPI_Info.uiSize = Len(SPI_Info) wird dieser natürlich mit
einbezogen, wodurch alle Systeme außer Vista eine Struktur ungültiger
Größe übergeben bekommen und einen Fehler zurückgeben.

Wenn dein Code sowohl auf Vista als auch auf àlteren Systemen laufen
soll, ist es am besten auf àlteren Systemen einfach von Len(SPI_Info) 4
Byte für iPaddedBorderWidth abzuziehen. Wenn der Code nicht auf Vista
laufen muss (vll. tut er es sogar trotzdem, bin mir da grad nicht
sicher), kannst du auch einfach iPaddedBorderWidth aus der Deklaration
von NONCLIENTMETRICS streichen.

Timo
www.TimoSoft-Software.de - Unicode controls for VB6
"Those who sacrifice freedom for safety deserve neither."

Ähnliche fragen