Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 17:13 Titel: Menü + TSR |
|
|
Hallo )
Ich habe einen Spiel unter DOS, den ich mit hilfe eines Menüs starten möchte.
Da ich neu in diesem Bereich bin, bräuchte ich dringend hilfe um ein kleines Programm zu diesem Zweck zuschreiben, das folgendes erreichen sollte :
1. Sich öffnen und einen einfachen Textmenü mit Titel und Auswahlpunkte zur verfügung stellen (zb 1, 2, 3)
2. Beim auswählen jeder einzelnen dieser Optionen eine bestimmte Datei von einem fremden Ordner in das Spielordner kopieren und anschliessend die Spieldatei (exe) ausführen.
3. Ich spiele dann mein Spiel ganz normal.
4. Um anschliessend das Spiel zu verlassen, muss ich die Tastenkombination STRG+F4 drücken.
5. Dieses TSR sollte diese Tastenkombination abfangen, die vorher in den Spielordner kopierte Datei in den fremden Ordner zurück kopieren anschliessend umbennen, und mich letztendlich ins Textmenü
zurückbringen.
Das sind wahrscheinlich nur ein paar Zeilen Programmierung, aber ich komme einfach nicht drauf.
Es wäre lieb wenn jemand mir dieses kleine Programm schreiben könnte.
Lg an die Community |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 17:44 Titel: |
|
|
PS : Im Punkt fünf muss das Zielordner unter einem neuen Namen erzeugt werden ) |
|
Nach oben |
|
 |
Ferdi

