EXE in den Autostart schreiben



  • Hallo und guten Morgen!

    Ich bin neu hier und hab zugleich eine Frage:

    Wie kann ich ein kleines Programm so schreiben (z.B. "Hallo Welt!"), dass es sich beim Ausführen direkt von Selbst in den Autostart schreibt?

    #include <iostream>
    #include <conio.h>
    int main()
    {
        std::cout<<"Hallo Welt!"<<std::endl;
        getch();
        return 0;
    }
    

    Eine Möglichkeit wäre mit einer *.bat-Datei. Doch mich würde es interessieren wie sich die *.exe-Files selbst in den Autostart schreiben können.

    MfG
    bbc



  • Welche "Autostart" meinst du? Auf älteren Betriebssystemen könntest du deinen Aufruf in die "C:\autoexec.bat" des Systems schreiben, unter Windows kannst du auch im Autostart-Ordner (wo der ist, hängt afaik von der Version und den Systemeinstellungen ab) oder in der Registry verewigen.

    PS: Ja, du kannst jedes Programm dafür verwenden.



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Leg einfach 'nen Eintrag bei der Registry an, so machen es die meisten Programme.

    MfG mikey.



  • HKLM\software\microsoft\windows\run ist der pfad, in dem der schlüssel liegen muss



  • ...oder du guckst dir den Codeschnipsel auf meiner (noch) kleinen Homepage an, dort steht gleich der komplett fertige Code 😉

    www.cpp-world.de

    Zu finden unter 'Codes'

    Grüße,

    mikey.



  • #include <windows.h>
    #include <iostream>
    #include <stdlib.h>
    
    int close_waiting(void);
    
    int main(void)
    {
    	TCHAR szAppPath[_MAX_PATH];
    	GetModuleFileName(NULL, szAppPath, _MAX_PATH);
    
    	HKEY hKey = NULL;
    	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
    		std::cout << "Programm konnte nicht im Autostart registriert werden!" << std::endl;
    
    	if (RegSetValueEx(hKey, TEXT("Hello Word"), 0, REG_EXPAND_SZ, (LPBYTE)szAppPath, (DWORD)(lstrlen(szAppPath) + 1) * sizeof(TCHAR)) !=  ERROR_SUCCESS)
    	{
    		std::cout << "Der Autostart Registrywert des Programms konnte nicht angepasst werden!" << std::endl; 
    		RegCloseKey(hKey); 
    	}
    	RegCloseKey(hKey);
    
    	std::cout << "Hallo Welt!" << std::endl;
    
    	return close_waiting();
    }
    
    // Die Funktion wartet darauf, das eine beliebige Taste gedrückt wird und gibt dann 0 zurück.
    int close_waiting(void)
    {
    	std::cin.clear();
    	std::cin.ignore(std::cin.rdbuf()->in_avail());
    	std::cin.get();
    
    	return 0;
    }
    

    So in etwa ^^

    Referenz
    Adding a Source to the Registry
    RegSetValueEx
    RegOpenKeyEx
    RegCloseKeyEx
    GetModuleFileName

    stdlib.h

    /*
     * Sizes for buffers used by the _makepath() and _splitpath() functions.
     * note that the sizes include space for 0-terminator
     */
    #define _MAX_PATH   260 /* max. length of full pathname */
    #define _MAX_DRIVE  3   /* max. length of drive component */
    #define _MAX_DIR    256 /* max. length of path component */
    #define _MAX_FNAME  256 /* max. length of file name component */
    #define _MAX_EXT    256 /* max. length of extension component */
    


  • Welche "Autostart" meinst du?

    Ich meine den von Windows XP Home. Prinzipiell wollt ich es eigentlich in der Registry verewigen.

    #include <windows.h>
    #include <iostream>
    #include <stdlib.h>
    
    int close_waiting(void);
    
    int main(void)
    {
        TCHAR szAppPath[_MAX_PATH];
        GetModuleFileName(NULL, szAppPath, _MAX_PATH);
    
        HKEY hKey = NULL;
        if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, KEY_WRITE, &hKey) != ERROR_SUCCESS)
            std::cout << "Programm konnte nicht im Autostart registriert werden!" << std::endl;
        
        if (RegSetValueEx(hKey, TEXT("Hello Word"), 0, REG_EXPAND_SZ, (LPBYTE)szAppPath, (DWORD)(lstrlen(szAppPath) + 1) * sizeof(TCHAR)) !=  ERROR_SUCCESS)
        {
            std::cout << "Der Autostart Registrywert des Programms konnte nicht angepasst werden!" << std::endl; 
            RegCloseKey(hKey); 
        }
        RegCloseKey(hKey);
    
        std::cout << "Hallo Welt!" << std::endl;
        
        return close_waiting();
    }
    
    // Die Funktion wartet darauf, das eine beliebige Taste gedrückt wird und gibt dann 0 zurück.
    int close_waiting(void)
    {
        std::cin.clear();
        std::cin.ignore(std::cin.rdbuf()->in_avail());
        std::cin.get();
    
        return 0;
    }
    

    Danke! Das war die Lösung!


Log in to reply