Abfrage Schließen Button eines Fensters mit Blitz3D

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Jamagin

Betreff: Abfrage Schließen Button eines Fensters mit Blitz3D

BeitragDi, Okt 23, 2012 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, wie kann man den Schließen Button eines Windows-Fenster mit Blitz3D abfangen bzw. deaktivieren? Ich habe schon die WinAPI Befehle durchgelesen, finde aber nichts wie ich das in BB3D umsetzen kann! Weiß da jemand einen Rat und um nicht alle Fragen einzeln zu stellen noch eine weitere. Wie kann ich verhindern das ein Programm mit BB3D mehrmals gestartet wird? Das Programm sollte immer nur einmal geöffnet werden können. Ich habe es über einen Dateischutz versucht doch was ist wenn ein Fatal Error kommt, dann kann der User das Programm nicht mehr starten, es sei denn diese Datei wird dann wieder gelöscht?

Es würde mir sehr helfen, wenn das jemand schon mal gemacht hat! Bitte!


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

ToeB

BeitragDi, Okt 23, 2012 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das mit dem Mehrmals öffnen ist relativ simple mit UDP zu lösen. Wenn du ein Programm startest wird eine Nachricht an den localhost geschickt. Bekommt man eine Antwort, ist das Aktuelle Programm das was beendet werden muss. Wenn man keine Bekommt, kann das Programm starten. Dann muss man nur einen UDP Stream wieder einrichten welcher die ganze zeit auf Nachrichten wartet und wenn es eine Bekommt eine Antwort sendet Wink

Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Jamagin

BeitragDi, Okt 23, 2012 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Gibt es ein Beispiel dazu bitte?

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Xaymar

ehemals "Cgamer"

BeitragDi, Okt 23, 2012 15:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Um das Schließen eines BlitzBasic Fensters abzufangen, wirst du wohl kaum darum kommen eine UserLib zu verwenden: Ich habe hier dies schon mal für andere erledigt.

Ein Programm nur einmal starten zu lassen geht recht einfach:
Pro Instanz (Pseudo-Code):
Code:
Sende leeres UDP Paket an 127.0.0.1 und Port 65552 und prüfe auf Antwort(100 ms warte zeit).
Wenn Antwort erhalten (
  Fehlermeldung "Das Programm kann nur einmal gestartet werden!"
)
Erstelle UDP Server auf Port 65552
...(vorwärts zur Hauptschleife)
Prüfe auf eingehende Pakete beim lokalen UDP Server und antworte auf diese.


Eine schwerere, wenn auch effektivere Methode gibt es auch. Diese benötigt aber wiederum eine UserLib.
Edit: Es geht aber auch noch einfacherer als mit UDP.
Warbseite

Jamagin

BeitragDi, Okt 23, 2012 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Xaymar,

danke, bekomme aber die Fehlermeldung Userlib not found!
Ich habe Windows7 und im system32 ordner gibt es aber keine lib namens Utility_CloseHandler.dll ?

Wie nun ?

lg. Jamagin

NB: Wäre super wenn ich eine Antwort bekomme!
Bevor du etwas neues beginnst, erledige das alte

Xeres

Moderator

BeitragDi, Okt 23, 2012 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Natürlich musst du dabei die DLL mitliefern, die in Xaymars Beitrag verlinkt ist...
Anstatt mit Netzwerkbefehlen zu hantieren, würde ich aber mit der WinAPI prüfen, ob es schon ein Fenster mit dem Apptitle gibt.
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)

Xaymar

ehemals "Cgamer"

BeitragDi, Okt 23, 2012 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Jamagin hat Folgendes geschrieben:
Hallo Xaymar,

danke, bekomme aber die Fehlermeldung Userlib not found!
Ich habe Windows7 und im system32 ordner gibt es aber keine lib namens Utility_CloseHandler.dll ?

Wie nun ?

lg. Jamagin

NB: Wäre super wenn ich eine Antwort bekomme!


Der SourceCode der DLL ist dem Thread beigelegt, sowie eine vor kompilierte Version. Wie UserLibs funktionieren, bzw. warum diese bei dir nicht funktioniert, sagt dir die Forensuche. Wink
Warbseite

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Okt 24, 2012 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es nur darum geht ein versehentliches Schließen des Fensters abzufangen, kann bei Graphics der vierte Parameter entsprechend gesetzt werden. Es erscheint dann ein neues Fenster, indem das beenden des Programms noch bestätigt werden muss.

Beispiel-Code:
Graphics3D 800,600,0,6
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Starwar

BeitragMi, Okt 24, 2012 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
zu deinem Nur-eine-Instanz Frage:
Benutze nicht die Netzwerkmethode. Netzwerkstreams sind für lokale Kommunikation nicht sonderlich gut geeignet. Dazu gibts "Named Pipes".
Um aber die zweite Instanz zu verhindern reicht ein Mutex.
Dazu einfach am Anfang des Programmes:
Code:
Const ERROR_ALREADY_EXISTS = 183
hMutex = CreateMutex(0, True, "MeinMutex")
If hMutex <> 0 Then
   If GetLastError() = ERROR_ALREADY_EXISTS Then
      RuntimeError "Die Anwendung ist bereits gestartet!"
      End
   EndIf
EndIf
ReleaseMutex(hMutex)


Und die decls:
Code:
.lib "kernel32.dll"
CreateMutex%(MutexAttributes%, InitialOwner%, name$):"CreateMutexA"
ReleaseMutex%(handle%):"ReleaseMutex"
GetLastError%():"GetLastError"


MFG

Jamagin

BeitragMi, Okt 24, 2012 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Starwar,

Mann, vielen Dank! Genau das suchte ich!!! Super!!!

Großes Dankeschön, hab es gerade eingebaut und es klappt super!


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group