Application als Prozess starten + EXE datei als Resource einbinden und exportieren <-- WIE ?



  • Du könntest auch alternativ eine fensterlose Anwendung schreiben. Bei CreateWindow(Ex) müsstest du dann HWND_MESSAGE als hwndParent Parameter angeben.

    EDIT: Ich bin mir allerdings nicht sicher ob die Anwendung dann nicht mehr im Taskmanager unter "Anwendungen" erscheint. Höchstwahrscheinlich wird es aber nicht dort erscheinen...



  • Wenn du es umständlichen machen willst, kannst du auch ein Fenster erzeugen, es aber nicht anzeigen lassen (SW_HIDE bei ShowWindow übergeben), und dann in der WindowProc unter WM_CREATE mit _beginthread ein Thread parallel zu dem Fenster laufen lassen, wo dann die eigentliche Aufgabe deines Programms sein soll.



  • Danke erstmal für die vielen Vorschläge. Echt super ! 😃

    Das Problem hat sich erledigt. Hab rausgefunden das man mit

    Application.Title="" und
    Application.showmainform:=False

    die Anwendung auch "verschwinden" lassen kann - zumindest von der Task-Liste im Taskmanager. Aber für mein Vorhaben reicht das völlig aus. 🙂

    @ Paul W.

    mal angenommen ich würde mit _beginthread einen neuen Thread erstellen und das versteckte Hauptprogramm beenden. Würde der Thread dann noch weiterlaufen ?



  • dideldum04 schrieb:

    mal angenommen ich würde mit _beginthread einen neuen Thread erstellen und das versteckte Hauptprogramm beenden. Würde der Thread dann noch weiterlaufen ?

    Ja er würde weiterlaufen. Aber das ist der uneleganteste und dümmste mögliche Weg.



  • dideldum04 schrieb:

    Danke erstmal für die vielen Vorschläge. Echt super ! 😃
    mal angenommen ich würde mit _beginthread einen neuen Thread erstellen und das versteckte Hauptprogramm beenden. Würde der Thread dann noch weiterlaufen ?

    Das kommt schwer darauf an was du mit Hauptprogramm meinst. Arbeitest du mit einem besonderen Framework in Delphi? Gibt es da sowas überhaupt? Ich kenn' mich mit der Sprache und den verfügbaren IDEs überhaupt nicht aus...
    Es könnte nämlich sein, dass wenn man das Hauptfenster destruiert, sich dann der gesamte Prozess mitverabschiedet. Und darauf kommt es an. Ob durch das Beenden des "Hauptprogrammes" auch der Prozess betroffen ist.



  • Wir sind hier auf www.c-plusplus.net, einer C(++)-Seite. Deswegen denke ich automatisch an C und erwarte nichts als C/C++.
    Aber Aziz hat Recht. Die Termination des Hauptthreads könnte unter Delphi evtl. alle Threads mitreißen.



  • Upps,

    da hab ich vor lauter Übermut gar nicht bemerkt das die beiden Funktionen gar nicht zu c++ gehörten *peinlich* 🙄

    Und ich hab mich schon gewundert warum ich in der MSDN nix finde *LOL*

    Na jedenfalls hab ich jetzt des Rätsels Lösung.
    Und zwar registriere ich das laufende Programm einfach als Service (siehe Aziz)

    Bei mir funzt das mit folgendem Code ganz gut.

    //zeigt zwei Dialoge an, einmal als Service im Hintergrund
    //und einmal ganz normal als Application

    //funzt soweit ich weiss aber nur unter Win95/98/ME

    #include <iostream.h>
    #include <windows.h>
    
    DWORD RegisterServiceProcess(DWORD ProcessID, DWORD act)
    {
          HMODULE hLib=LoadLibrary("kernel32.dll");
          if(hLib)
          {
                typedef DWORD (CALLBACK *RegSerPro)(DWORD,DWORD);
                RegSerPro Reg;
                DWORD ret=0;
                Reg=(RegSerPro)GetProcAddress(hLib,"RegisterServiceProcess");
                if(Reg)
                {
                      ret=Reg(ProcessID,act);
                }
                else
                      ret=1;//Fehler
                FreeLibrary(hLib);
                return(ret);
          }
          else
                return(1);//Fehler
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    
    {
    
    RegisterServiceProcess(GetCurrentProcessId(),1);
    MessageBox(NULL, "Test", "Hidden service",MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    
    RegisterServiceProcess(GetCurrentProcessId(),0);
    MessageBox(NULL, "Test", "Visible application",MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);
    
    return 0;
    
    }
    

    Vielen Dank nochmal an alle 😉

    Und die Sache mit Delphi bitte ich nochmals zu entschuldigen 😃

    MfG



  • dideldum04 schrieb:

    Upps,
    Und die Sache mit Delphi bitte ich nochmals zu entschuldigen 😃

    Ich wüsste nicht warum das zu entschuldigen wäre. Schließlich beschränkt sich das WinAPI Forum nicht auf eine einzige Programmiersprache. Viele Fragen werden auch ohne Bezug auf irgendeine bestimmte Sprache gestellt. Es werden dir jedoch viel mehr Leute helfen können wenn dein Code in C bzw. C++ geschrieben ist. 😉



  • Hi ich bins nochmal,

    Mir ist aufgefallen dass Applicationen unter win2k auch nicht im Taskmanager unter "Andwendungen" angezeigt
    werden, solange man einfach kein Fenster erstellt. 🙂

    also z.B.

    #include "windows.h"
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    
    {
    
          //CODE...
    
      return 0;
    
    }
    

    Tja man lernt halt nie aus. 🕶



  • Wenn dein Code nicht sehr zeitintensiv ist bzw. in einer Endlosschleife hängt wird das Programm ja auch sofort wieder beendet 😉


Anmelden zum Antworten