Programm bei Windowssytemstart starten



  • Hallo!
    Wie lautet der Code, um eine .exe-Datei zu schreiben, die sich bei einmaligem Aufrufen so in Windows integriert, dass sie beim nächsten Systemstart automatisch mitstartet?
    Gibt es da eine kleine, fertige Funktion, oder ist das ein ellenlanger Code?
    Vielen Dank,
    no-noname



  • Da gibt es mehrere Möglichkeiten.

    Dü könntest beispielsweise einen Link (.lnk) in den Autostartordner des Startmenüs setzen oder in der Registry einen Schlüssel(schau mal mit start->ausführen->msconfig->systemstart nach welche da verwendet werden)



  • Mit welchem Code könnte ich denn automatisch beispielsweise in die WIN.INI schreiben? Also so, das man das nicht per Hand einstellen muss? Angenommen, das Programm sei ein Welterfolg, da hätte jetzt ja nicht jeder Benutzer des Programmes Lust, (um dieses Programm bei Boot automatisch starten zu lassen) etwas in diese Konfigurationsdateien zu schreiben... Wie lässt sich das also automatisieren?
    Beispiel:
    Man kann den Windows Live Messenger bei Systemstart automatisch starten lassen. Ich vermute mal, das der Messenger in C++ geschrieben ist (is ja jetzt auch egal^^). Wie haben die Programmierer dies gemacht?

    LG no-noname



  • Vielleicht indem sie einen String vom Typ REG_SZ oder REG_EXPAND_SZ mit beliebigem Namen und dem Programmaufruf als Wert in der Registry unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run bzw. HKEY_CURRENT_USER hinterlegt haben. Wie man solche Werte schreibt steht in der WinAPI- oder MFC-FAQ.



  • Vielen Dank!
    Auch wenn ichs mir noch nicht zutraue, da ich ein C++-Newbie bin, mach ich mich mal an die FAQ
    LG, no-noname



  • 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.



  • ➡

    #include <windows.h>
    #include <Shlwapi.h>
    
    // Für MS VC++:
    // #pragma comment(lib, "Shlwapi.lib")
    
    bool WriteToAutoStart(const TCHAR* pszModulePath = NULL, const TCHAR* pszKeyName = NULL)
    {
        TCHAR *pszPath, *pszApp;
        if(pszModulePath == NULL)
        {
            pszPath = new TCHAR[MAX_PATH + 1];
            GetModuleFileName(NULL, pszPath, MAX_PATH);
        }
        else
        {
            if(!PathFileExists(pszModulePath))
                return (false);
            pszPath = new TCHAR[lstrlen(pszModulePath) + 1];
            lstrcpy(pszPath, pszModulePath);
        }
    
        if(pszKeyName == NULL)
        {
            const PTCHAR pszFileName = PathFindFileName(pszPath);
            if(pszFileName != &pszPath[0])
            {
                int iLength = lstrlen(pszFileName) - 3;
                pszApp = new TCHAR[iLength];
                lstrcpyn(pszApp, pszFileName, iLength);
                pszApp[iLength - 1] = 0;
            }
            else
            {
                delete [] pszPath;
                return (false);
            }
        }
        else
        {
            pszApp = new TCHAR[lstrlen(pszKeyName) + 1];
            lstrcpy(pszApp, pszKeyName);
        }
    
        TCHAR szLocation[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run");
    
        HKEY hKey;
        bool fSuccess = true;
        if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, szLocation, 0, KEY_ALL_ACCESS,
           &hKey) != ERROR_SUCCESS)
        {
            delete [] pszApp;
            delete [] pszPath;
            return (false);
        }
        if(RegSetValueEx(hKey, pszApp, 0, REG_SZ, reinterpret_cast<BYTE*>(pszPath),
           lstrlen(pszPath)) != ERROR_SUCCESS)
            fSuccess = false;
    
        RegCloseKey(hKey);
        delete [] pszApp;
        delete [] pszPath;
        return (fSuccess);
    }
    

    Wobei ich immer wieder sagen muss: Lern erst richtig C/C++ und dann fang mit der WinAPI an, sonst hat es keinen Sinn... (Script-Kiddie 🙄 ?)


Anmelden zum Antworten