user32.dll - MessageBox - Was ist eigentlich -> hWnd% ?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Commander Keen

Betreff: user32.dll - MessageBox - Was ist eigentlich -> hWnd% ?

BeitragFr, Aug 17, 2012 2:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Code: [AUSKLAPPEN]
MessageBox%(hWnd%,lpText$,lpCaption$,uType%):"MessageBoxA"

MessageBox(window,"Was willst du?","Frage!",$4+$20)


Alle Parameter bis auf "hWnd%" habe ich verstanden. Was heisst genau der Parameter "hWnd%" bzw. die o.g. "Window" und welche Alternative gibt es zum Beispiel zu "window" noch?

Danke.

Commander Keen

Starwar

BeitragFr, Aug 17, 2012 8:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Zitat:
Windows USER implements abstractions that are used to build Windows applications. These include
HWND (Handle to Window)
The HWND is the basic unit of visual display and input in the Windows developer platform. All visual elements either have their own HWNDs or live as part of a larger HWND. Many functions in Windows USER manipulate properties on HWNDs such as size, position and title. Each HWND also has a communication channel (WNDPROC - Window Procedure) for delivery of messages.
Windows are managed as a tree, with the desktop window at the root of the hierarchy. Child windows are usually (but not always) visually contained within their parents.

Quelle: https://en.wikipedia.org/wiki/Windows_USER

Und
Zitat:
hWnd [in, optional]
Type: HWND
A handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

Quelle: http://msdn.microsoft.com/en-u...85%29.aspx

Alternativen sehe ich so direkt keine.
Das hwnd-Handle kannst du über "FindWindow" bzw. "GetActiveWindow" oder am einfachsten (ich habs unter Win7 x64 nicht getestet) über die in Blitz integrierte Funktion SystemProperty("ApphWnd") ermitteln.

MFG

Commander Keen

BeitragFr, Aug 17, 2012 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für deine Antwort auf meine Anfrage.

Starwar hat Folgendes geschrieben:
Das hwnd-Handle kannst du über "FindWindow" bzw. "GetActiveWindow" oder am einfachsten (ich habs unter Win7 x64 nicht getestet) über die in Blitz integrierte Funktion SystemProperty("ApphWnd") ermitteln.


Kannst du mir bitte exemplarisch Code-Beispiel zeigen? - Ich kann Anhang als Code-Beispielen besser nachvollziehen....Danke.

Commander Keen

Johannes´

BeitragFr, Aug 17, 2012 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
hWnd=FindWindowA(0,"Mein Programm")

Hier greifst du auf die Funktion "FindWindowA" der User32.dll zurück. hWnd stellt den Parameter dar, den du für die Messagebox benötigst.


Alternativ sollte das auch funktionieren (wie Starwar bereits sagte), ich habe es jedoch nicht getestet:
Code: [AUSKLAPPEN]
hWnd=SystemProperty("AppHWND")

Propellator

BeitragFr, Aug 17, 2012 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Als jemand der die SystemProperty Lösung schon benutzt hat, kann ich sagen dass sie funktioniert und dies sogar zuverflässiger, da sie sich nicht auf den ApPTitle o.ä. verlässt.
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Commander Keen

BeitragFr, Aug 17, 2012 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Anhang von Beispielen von Euch bin ich sehr Dankbar, habe dennoch nicht verstanden.

1) Johannes hat Folgendes geschrieben:
Code: [AUSKLAPPEN]
hWnd=FindWindowA(0,"Mein Programm")

Hier greifst du auf die Funktion "FindWindowA" der User32.dll zurück. hWnd stellt den Parameter dar, den du für die Messagebox benötigst.

Was heisst das Konkeret? Was macht die Funktion "FindWindowA" genau (Mein BlitzBasic3D will diese Funktion nicht erkennen)? Welche Werte stellt der Parameter "hWnd" für die MessageBox dar bzw. für was kann man das genau anfangen?

Eventuell einen einfachen Beispiel, bitte, aber nicht zu schwierig! Nochmal Danke.

2) Code: [AUSKLAPPEN]
MessageBox(window,"Was willst du?","Frage!",$4+$20)


Der 1. Parameter heisst hier window, man kann auch den wert "0" eintragen. Aber ich sehe da keine großen Differenzen. Wozu ist der erste Parameter da?

Commander Keen

Xeres

Moderator

BeitragFr, Aug 17, 2012 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die FindWindowA Funktion benutzen zu können, musst du sie in einer .decls Datei in "Blitz3D\userlibs" deklarieren. Es gibt ein Beispiel in der UserLibs.txt, aber vielleicht ist einer der Herren so freundlich, den entsprechenden Code zu posten - ich hab da keinen parat.
hWnd ist das Fensterhandle von dem Fenster mit dem Titel "Mein Programm" - aber wie Propellator schon sagte, ist der Weg über den Namen nicht 100% sicher.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Propellator

BeitragFr, Aug 17, 2012 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nimm die Lösung über SystemProperty("AppHWND"). Die ist nicht nur korrekter und weniger fehleranfällig, sondern braucht auch keine .decls.

Wie Xeres schon gesagt hat: hwnd ist das Fensterhandle. Es ist eine eindeutige ID über welche die WinAPI ein Fenster erkennt. MessageBox wird dann an dieses Fenster "gebunden", d.h. man muss erst die MessageBox beantworten bevor das hwnd wieder geklickert werden darf. (Soweit ich weiss, könnte auch ein bestimmtes Flag dafür sein.)
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis.

Commander Keen

BeitragSa, Aug 18, 2012 16:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Propellator hat Folgendes geschrieben:
[..] hwnd ist das Fensterhandle. Es ist eine eindeutige ID über welche die WinAPI ein Fenster erkennt. MessageBox wird dann an dieses Fenster "gebunden", d.h. man muss erst die MessageBox beantworten bevor das hwnd wieder geklickert werden darf. (Soweit ich weiss, könnte auch ein bestimmtes Flag dafür sein.)


Anders gefragt: Was passiert wenn man ohne Fenster-Handle arbeiten würde?
Commander Keen

Starwar

BeitragSa, Aug 18, 2012 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Probiers aus Wink Normalerweise setzt man es dann "null" (Wikipedia: Nullzeiger) aber wie das in Blitz geht weiß ich nicht.
Hier übrigens die .decls für die komplette user32.dll: blitzbasic.com Codearchiv
Wie du .decls-Dateien verwendest, kannst du über die Forensuche erfahren Wink
MFG
 

MaDuYaa

BeitragSo, Aug 19, 2012 12:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Anders gefragt: Was passiert wenn man ohne Fenster-Handle arbeiten würde?


Wenn Du ohne Fenster-Handle arbeitest, dann hat deine MessageBox nichts direkt mit deinem Hauptfenster am Hut, die MessageBox wird als eigenständiges Fenster behandelt.
Dennoch kann die MessageBox ohne Fensterhandler mit dem Hauptfenster agieren.

Commander Keen

BeitragDi, Aug 21, 2012 12:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Für all denjenigen, die auf meine Anfrage reagiert haben-> Danke!
Commander Keen

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group