Anmeldungsdatum: 10.03.2007 Beiträge: 284 Wohnort: Berlin
|
Verfasst am: 16.02.2010, 18:27 Titel: |
|
|
Zu 1) Menü mit PRINT und LOCATE gestalten
Zu 2)
a) Entweder mit MS-DOS- Befehlen (copy) oder direkt in QBasic (mit einer Schleife und 2 geöffneten Dateien)
b) Würde ich mit RUN "Dateiname.exe" machen
Zu 3) Das Spiel als Schleife schreiben und am Ende mit INKEY die entsprechende Tastenkombination abfangen und Schleife verlassen.
(Z.B. mit DO...LOOP UNTIL INKEY = [...])
Thomas Antonis hat ein Programm gaschrieben, mit dem Du [...] herausfinden kannst, einfach 'mal auf http://www.qbasic.de/ suchen
Zu 4) Ein TSR kann man nicht ohne Umwege in QBasic schreiben, was willst Du denn genau? _________________ Dieser Post wurde cum grano salis gewürzt! Na dann: Guten Appetit! |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 22:17 Titel: |
|
|
Danke Ferdi der schnellen Antwort ;o)
Sieht gut aus, nur würde dieses Programm so geschrieben wirklich im Hintergrund des DOS boxed mode von Windows XP laufen, und warten dass ich STRG-F4 gedrückt habe ? Wenn ja, dann ist es ja perfekt.
Ein Hacken : Wenn ich das Spiel verlassen will und STRG-F4 drücke, kehrt das Spiel immer in Windows zurück. Was sollte mann schreiben damit es in unserem Basic Menü wieder kommt ?
Lg |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 22:22 Titel: |
|
|
Danke für den Thomas Antonis Tip ;o)
Aber wie heisst das Programm ? |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 16.02.2010, 22:41 Titel: |
|
|
Hallo!
Newbie01 hat Folgendes geschrieben: | [...]DOS boxed mode von Windows XP[...] |
Wenn du vorhast, das Programm unter Windows laufen zu lassen, halte ich ein TSR-Programm für keinen sonderlich geeigneten Ansatz, auch wenn man natürlich auch in einer DOS-Box ein solches laufen lassen kann. "TSR" ist 80er-Jahre-Technik und nicht für Windowsumgebungen gedacht. Zudem ist die Entwicklung eines TSR-Programms, wie man sie für eine DOS-Umgebung durchführen würde, nicht gerade trivial, weil man sowas üblicherweise in Assembler programmiert. Mit "nur ein paar Zeilen" QBasic-Code ist es da nicht getan.
Des Weiteren bringt das Ausführen von DOS-Programmen im Hintergrund auf Windows 2000 und XP einen deutlichen Nachteil mit sich: Die CPU-Auslastung schnellt dabei in der Regel auf 100% hoch, sodass alles andere nur noch sehr langsam abläuft. Ruckeln und eine schwergängige Steuerung wären bei Spielen wohl die Folge.
Ich würde stattdessen in eine andere Richtung überlegen: Zunächst würde ich empfehlen, FreeBASIC für die Entwicklung einer solchen Windowsanwendung zu verwenden. Das bringt nämlich verschiedene Vorteile in dieser Angelegenheit mit sich.
Mit FreeBASIC könntest du eine Anwendung erstellen, die das Geforderte umsetzt, ohne dich mit dem TSR-Ansatz und Assembler auseinandersetzen zu müssen. Das ginge in etwa wie folgt: Du schreibst ein FreeBASIC-Programm, das das gewünschte Auswahlmenü zeigt und ggf. mit INPUT o.ä. auf eine Eingabe des Nutzers wartet. Anschließend führst du die genannten Vorbereitungsschritte (Kopieren...) aus und startest das Spiel. Das Programmfenster des FreeBASIC-Programms versteckst du anschließend und überwachst in einer Endlosschleife systemweit die Tastatureingaben (vom Funktionsprinzip her ähnlich eines Keyloggers). Das funktioniert über WinAPI-Funktionen. (Mit QBasic hättest du da keine Chance!) Wird die genannte Tastenkombination eingegeben, verlässt dein FreeBASIC-Programm die Warteschleife und führt beliebige andere Operationen aus. Anschließend könnte wieder zum Menü zurückgekehrt werden.
Das Problem einer übermäßigen CPU-Auslastung wie bei alten DOS-Programmen, zu denen auch QB zählt, hast du mit FreeBASIC unter Windows nicht, weil FreeBASIC für Windows "gedacht" ist und entsprechend richtige Windows-Anwendungen erzeugt, die nicht in einer emulierten Umgebung ablaufen müssen.
Newbie01 hat Folgendes geschrieben: | [...] mir dieses kleine Programm schreiben könnte. |
Fazit also: Du solltest dich mit der Programmierung in FreeBASIC auseinandersetzen (Genügend Anleitungen/Tutorials stehen zur Verfügung.) und versuchen, in etwa wie oben beschrieben die Aufgabe anzugehen. Dass dir hier jemand ein fertiges Programm kostenlos schreibt, halte ich für unwahrscheinlich. In einem solchen Programmierforum antworten dir hilfsbereite Communitymitglieder auf deine Programmierfragen, aber kostenlose Arbeitskräfte, die dich ganz nach Wunsch "full service" bedienen und aufbereitete Fertigprodukte liefern, sind das hier nicht.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 22:59 Titel: |
|
|
Hallo Sebastian, das ist schonmal einen sehr guten Tipp ;o)
Ich habe nie erwartet dass jemand mir so etwas schreibt, nur ich habe schon soviel gesucht (auch was assembler angeht, mit den 21h interrupts etc) aber wusste nicht wo ich anfangen soll.
Ich werde Powerbasic herunterladen und nun es machen wie du es empfohlen hast
glg |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 16.02.2010, 23:36 Titel: |
|
|
Ich meinte natürlich FreeBasic )))))))))))))
Mann ich brauche dieses Programm dringend, es bringt mich ein wenig durcheinander^^
Was hälst du von diesem Link ?
http://support.microsoft.com/kb/59131/de
Wie würdest du entsprechend ALT-F4 in diesem Freebasic Programm schreiben ?
glg |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 16.02.2010, 23:45 Titel: |
|
|
Das ist QBasic. QBasic stammt aus der DOS-Zeit, wo ein Programm eben im Einzelbetrieb lief und somit kannst du unter Windows (=Systemweit) mit solch einem Codefetzen irgendwas abfragen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 16.02.2010, 23:50 Titel: |
|
|
Alt+F4 ist CHR(255, 107)
Reicht ein systemweites Abfragen? Immerhin weiß man ja nicht, ob das Alt+F4 einem anderen Programm gilt. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 17.02.2010, 00:17 Titel: |
|
|
Ja ein systemweites abfragen würde reichen ;o) |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 17.02.2010, 01:29 Titel: |
|
|
Noch eine Frage :
Funktionieren alle QB45 Programme in FreeBasic 1 zu 1 ? |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 18.02.2010, 05:12 Titel: |
|
|
Danke für deine hilfe ;o))
Ich muss unbedingt noch was wissen : wie formuliert mann das aufrufen eines externen Programms ?
zb :
IF .... THEN <run this Program>
Finde nichts darüber  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.02.2010, 10:38 Titel: |
|
|
Mit SHELL (FB-Befehl) oder ShellExecute (Die DECLARE-Zeile kann man sich sparen, wenn man stattdessen #include "windows.bi" schreibt). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4702 Wohnort: ~/
|
Verfasst am: 18.02.2010, 12:57 Titel: |
|
|
Normalerweise wartet dieser Befehl (oder zumindest dann, wenn er richtig aufgerufen wird oder so) dann sowieso auf das Beenden des aufgerufenen Programms. Vielleicht kannst du dir dann ja das globale Alt+F4-Abfangen sparen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 18.02.2010, 14:17 Titel: |
|
|
Ich glaube, dass ich einmal so ein ähnliches Programm geschrieben habe und habe es dir in unveränderter Form hochgeladen:
http://wurzinger.bplaced.net/files/programmierung/qb/PLAY.BAS
Mein Programm diente als Spiele-Archiv und sorgte für die platzsparende Speicherung.
Die Spiele werden in ZIP-Archiven komprimiert gespeichert, vor dem Spielen entpackt und nach dem Spielen auf Wunsch des Benutzers aktualisiert (um z.B. neue Spielstände zu übernehmen).
Da ich damals jedoch nie daran gedacht hätte, dass jemand anderer mein Programm eventuell verwenden könnte, habe ich alles fix für mein damaliges System mit DOS 6.22 und Windows 3.1 programmiert.
Du musst also z.B. die ganzen fixen Pfadangaben ändern. Mein Programm erwartet folgende externen Ordner und Programme:
Das Programm selbst muss sich im Ordner "c:\win31\progs\games\" befinden, ebenso die ZIP-Dateien für die Spiele.
Mit dem Aufruf "PLAY /B" kann man die Spiele einstellen.
Externe Programme:
c:\command.com
c:\dos\choice.com
c:\dos\deltree.exe
c:\dos\pkzip250\pkzip.exe
c:\dos\pkzip250\pkunzip.exe
Aufgrund dieser vielen Anforderungen, die nur ein echtes DOS gut erfüllt (choice.com und deltree.exe sind z.B. unter Windows nicht mehr dabei) denke ich, dass du dir am Besten dein Programm selbst programmierst. Eventuell kannst du dir ja manche Anregungen aus meinem Quellcode holen.
MfG,
St_W _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
Newbie01
Anmeldungsdatum: 16.02.2010 Beiträge: 12
|
Verfasst am: 18.02.2010, 14:31 Titel: |
|
|
Danke, das Befehl SHELL versucht tatsächlich das externe Programm zu starten, kommt aber eine Meldung das es eine .ini File fehlt...
Mit welcher Anweisung kann ich alle Dateien des Spielordners mit in der Ausführung des Programms einbeziehen ? |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 18.02.2010, 14:39 Titel: |
|
|
Möglicherweise musst du bevor du das Spiel startest in dessen Ordner wechseln. Dies funktioniert mit dem Befehl "CHDIR".
z.B.:
Code: | CHDIR "C:\Spiele\Worms 1 Plus"
SHELL "Worms.exe" |
_________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
|