Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 03:19 Titel: AppWND????? |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 13:28 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 14:19 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 14:26 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 14:30 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 14:32 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 14:40 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 14:43 Titel: |
|
|
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 |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 21.10.2008, 16:44 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 17:44 Titel: |
|
|
das (chr(&hFF)+"k") ist das X im fenster oben?
geht aber trotzdem irgendwie nicht. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 17:56 Titel: |
|
|
ja, ist es. und lässt sich am bequemsten mit Chr(255,107) abkürzen  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 18:26 Titel: |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 21.10.2008, 19:11 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 20:23 Titel: |
|
|
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 |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 21.10.2008, 20:46 Titel: |
|
|
ich habs gefunden xWinMessage war wohl falsch definiert. AS Zstring ptr hätte es wohl sein müssen.
jetzt gehts endlich. |
|
Nach oben |
|
 |
|