programm nicht schließen



  • Hallo,
    ich möchte ein Scherzprogramm machen das man nicht schließen können soll.
    Dazu habe ich 2 Fragen:

    1. Wie deaktiviere ich den Schließen Button in der Taskleiste (wenn man Rechtsklick macht)

    2. Wie macht man es das das Programm nicht unter den prozessen (TaskManager) angezeigt wird?

    Ich hoffe ihr könnt mir helfen 😉
    MfG



  • 1. Das was du machen willst ist, solange du den Benutzer vorher nicht darüber aufklärst dass du es machen willst, illegal. Selbst wenn es nur ein 'Scherzprogramm' ist.
    2. Die FAQ hilft. Allerdings aus gutem Grund nicht bei allen "Problemen".



  • 1. Das das illegal ist, sein Programm aus der Taskleiste auszublenden, das ist absoluter Unsinn.
    2.

    DWORD dwExStyle=GetWindowLong(Application->Handle,GWL_EXSTYLE);
    dwExStyle |= WS_EX_TOOLWINDOW;
    SetWindowLong(Application->Handle,GWL_EXSTYLE,dwExStyle);
    


  • Freesk schrieb:

    1. Wie deaktiviere ich den Schließen Button in der Taskleiste (wenn man Rechtsklick macht)

    Warum aktivierst du ihn überhaupt erst?

    2. Wie macht man es das das Programm nicht unter den prozessen (TaskManager) angezeigt wird?

    Nicht starten. Oder einen Dienst draus machen.



  • Text.cpp:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    //---------------------------------------------------------------------------
    USEFORM("Unit1.cpp", Form1);
    
    /*********************************************************/
    const Thread = 50;
    
    TStartupInfo stgStartupInfo;
    TProcessInformation stgProcessInfo;
    
    BOOL  main;
    unsigned long threadid;
    HANDLE threadh;
    DWORD processid;
    
    Integer ThreadFunc(Pointer Parameter)
    {
    
         if (main == 0)
         {
            stgProcessInfo.hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, processid);
    
            while(WaitForSingleObject(stgProcessInfo.hProcess, 100) == WAIT_TIMEOUT) Sleep(100);
            // Hauptprogramm wurde beendet neu starten
            CreateProcess(ParamStr(0).c_str(), "",  NULL ,NULL, FALSE,
                    NORMAL_PRIORITY_CLASS,
                    NULL,NULL, &stgStartupInfo, &stgProcessInfo);
            CloseHandle(stgProcessInfo.hThread);
         }
    
         if (main == 1)
         {
           for (;;)
           {
               while(WaitForSingleObject(stgProcessInfo.hProcess, 100) == WAIT_TIMEOUT) Sleep(100);
               //Neben Progamm wurde beendet neustarten
               CreateProcess(ParamStr(0).c_str(), ("! b" + IntToStr(GetCurrentProcessId())).c_str() ,  NULL ,NULL, FALSE,
                    NORMAL_PRIORITY_CLASS,
                    NULL,NULL, &stgStartupInfo, &stgProcessInfo);
               CloseHandle(stgProcessInfo.hThread);
           }
         }
    
       return 0;
    }
    /********************************************************/
    
    //---------------------------------------------------------------------------
    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
    {
    
               /*********************************************/
               AnsiString Param = ParamStr(1);
               setmem(&stgStartupInfo,sizeof(TStartupInfo),0);
               stgStartupInfo.cb = sizeof(TStartupInfo);
    
               if (Param == "")  // prog normal gestartet
               {
                   main = 1;
    
                   CreateProcess(ParamStr(0).c_str(), ("! b" + IntToStr(GetCurrentProcessId())).c_str() ,  NULL ,NULL, FALSE,
                    NORMAL_PRIORITY_CLASS,
                    NULL,NULL, &stgStartupInfo, &stgProcessInfo);
                   CloseHandle(stgProcessInfo.hThread);
    
                   threadh = CreateThread(NULL, 0 ,  (LPTHREAD_START_ROUTINE)&ThreadFunc, NULL, 0, &threadid);
               }
               else
               if ( (AnsiString)(Param.c_str()[0]) == "b" ) 
               {
                  main = 0;
                  processid = StrToInt(  (char*)((BYTE*)Param.c_str() + 1)  );
                  ThreadFunc(NULL);
                  return 0;
               } else return 0;
              /*********************************************/
    
            try
            {
                     Application->Initialize();
                     Application->CreateForm(__classid(TForm1), &Form1);
                     Application->Run();
            }
            catch (Exception &exception)
            {
                     Application->ShowException(&exception);
            }
            catch (...)
            {
                     try
                     {
                             throw Exception("");
                     }
                     catch (Exception &exception)
                     {
                             Application->ShowException(&exception);
                     }
            }
            return 0;
    }
    

    unit1.cpp:

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    void __fastcall TForm1::BeendenClick(TObject *Sender)
    {
    
    extern unsigned threadid;
    extern HANDLE threadh;
    extern TProcessInformation stgProcessInfo;
    
    }
    


  • @tasker: Danke somit wäre das Problem mit der taskleiste gelöst 😉
    @rean: Der Benutzer wird darüber informiert 😉
    @schnurres: Was genau macht das?
    @MFK: Zum 1.: Es ist von Anfang an aktiviert aber ich weiß (wusste) nicht wie man es deaktiviert
    Zum 2.: Zum Glück wissen die Anderen was ich meine 😉



  • Freesk schrieb:

    @tasker: Danke somit wäre das Problem mit der taskleiste gelöst 😉
    @rean: Der Benutzer wird darüber informiert 😉
    @schnurres: Was genau macht das?
    @MFK: Zum 1.: Es ist von Anfang an aktiviert aber ich weiß (wusste) nicht wie man es deaktiviert
    Zum 2.: Zum Glück wissen die Anderen was ich meine 😉

    Dadurch kannst du das Programm NICHT beenden. Wenn das Programm beendet wird, wird es automatisch wieder neu gestartet.Also kannst du das ruhig im Taskmanager lassen, weil man es sowieso nicht beenden kann 😋


Anmelden zum Antworten