Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

AppWND?????

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 03:19    Titel: AppWND????? Antworten mit Zitat

Gibts sowas in Freebasic?
Problem ist folgendes.
Wenn ich mein fenster, welches von einer mit FB geladenen dll mit mausklick schliessen will, kommt das WM_CLOSE wohl nicht dort an, also muss ich das fensterhandle wohl erst damit verknüpfen.

In BlitzBasic gibts einen solchen Befehl, nennt sich SystemProperty "AppWND" und in GLBasic auch nent sich dort GLBASIC_HWND().

Sowas muss es doch auch für freebasic geben, welches den handle des erstellten programms zurückgibt.

Ich hoffe ich bringe nichts durcheinander, aber ich denke ich bin auf dem richtigen weg.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 13:28    Titel: Antworten mit Zitat

eine anwendung (app) ist kein fenster, also kein WND. was du suchst, ist wohl das handle des GFX-Fensters, das kriegst du so:
Code:

#include "windows.bi"
#include "fbgfx.bi"

Using fb

Dim As HWND hwnd

Screen 12

ScreenControl GET_WINDOW_HANDLE, cast(Integer,hwnd)


wenn deine anwendung selber das hwnd erstellt (also keinen fb-screen benutzt), musst du das von der dll bekommen...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 14:19    Titel: Antworten mit Zitat

Ja, aber wie?
Ich habe Mit so einem Spy Tool, den Klassennamen gefunden.
Weiß aber nicht, ob das ausreicht.

problem ist folgendes, ich wollte mit setactivewindow etc. herumspielen, brauch aber das HWND dazu.

Ich weiß aber nicht, ob man tatsächlich mit FindWindow("DXWindow",NULL) das entsprechende handle bekommt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 14:26    Titel: Antworten mit Zitat

DXWindow ist wohl recht allgemein. versuch's doch mit dem fenstertitel.
hwnd = FindWindow(0, "fenstertitel")
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 14:30    Titel: Antworten mit Zitat

nein, der fenstertitel ist veränderbar, daher keine gute idee.

aber würde es im prinzip denn funktionieren?

denn ich probier das schon, geht aber nicht

schau mal, geht trotzdem leider nicht...

Code:
#INCLUDE "windows.bi" 
 
DIM Shared AS HWND hwnd   
DECLARE FUNCTION xFlip () AS ANY PTR 
DECLARE FUNCTION xGraphics3D (Widtha AS INTEGER,height AS INTEGER, depth AS INTEGER = 32, mode AS INTEGER = 0, vsync AS INTEGER = 1 ) As integer
DIM SHARED library AS ANY PTR 
'Dim Shared hwnd As Any ptr
library = DYLIBLOAD( "Xors3D" ) 
DIM SHARED xxFlip AS FUNCTION () AS ANY PTR 
DIM SHARED xxGetKey AS FUNCTION () AS ANY PTR 
DIM SHARED xxGraphics3D AS FUNCTION (Widtha AS INTEGER,height AS INTEGER, depth AS INTEGER = 32, mode AS INTEGER = 0, vsync AS INTEGER = 1 ) AS INTEGER 
DIM SHARED xSetWND AS FUNCTION (hwnd AS HWND) AS Any ptr
DIM SHARED xWinMessage AS FUNCTION (msgwin AS STRING) AS INTEGER 
DIM xRenderWorld AS FUNCTION (twen AS INTEGER = 1 ) AS INTEGER 
DIM xUpdateWorld AS FUNCTION (speed AS DOUBLE = 1.0) AS INTEGER 
xWinMessage = DYLIBSYMBOL(library, "_xWinMessage@4") 
xRenderWorld = DYLIBSYMBOL( library, "_xRenderWorld@4" ) 
xUpdateWorld = DYLIBSYMBOL( library, "_xUpdateWorld@4" ) 
xSetWND = DYLIBSYMBOL( library, "_xSetWND@4" ) 
xxFlip = DYLIBSYMBOL( library, "_xFlip@0" )
xxGetKey = DYLIBSYMBOL( library, "_xGetKey@0" )
xxGraphics3D = DYLIBSYMBOL( library, "_xGraphics3D@20" ) 
DIM SHARED xReleasexors AS FUNCTION () AS ANY Ptr
xReleasexors = DYLIBSYMBOL( library, "_xReleaseXors@0" ) 
 
 
 
 
FUNCTION xGraphics3D (Widtha AS INTEGER,height AS INTEGER, depth AS INTEGER = 32, mode AS INTEGER = 0, vsync AS INTEGER = 0 ) AS INTEGER 
   xxGraphics3D (Widtha ,height , depth , mode , vsync  )
   hwnd = FindWindow("DXWindow", NULL)
   xSetWND(hwnd)
   RETURN 0 
