 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 18.10.2008, 01:23 Titel: [Ich gebs auf] DestroyWindow Problem |
|
|
Siehe letzten Post................
Wie kann ich auf GetActiveWindow und DestroyWindow in user32.dll zugreifen?
Ich brauch unbedingt diese beiden Funktionalitäten in einem FB Programm um ein Fenster, welches durch eine mittels FB geladene dll erstellt wird, wieder zu schliessen.
Zuletzt bearbeitet von Heiko am 20.10.2008, 20:21, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.10.2008, 01:44 Titel: |
|
|
Code: | #include "windows.bi" |
 _________________ » 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: 18.10.2008, 02:03 Titel: |
|
|
soweit bin ich jetzt
Code: | extern "windows" lib "user32"
declare function DestroyWindow (hWnd As integer) As Integer
declare function GetActiveWindow () as Integer
end Extern
Declare Function xCloseWindow () As Any ptr
Function xCloseWindow () As Any ptr
DestroyWindow ( GetActiveWindow() )
DylibFree library
Return 0
End Function |
aber ich glaube es funktioniert nicht, weil ich beim öffnen des fensters vielleicht noch mit SetActiveWindow das handle bestimmen sollte.
nur weiß ich nicht wie.....
kann mir da jemand helfen bitte....?
Ich bekomm das verfluchte Fenster nicht wieder geschlossen! |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 19.10.2008, 16:49 Titel: |
|
|
Wie kann man denn nun auf diese Funktionen zugreifen? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.10.2008, 17:47 Titel: |
|
|
Code: | #include "windows.bi"
...code...
GetActiveWindow(blabalbla)
DestroyWindow(blablabla)
...mehr code...
|
 _________________ » 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: 19.10.2008, 18:56 Titel: |
