Programm innen 'hintergrund' schieben



  • 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



  • @Hobbyfreak

    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 testen

    edit: 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


Anmelden zum Antworten