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
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
GetModuleFileNamestdlib.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!