|
|
Wenn ich noch SetActiveWindow machen möchte, wie stelle ich das dann an?
Muss ja irgendwas in das (blablabla) einsetzen.
Also es gibt einen xGraphics3D(x,y.....) Befehl, und auch mit Funktion dazu.
Oder kann ich da dann irgendeinen Namen einsetzen?
Keine Ahnung wie das funktionieren soll.
Also es gibt in der 3D Engine auch den Befehl xSetWND(hwnd) aber dort wird als datentyp HWND angeben und ich weiß nicht, wie ich diesen nutzen soll.
Kurz gesagt, es wird in der Funktion xGraphics3D das fenster erstellt, und ich müsste dort dann das fenster handle erstellen, um es später auch schliessen zu können.
ich weiß, schwierig erklärt, ich weiß nicht, was für informationen notwendig sind, um es besser zu erklären, oder zu veranschaulichen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.10.2008, 19:18 Titel: |
|
|
Ich weiß nicht, was dein problem ist, SetActiveWindow benötigt ein HWND, woher das kommt, ist deine sache, da kann ich dir nicht helfen.
Im übrigen empfehle ich dir, FBEdit zu benutzen, falls du das nicht tust, weil das unter anderem Syntaxvervollständigung für WinAPI-Funktionen hat. _________________ » 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: 19.10.2008, 19:24 Titel: |
|
|
mmmm vielleicht bekomm ich das doch noch hin, es gibt den befehl xSetHWND......mmmmmmm in der dll.
Aber dazu brauch ich eine Antwort...
Und zwar, normalerweise deklariere ich einfach so
Code: | Dim xFlip As Function () AS Any Ptr |
und dann
Code: | xFlip = DYLIBSYMBOL( library, "_xFlip@0" ) |
nimmt er an, ohne zu meckern.
Problem ist folgendes.
ich brauche aber noch zusätzlich dieses...
Code: | Function xFlip () As Any Ptr
engine = GetActiveWindow()
IF xWinMessage("WM_CLOSE") THEN DestroyWindow(Engine)
End Function |
da meckert der compiler aber wegen doppelter deklaration.
kann man das irgendwie verbinden?
also brauch die deklaration, damit der befehl xFlip() in der DLL gefunden wird, gleichzeitig muss aber bei dessen ausführung eben noch der code in der obigen xFlip Funktion ausgeführt werden.
Also eigentlich in der Funktion das was ich da drin stehen habe und vor End Function dann der zugriff auf die dll.
Hoffe das war verständlich, wahrscheinlich bekomme ich den rest dann selber hin. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.10.2008, 19:49 Titel: |
|
|
zwei funktionen können nicht den gleichen namen haben. so einfach ist das.
warum nimmst du nicht einfach einen anderen namen für die programminterne funktion? _________________ » 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: 19.10.2008, 20:03 Titel: |
|
|
weil ein und die selbe funktion bzw. der eine befehl sein soll.
habs fast hinbekommen, aber noch nicht ganz.
vielleicht kannst du ja damit was anfangen....
Code: | Dim Shared hwnd As HWND
Dim Shared xSetWND As Function (hwnd As HWND) As Any Ptr
xSetWND = DYLIBSYMBOL( library, "_xSetWND@4" )
Function xGraphics3D (Widtha AS INTEGER,height AS INTEGER, depth AS INTEGER = 32, mode AS INTEGER = 0, vsync AS INTEGER = 1 ) AS INTEGER
xSetWND((HWND)FB_Xors) As Any ptr
DYLIBSYMBOL( library, "_xGraphics3D@20" )
Return 0
End Function
|
kommt folgender fehler...
Code: | C:/Users/Nutzer/Documents/xors3dtest/xors3dtest.bi(13) error 14: Expected identifier, found 'HWND' in 'Dim Shared hwnd As HWND'
C:/Users/Nutzer/Documents/xors3dtest/xors3dtest.bi(14) error 56: Illegal specification, at parameter 1 (hwnd) in 'Dim Shared xSetWND As Function (hwnd As HWND) As Any Ptr'
C:/Users/Nutzer/Documents/xors3dtest/xors3dtest.bi(33) error 7: Expected ')', found 'FB_Xors' in 'xSetWND((HWND)FB_Xors) As Any ptr'
Build error(s) |
ich hab das mit dem Datentyp HWND irgendwo gelesen, aber das funktioniert noch nicht ganz, wo "könnte" der Fehler liegen?
P.S. Ich finde es total toll, dass du mir hilfst.Vielen vielen Dank.
[edit] in glbasic INLINE C wird bei der deklaration auch komischerweise ein datentyp void* angeben bei diesem HWND.
Ich hab da aber zuwenig Erfahrung um etwas damit anzufangen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 19.10.2008, 21:33 Titel: |
|
|
es soll der gleiche befehl sein... wieso rufst du dann nicht einfach die DLL-Funktion von der FreeBASIC-Funktion aus auf? :] _________________ » 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: 19.10.2008, 22:22 Titel: |
|
|
nein, es ist einfach zu erklären.
bei ausführung von xFlip() soll zuerst dieses gemacht werden
Code: | engine = GetActiveWindow()
IF xWinMessage("WM_CLOSE") THEN DestroyWindow(Engine) |
und dann eben der xFlip befehl aus der dll gestartet werden, sozusagen.
das hab ich ja nun auch hinbekommen, wie das geht.
nur mit diesem HWND komm ich nicht zurecht, wie aus meinem letzten code zu ersehen ist. |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 20.10.2008, 00:14 Titel: |
|
|
sorry wegen doppelpost, hier mal alles was ich habe.funktionierender quellcode, bis auf dass ich eben das fenster nicht wieder geschlossen kriege.
sowie das komplette paket mal mit winrar gepackt, zum probieren.
Code: | #INCLUDE "xors3dtest.bi"
xGraphics3D(800,600)
do
xUpdateWorld()
xRenderWorld(1)
xFlip()
LOOP UNTIL MultiKey(1)
DestroyWindow(Engine)
End
|
Code: | #include "windows.bi"
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 engine As Any ptr
DIM SHARED library AS ANY Ptr
library = DYLIBLOAD( "Xors3D" )
Dim Shared xxFlip 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 integer) 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" )
xxGraphics3D = DYLIBSYMBOL( library, "_xGraphics3D@20" )
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 )
engine = SetActiveWindow(GetActiveWindow())
Return 0
End Function
Function xFlip () As any Ptr
If MultiKey(1) Then DestroyWindow(engine)
xxFlip()
Return 0
End Function |
http://www.zshare.net/download/50068500d122dc13/ |
|
Nach oben |
|
 |
Heiko
Anmeldungsdatum: 28.07.2008 Beiträge: 101
|
Verfasst am: 20.10.2008, 20:23 Titel: |
|
|
so mädels, ich gebs auf.
Hab mir mit dem SPY Tool den Classname geholt(denke der stimmt auch).
Hab jetzt echt alles versucht, bin mit meinem Latain ehrlich am Ende.
hier das was ich geschafft habe, funktioniert aber nicht....
Fenster läßt sich nicht schliessen....
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 engine As Any ptr
DIM SHARED library AS ANY Ptr
library = DYLIBLOAD( "Xors3D" )
Dim Shared xxFlip 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 integer) 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" )
xxGraphics3D = DYLIBSYMBOL( library, "_xGraphics3D@20" )
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)
SetActiveWindow(hwnd)
Return NUll
End Function
Function xFlip () As Any ptr
If MultiKey(1) Then EndTask(hwnd, FALSE, true)
xxFlip()
Return NULL
End Function |
Code: | #INCLUDE "xors3dtest.bi"
xGraphics3D(800,600)
do
xUpdateWorld()
xRenderWorld(1)
xFlip()
LOOP UNTIL MultiKey(1)
DestroyWindow(hwnd)
End | [/code] |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.10.2008, 20:52 Titel: |
|
|
wenn es keine funtkion namen xGetHWND gibt, frag doch einfach beim Hersteller nach, wie man ran kommt. Ich weiß nicht wie die DLL funktioniert, aber mit SetHWND würdest du vermutlich einem bestimmten Fenster den 3D-Bereich zuordnen (z.B. einem FreeBasic-Fenster). Mit GetHWND würdest du dieses Handle rausbekommen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|
|
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.
|
|