END FUNCTION 
 
FUNCTION xFlip ()   AS ANY PTR 
   xxFlip() 
   If xWinMessage("WM_CLOSE") Then DestroyWindow(hwnd)
   RETURN 0 
END FUNCTION


Zuletzt bearbeitet von Heiko am 21.10.2008, 14:33, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 14:32    Titel: Antworten mit Zitat

DXWindow zum suchen zu benutzen ist aber auch recht fragwürdig (laufen zwei anwendungen mit dieser klasse, ist's schon geschehen)... die DLL wird doch wohl noch ihr eigenens handle kennen...
aber ja, du kannst es mit dxwindow ausprobieren. solange nicht 0 rauskommt, wurde was gefunden.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 14:40    Titel: Antworten mit Zitat

menno, ich weiß nicht wie ich es erklären soll.


Ich versuche es am beispiel von blitzbasic zu erklären.
Dieses hat ein eigenes handle, (also die erstellte exe) und dieses bekommt man bei BlitzBasic mittels SystemProperty "AppHWND". Liefert also das handle des Fensters zurück.

Soweit so gut.
Meine DLL nun, nimmt dieses Handle und benutzt es sooo

xSetWND(hwnd) wobei hwnd dann dem Wert von SystemProperty "AppHWND" entspricht.

Ich bin nicht so ein Profil, aber ich denke es wird einfach dem Blitzbasic das eigene handle untergeschoben.

nur habe ich keinen plan, wie ich das nun hier machen soll.

Das einzige wäre ja, sinnfreierweise fbgfx einzubinden, um dort das fbgfx handle ebenso zu missbrauchen, oder?

damit das WM_Close dort auch ankommt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 14:43    Titel: Antworten mit Zitat

eine exe hat kein hwnd, das hab ich schon mal erklärt. ich vermute, dass deine 3d-bibliothek sich genau wie OpenGL unter freebasic benutzen lässt: du erstellst einen fbgfx-Screen, ermittelst dessen handle (wie beschrieben) und setzt dann dieses handle ein. ansonsten MUSS deine dll selbst das fenster erstellen (und so wie du aus der blitz-sicht argumentierst, tut sie das nicht) und dann würde sie es ja wohl auch kennen.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 21.10.2008, 16:44    Titel: Antworten mit Zitat

Zitat:
Gibts sowas in Freebasic?
Problem ist folgendes.
Wenn ich mein fenster, welches von einer mit FB geladenen dll mit mausklick schliessen will, kommt das WM_CLOSE wohl nicht dort an...


meinst Du das in etwa so?

Code:

screen 18

dim key as string

do
    key=inkey
   
    'programm

    sleep 1
       
loop until key=chr(27) or key=(chr(&hFF)+"k") 'schleife/programm bei esc oder X-Button beenden

_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 17:44    Titel: Antworten mit Zitat

das (chr(&hFF)+"k") ist das X im fenster oben?

geht aber trotzdem irgendwie nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 17:56    Titel: Antworten mit Zitat

ja, ist es. und lässt sich am bequemsten mit Chr(255,107) abkürzen lächeln
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 18:26    Titel: Antworten mit Zitat

geht das auch anders.
es scheint so, als wenn die dll die die eingaben mopst.
hab zwar auch befehle wie GetKey KeyHit etc. aber damit ließ sich das bisher nicht umsetzen.
Kann man irgendwie noch diesen Mausklick auf dem button abfragen?

wenn ich diese eingabe als ascii hätte, das könnte ich abfragen.
so wie tastatur scancode, aber eben nur einen.....
gibts das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 21.10.2008, 19:11    Titel: Antworten mit Zitat

hast du versucht, die fenstermeldungen abzufangen? siehe SCREENEVENT in der referenz, meldung 13.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 20:23    Titel: Antworten mit Zitat

EVENT_WINDOW_CLOSE

das meinst du?
wie müsste ich das denn anwenden.
als einfache IF abfrage?

hier müsste es rein...
Code:
FUNCTION xFlip ()   AS ANY PTR
   
   
'   If xWinMessage("WM_CLOSE") Then xReleasexors()
   xxFlip() 
   RETURN 0 
END FUNCTION
 


weiß ja nicht, ob das auch die abfrage von dem richtigen fenster nimmt.
nutze ja nicht fbgfx.
sondern ein dx fenster.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heiko



Anmeldungsdatum: 28.07.2008
Beiträge: 101

BeitragVerfasst am: 21.10.2008, 20:46    Titel: Antworten mit Zitat

ich habs gefunden xWinMessage war wohl falsch definiert. AS Zstring ptr hätte es wohl sein müssen.

jetzt gehts endlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz