Datei in das autostart Verzeichness kopieren aber wie?
-
Hallo,
Ich hab ein programm was ich gerne jedesmal mit straten lassen würde, aber ich möchte das es sich selbst in das auto start verzeichnes kopiert.
Egal welcher benutzer angemeldet ist (Windows XP) die funktion um den aktuellen bentutzer herauszufinden is mir bekannt und funzt soweit ich hab mir das ganze so forgestelltchar a1[]="copy test.exe C:\\Dokumente und Einstellungen\\"; char a2[]="\\Startmenü\\Programme\\Autostart\\test.exe"; GetUserName(acUserName, &nUserName); strcat(a1,acUserName); strcat(a1,a2); FILE *text; text=fopen("xXx.bat","wt"); fputs(a1,text); fclose(text); ShellExecute(NULL, "open", "xXx.bat",NULL, NULL, SW_HIDE);
Nur leider klappt es nicht.Die datei wird nicht kopiert aber warum verswtehe ich nicht. Ich hoffe ihr könnt mir weiter helfen. THX schon mal
-
Lookup schrieb:
Egal welcher benutzer angemeldet ist (Windows XP) die funktion um den aktuellen bentutzer herauszufinden is mir bekannt
...und hilft dir bei deinem Unterfangen!?
Lookup schrieb:
char a1[]="copy test.exe C:\\Dokumente und Einstellungen\\"; char a2[]="\\Startmenü\\Programme\\Autostart\\test.exe"; GetUserName(acUserName, &nUserName); strcat(a1,acUserName); strcat(a1,a2);
Du manipulierst mit strcat zweimal read-only Speicher...
BTW: Warum nicht AllUsers[...]\Autostart oder HKCU/HKLM\Software\Microsoft\Windows\Run
greetz, Swordfish
-
Warum gehst du überhaupt den Umweg über Batch-Dateien? C kann doch auch selber Dateien kopieren (CopyFile()). Außerdem müsst du den Namen der Zieldatei in Extra-Anführungszeichen einschließen, damit copy erkennt, daß die Leerzeichen zum Namen gehören.
PS: Und den Zielpfad solltest du besser per SHGetSpecialFolderPath() bestimmen
-
Ich geh den umweg über die batch datei weil ich den befehl CopyFile() irgendwie nicht verstehe also in deisem fall wüßte ich garnicht wie ich damit umgehen müsste. wäre nett wenn mir ma jemand denn vollen befehl für mein anligen posten könnte
-
Was ist an CopyFile() so schwer zu verstehen? Der schluckt drei Parameter:
- Name der Originaldatei ("test.exe")
- Name der Zieldatei ("[Autosstart]\test.exe")
- Sonderflag (kannst du FALSE angeben - dann wird die Zieldatei notfalls überschrieben)
Du benötigst dazu noch eine portable Möglichkeit, den Autostart-Ordner zu finden:
char target[MAX_PATH]; SHGetSpecialFolderPath(NULL/*bin ich nicht ganz sicher*/,target,CSIDL_STARTUP,FALSE); strcat(target,"test.exe"); CopyFile("test.exe",target,FALSE);
-
Mein compiler DEV c++ kennt die funktion SHGetSpecialFolderPath nicht welche include datei bruach ich dafür ? im moment habe ich folgende include datein drin
#include <windows.h> #include <conio.h> #include <stdio.h> #include <iostream.h>
-
Afaik <shellapi.h>, aber schmeiß deinen Compiler gleich mal von der Platte und hol dir VC 2005 Express Edition + Platform SDK (siehe http://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html)
MfG SideWinder
-
Okay ich lad mir denn ma runter, nur dauert ja was^^ Is dev denn so schlecht? ich hatte bis jetzt eigentlich nie was zu meckern... nur auch mit der include datei <shellapi.h> klappts leider net ich bekomme immer noch den fehler hir :
105 C:\Dokumente und Einstellungen\Christian\Desktop\Klick Party\main.cppSHGetSpecialFolderPath' undeclared (first use this function) und 105 C:\\Dokumente und Einstellungen\\Christian\\Desktop\\Klick Party\\main.cpp
CSIDL_STARTUP' undeclared (first use this function)warum?
-
Includedatei <shlobj.h>
Bibliothek shell32.libGruß
zeigerzeiger
-
Sind beide in <shlobj.h> deklariert.
greetz, Swordfish
-
hmmm, trotz einbindung der bibliothek erscheinen folgende fehler:
error C2664: 'SHGetSpecialFolderPathW': Konvertierung des Parameters 2 von 'char [260]' in 'LPWSTR' nicht möglich
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.error C2664: 'CopyFileW': Konvertierung des Parameters 1 von 'const char [13]' in 'LPCWSTR' nicht möglich
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
-
Entscheide dich für oder gegen unicode.
greetz, Swordfish
-
^^ und wie ?
-
Entweder du rufst SHGetSpecialFolderPathW mit einem wchar_t auf oder SHGetSpecialFolderPath mit einem char
Gruß
Tobiby the way
google liefert bei SHGetSpecialFolderPath den entprechenden Eintrag in der MSDN
-
error C2664: 'strcat': Konvertierung des Parameters 1 von 'wchar_t [260]' in 'char *' nicht möglich
error C2664: 'CopyFileW': Konvertierung des Parameters 1 von 'const char [13]' in 'LPCWSTR' nicht möglich
Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
-
wchar_t target[MAX_PATH];
SHGetSpecialFolderPathW(NULL,target,CSIDL_STARTUP,FALSE);
strcat(target,"Beispiel.exe");
CopyFile("Beispiel.exe",target,FALSE);
-
Vielleicht solltest du dir über den Unterschied zwischen den ANSI und UNICODE Varianten nochmal genauer anschauen...
Gruß
TobiPS.
Google ist auch hier dein Freund
-
εεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεεε