Forum: PC-Programmierung C# vordefinierte Strukturen verwenden


von Markus (Gast)


Lesenswert?

Hallo,

ich möchte mit GetWindowInfo 
(http://msdn.microsoft.com/en-us/library/ms633516.aspx) die Fenstergröße 
eines Fensters herausfinden. Dafür wird die WINDOWINFO Structure 
verwendet. Laut http://msdn.microsoft.com/en-us/library/ms632610.aspx 
ist diese Struktur in Winuser.h (include Windows.h) definiert. Wie kann 
ich diese Struktur verwenden?
#include <Windows.h> führt immer zur Fehlermeldung "Preprocessor 
Directive expected"

von Chris .. (dechavue)


Lesenswert?

Markus schrieb:
> Wie kann ich diese Struktur verwenden?

Gar nicht, du musst in C# eine äquivalente Struktur erstellen.
Für WinAPI-Funktionen finden sich diese fast immer auf www.pinvoke.net

(In deinem Fall http://pinvoke.net/default.aspx/Structures.WINDOWINFO 
und http://pinvoke.net/default.aspx/user32.GetWindowInfo )

von Markus (Gast)


Lesenswert?

OK, danke. Hab die beiden Strukturen WINDOWINFO 
(http://www.pinvoke.net/default.aspx/Structures/WINDOWINFO.html) und 
RECT (http://www.pinvoke.net/default.aspx/Structures/RECT.html) 
rüberkopiert und bekomme als Fehlermeldung "Inconsistent accessibility: 
parameter type 'out WindowsFormsApplication1.Form1.WINDOWINFO' is less 
accessible than method 
'WindowsFormsApplication1.Form1.GetWindowInfo(System.IntPtr, out 
WindowsFormsApplication1.Form1.WINDOWINFO)'

Sehr frustrierend alles. Ich muss wohl leider wieder MCs only 
programmieren, C# ist irgendwie zu hoch für mich :-(

von Arc N. (arc)


Lesenswert?

Markus schrieb:
> OK, danke. Hab die beiden Strukturen WINDOWINFO
> (http://www.pinvoke.net/default.aspx/Structures/WINDOWINFO.html) und
> RECT (http://www.pinvoke.net/default.aspx/Structures/RECT.html)
> rüberkopiert und bekomme als Fehlermeldung "Inconsistent accessibility:
> parameter type 'out WindowsFormsApplication1.Form1.WINDOWINFO' is less
> accessible than method
> 'WindowsFormsApplication1.Form1.GetWindowInfo(System.IntPtr, out
> WindowsFormsApplication1.Form1.WINDOWINFO)'

GetWindowInfo erwartet im "Original" einen Zeiger auf eine Struktur vom 
Typ WINDOWINFO. D.h. in C# wäre das richtige Attribut ref und nicht out 
(so wie es auch auf pinvoke.net gemacht wird).
out wird verwendet, um bspw. mehrere Werte zurückzugeben wobei die 
aufgerufene Funktion/Methode dann einen Wert zuweisen muss. Anders 
gesagt: Der Aufrufer darf auch nicht initialisierte (Zeiger auf) 
Variablen übergeben.
ref dagegen erwartet initialisierte Variablen.
Die Fehlermeldung kommt sehr wahrscheinlich daher, dass WINDOWINFO jetzt 
irgendwo anders definiert wird, aber nicht public gemacht wurde. D.h. 
die Struktur ist einfach nicht sichtbar.


>
> Sehr frustrierend alles. Ich muss wohl leider wieder MCs only
> programmieren, C# ist irgendwie zu hoch für mich :-(

von Markus (Gast)


Lesenswert?

Ja, Du hast recht, das wars. Vielen Dank für Deine Erklärung, ich glaube 
ich habs sogar kapiert!

von Sven H. (dsb_sven)


Lesenswert?

> C# ist irgendwie zu hoch

Deshalb nennt man so was auch Hochsprache...

;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.