Programm innen 'hintergrund' schieben
-
hey ho,
für mein programm, welches unter DOS laufen soll, muss ich n programm in den 'hintergrund' schieben. sprich:
im vordergrund läuft anfangs n zähler, bei welchem man auch was eingeben kann, was durch n kleinen filter(zb.: ae in ä umschreiben usw) laufen soll und nach ner gewissen inaktivität soll dann n kleines Grafikprogramm in den vordergrung geholt werden, welches durch n tastendruck aber wieder beendet wird und der zähler wieder auf null gesetzt wird, .. leider übersteigt dies dann auch scho meine bisherigen kenntnisse.kurz: sone art Bildschirmschoner unter DOS.
hoffe ihr habt verstanden was ich will und könnt mir da hilfen
-
Wie soll die Hilfestellung denn aussehen? Was hast du bisher gemacht und woran scheitert es?
-
es scheiter am nicht vorhandenem wissen darum, wie ich das Programm im Hintrgrund laufen lasse, und, bei bedarf, wieder innen vordergrund hole^^
-
Google ist dann in Zukunft dein bester Freund.
... void ShowConsoleWindow (int cmd) { char str[MAX_PATH]; GetConsoleTitle (str, MAX_PATH); ShowWindow (FindWindow (NULL, str), cmd); } ... ShowConsoleWindow (SW_HIDE); ShowConsoleWindow (SW_SHOW);
BTW: Das funktioniert in der Dos und Win32 Konsole. Denke, dass du nicht wirklich Dos gemeint hast.
-
Dohoch ^^ inner schule proggen wir unter DOS, und das program MUSS unter DOS laufen
weil der lehrer es liebt dort zu programmieren
google war noch nie mein freund, liefiert zuviel ohne das was sinnvolles dabei is
danke schonma,
aber wenne mir jezze noch genau erklären kannst, was wohin muss *ja, ja, der große nachteil googles ;)*bzw.
wo kommen SW_hide und SW_show her ?^^
-
Hobbyfreak schrieb:
Dohoch ^^ inner schule proggen wir unter DOS, und das program MUSS unter DOS laufen
weil der lehrer es liebt dort zu programmieren
Nur um das klarzustellen: auf euren Schulcomputern ist das Betriebssystem Dos installiert?
Hobbyfreak schrieb:
google war noch nie mein freund, liefiert zuviel ohne das was sinnvolles dabei is
Hm, bei mir nicht.
Hobbyfreak schrieb:
aber wenne mir jezze noch genau erklären kannst, was wohin muss *ja, ja, der große nachteil googles ;)*
Schau dir ein Tutorial an, oder lies in einem Buch nach.
Hobbyfreak schrieb:
wo kommen SW_hide und SW_show her ?^^
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowFunctions/ShowWindow.asp
Und diesen Link hat mir tatsächlich google geliefert. Man staune.[EDIT]
Achja, den Link würde ich mir mal gut durchlesen, wenn du kapiert hast wo die Funktion stehen muss, und beim Kompilieren trotzdem Fehler auftreten.
[/EDIT]
-
Hobbyfreak schrieb:
[...]inner schule proggen wir unter DOS, und das program MUSS unter DOS laufen [...]
Wenn's wirklich DOS (und nicht die "DOS Eingabeaufforderung" von 9x/Me bzw. der Kommandointerpreter "cmd.exe" von WinNT, 2000, XP, 2003) sein soll, dann hilft dir ShowWindow() nicht. Gibt's unter DOS natürlich nicht. Weiters ist dir doch bewusst, das DOS ein singletask OS ist!? Es gibt einen DOS-Interrupt, welcher dein Programm "resident" beendet - sprich es bleibt im Speicher und kann z.B. auf Interrupts reagieren:
MOV AH, 0x31 ; Funktionsnummer MOV AL, ? ; Return-Code MOV DX, ? ; zu reservierende Speichergröße (in Paragraphen) INT 0x21 ; Interrupt auslösen.
Hobbyfreak schrieb:
google war noch nie mein freund, liefiert zuviel ohne das was sinnvolles dabei is
Oh Gott, lass es Hirn regnen
Nein im ernst, freunde dich mit Google an!Hobbyfreak schrieb:
wo kommen SW_hide und SW_show her?
Du meinst SW_HIDE und SW_SHOW? Diese Konstanten sind in der <windows.h> definiert. Aber unter DOS -> Pustekuchen.
-
Hmmm ich glaube eher das er meint das die Befehlszeile verwendet wird bzw. diese uralt Turbo C Versionen und kein Dev.
Hatten wir auch 2 Jahre lang, dass ist der größte Mist den es gibt aber ne Menge Lehrer wollen sich eben nicht umstelllen. Mehrer Tasks mit real DOS ne da geht doch nicht ;-P
-
Wenn's wirklich DOS (und nicht die "DOS Eingabeaufforderung" von 9x/Me bzw. der Kommandointerpreter "cmd.exe" von WinNT, 2000, XP, 2003) sein soll, dann hilft dir ShowWindow() nicht. Gibt's unter DOS natürlich nicht. Weiters ist dir doch bewusst, das DOS ein singletask OS ist!? Es gibt einen DOS-Interrupt, welcher dein Programm "resident" beendet - sprich es bleibt im Speicher und kann z.B. auf Interrupts reagieren
na das isses doch, wovon der lehrer gefaselt hat
wie geht das ?^^
-
Du sagst Borland Turbo C?
In diesem Falle könnte#include <dos.h> #define INTR 0x1C /* The clock tick interrupt */ #define ATTR 0x7900 /* Screen attribute (blue on grey) */ #ifdef __cplusplus # define __CPPARGS ... #else # define __CPPARGS #endif /* reduce heaplength and stacklength to make a smaller program in memory */ extern unsigned _heaplen = 1024; extern unsigned _stklen = 512; void interrupt ( *oldhandler )( __CPPARGS ); typedef unsigned int ( far *s_arrayptr ); void interrupt handler( __CPPARGS ) { s_arrayptr screen[80]; static int count; screen[0] = (s_arrayptr) MK_FP(0xB800,0); count++; count %= 10; screen[0][79] = count + '0' + ATTR; oldhandler(); /* call the old interrupt handler */ } int main(void) { oldhandler = _dos_getvect(INTR); /* get the address of the current clock tick interrupt */ _dos_setvect(INTR, handler); /* install the new interrupt handler */ /* _psp is the starting address of the * program in memory. The top of the stack * is the end of the program. Using _SS and * _SP together we can get the end of the * stack. You may want to allow a bit of * saftey space to insure that enough room * is being allocated ie: * (_SS + ((_SP + safety space)/16) - _psp) */ _dos_keep(0, (_SS + (_SP/16) - _psp)); return 0; }
eventuell helfen.
HIH
Greetz, Swordfish
-
fänd ich geil, wenn euer lehrer wirklich dos macht. da kann man schön viel mit machen, viel mehr als mit diesem "blöden", langweiligen 'windows fenster grafik zeugs'
aber ich glaub immernoch, du meinst die windows32 konsolen eingabe.. wegen dem "im hintergrund laufen"..
@swordfish
schönet programmstück..:) nachher mal testenedit: uff, so viele rechtsschreibfehler heute ...
-
Moin elise
Compiliert unter Borland C++ v3.1. Sollte aber auch mit Borland Turbo C gehn
elise schrieb:
schönet programmstück..:) nachher mal testen
für Dich doch immer
-
geeignete compiler liegen zu hauf hier
und zwei dosmaschinen ebenso...
-
Ich liebe Dich!
Ähm... wollt sagen, leute, die DOS-Boxes nebst vernünftigen Compiler griffbereit haben. *rofl*Greetz, Swordfish
-
moinsen,
sorry das ich mich jezze erst wieder melde, hatte viel zutun die Woche..erstma Danke soweit, wäre aber nett, wenn mans mir nochma genauer erklären könnte das ganze, weil ich nixx verwenden will, was ich net verstehe...
(musses ja wahrscheinlich dann noch erklären, weil ich der erste bin, ders macht)
-
Ich weiss nicht ob es dir hilft, aber ein ehemaliger Schulkamerad sollte auch einen Bildschirmschoner unter dos schreiben und das stichwort dafür war: TSR (Terminate and Stay Resident) http://de.wikipedia.org/wiki/TSR-Programme
Das problem war halt, das es wirklich für dos sein sollte und dieses ist ja bekanntermaßen nicht wirklich multitasking fähig
Daher ist es nicht so einfach, ein Programm im Hintergrund laufen zu lassen, während man weiterhin mit/in dos arbeitet.Er musste sich halt in die 'TSR' technik reinarbeiten... Was er allerdings nicht geschafft hat...
Leider habe ich im laufe der Zeit alles vergessen, was ich mir damals angeeignet habe (wollte ihm ein bisschen helfen) aber google sollte bestimmt irgendwas hilfreiches ausspucken...
ndT Lupo
*Ein Computer ist ein elektronisches Wunderwerk, das in einer zehntausendstel Sekunde die verwickeltsten Rechen- und Buchungsoperationen ausführt
- und dann die Kontoauszüge mit zehn Tagen Verspätung verschickt.
*
anonym
-
Lupo4u2 schrieb:
Ich weiss nicht ob es dir hilft, aber ein ehemaliger Schulkamerad sollte auch einen Bildschirmschoner unter dos schreiben und das stichwort dafür war: TSR
Bingo, du hast es erfasst. Genau das macht mein Beispiel ein paar Posts weiter oben. Um das ganze jedoch verständlich zu erklären ist's mir auch schon zu lange her. Ich empfehle Google bzw. eine gute DOS Referenz.
Greetz, Swordfish
-
habe das bsp gemacht für :
void ShowConsoleWindow( int cmd ) { char str[ MAX_PATH ]; if( GetConsoleTitle( str, MAX_PATH ) ) { fprintf( logFile, "ShowConsoleWindow:> str: %s, cmd: %d\n", str, cmd ); ShowWindow( FindWindow ( NULL, str ), cmd ); } else fprintf( logFile, "ShowConsoleWindow:> faild\n" ); }
und ich bekomme ihmmer ein faild bzw der str ist leer. ich habe ein cmd.exe programm und will das fenster verschwinden lassen, hier bekomm ich ihmmer ein faild. was mache ich falsch?
-
@tuxlein: Was hat dein Problem mit diesem Thread zu tun? Bitte eine Frage pro Thread und ein Thread pro Frage!
Greetz, Swordfish
-
da es um das doch um das selbe geht, console, die in den hintergrund gelegt werden soll bzw unsichtbar gemacht werden soll aber gut wenn du meinst.
-
In diesem Thread ging es darum, Programme unter DOS (nicht in der "Windows Eingabeaufforderung" oder ähnlichem) in den hintergrund zu bringen!
Versuch bei deinem Code mal FreeConsole() um die Console loszuwerden und AllocConsole() um eine neue zu bekommen.
Greetz, Swordfish