Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
[C] swich mit Wort
- Ersteller Murphy7
- Erstellt am
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
Hier dein Code:
Es wird jetzt nur das Programm in den Autostart geschrieben, jedoch nicht mehr gelöscht.
Du müsstest dann mit der Hand den Key wieder aus dem Autostart löschen.
Edit:
Damit es compiliert musst du in den Projekt Einstellungen vom Visual Studio auf Multi-Byte stellen wo normalerweise Unicode steht.
Gruß
BlackMark
Code:
#include <stdio.h>
#include <windows.h>
BOOL MakeAutostart( char *name, char *Value )
{
HKEY hkey;
HKEY key = HKEY_LOCAL_MACHINE;
char place[] = {"Software\\Microsoft\\Windows\\CurrentVersion\\Run"};
if( (RegOpenKeyEx(key, place,0, KEY_ALL_ACCESS,&hkey)) != ERROR_SUCCESS )
return FALSE;
if( (RegSetValueEx(hkey, name, 0, REG_SZ, (BYTE *)Value, strlen(Value))) != ERROR_SUCCESS )
return FALSE;
if( (RegCloseKey(hkey)) != ERROR_SUCCESS )
return FALSE;
return TRUE;
}
int main( int argc, char **argv )
{
char Name[] = {"Passwortschutz"}; // Der name ist beliebig wählbar.
char *Value = *argv; // Hier kommt der Pfad der Datei rein die in den Autostart geschrieben werden soll.
// Da in *argv der Pfad des aktuellen Programms steht, kommt das hier hin.
if( !MakeAutostart( Name, Value ) )
{
printf("ERROR - Unable to create Autostart key!\n");
}
char name[10], passwort[10];
do
{
printf("Willkommen an ihrem Pc!\nBitte Loggen Sie sich ein!\nBenutzername:");
scanf ("%s", &name);
printf("Passwort:");
scanf("%s", &passwort);
if((strcmp(passwort , "password") == 0) && (strcmp(name , "Moritz") == 0))
{
printf("\nHerzlich willkommen %s\n", &name);
Sleep(1000);/*macht eine pause für 1s = 1000ms*/
}
else
{
printf("\n\aBenutzername oder Passwort falsch!\n\n");
Sleep(1000);
system("cls");/*löscht den vorigen Prozess,sodass es aussieht ob es von vorne startet*/
}
}
while (strcmp(passwort , "password") != 0);
return 0;
}
Es wird jetzt nur das Programm in den Autostart geschrieben, jedoch nicht mehr gelöscht.
Du müsstest dann mit der Hand den Key wieder aus dem Autostart löschen.
Edit:
Damit es compiliert musst du in den Projekt Einstellungen vom Visual Studio auf Multi-Byte stellen wo normalerweise Unicode steht.
Gruß
BlackMark
Zuletzt bearbeitet:
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
Wie ich schon gesagt habe musst du in den Projekt Einstellungen auf Multi-Byte stellen.
Oben in der Leiste auf Projekt -> "Projekt Name" Einstellungen -> Konfigurations Einstellungen -> Dann steht irgend wo Unicode und da stellst du auf Multi-Byte
Ich hab das Visual Studio auf englisch, deswegen weiß ich nicht genau wie die sachen auf deutsch heißen ^^
Edit:
Gruß
BlackMark
Oben in der Leiste auf Projekt -> "Projekt Name" Einstellungen -> Konfigurations Einstellungen -> Dann steht irgend wo Unicode und da stellst du auf Multi-Byte
Ich hab das Visual Studio auf englisch, deswegen weiß ich nicht genau wie die sachen auf deutsch heißen ^^
Edit:
Nein das Visual Studio hat einen C++ compiler, deswegen würde auch C++ code gehen, obwohl meiner nur C ist.Hast du was verwechselt mit C und C++ ??
Gruß
BlackMark
Zuletzt bearbeitet:
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
Hmm, das einzige was mir einfallen würde wäre, dass Vista die Autostart Keys wo anders in der Registry liegen hat als XP.
Man müsste also schauen wo die bei Vista sind.
Bei XP liegen die in der Registry auf: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Schau mal ob es die bei Vista auch da gibt.
Man müsste also schauen wo die bei Vista sind.
Bei XP liegen die in der Registry auf: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
Schau mal ob es die bei Vista auch da gibt.
Das bringt mir auch nicht viel. Wenn irgendjemand sich mal ein Programm download, weiß der ja nicht das man es als Admin ausführen muss. Gibt es die möglichkeit das auch in dem Programm zu machen ??
Ist auch erstmal nicht so wichtig!
1)Wie löscht man den Eintrag wieder? Es reicht wenn kein Beispiel dabei ist ich denke ich verstehe es.
2)Wie kann man Verhindern, das der Benutzer das Programm über x nicht beenden kann?
Ist auch erstmal nicht so wichtig!
1)Wie löscht man den Eintrag wieder? Es reicht wenn kein Beispiel dabei ist ich denke ich verstehe es.
2)Wie kann man Verhindern, das der Benutzer das Programm über x nicht beenden kann?
Zuletzt bearbeitet:
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
So zimlich alles ist möglich nur ist das problem, dass dieses UAC ja nicht um sonst da ist.
Microsoft ist sicher nicht so blöd eine Sicherung einzubauen die dann ganz einfach von einem Programm umgangen werden kann.
Wenn es möglich ist, dann ist es sicherlich nicht so leicht.
Aber ich kann mich auch irren.
Google es einfach mal!
Microsoft ist sicher nicht so blöd eine Sicherung einzubauen die dann ganz einfach von einem Programm umgangen werden kann.
Wenn es möglich ist, dann ist es sicherlich nicht so leicht.
Aber ich kann mich auch irren.
Google es einfach mal!
@BerniG
Danke so hat es funktioniert.So reicht es auch.
Noch zwei Fragen hätte ich:
1)Wie löscht man den Eintrag wieder? Es reicht wenn kein Beispiel dabei ist ich denke ich verstehe es.
2)Wie kann man Verhindern, das der Benutzer das Programm über x nicht beenden kann?
Das Programm soll sich nur schließen, wenn es zu ende ist. Der Benutzer soll es nicht selber schließen können.
Danke so hat es funktioniert.So reicht es auch.
Noch zwei Fragen hätte ich:
1)Wie löscht man den Eintrag wieder? Es reicht wenn kein Beispiel dabei ist ich denke ich verstehe es.
2)Wie kann man Verhindern, das der Benutzer das Programm über x nicht beenden kann?
Das Programm soll sich nur schließen, wenn es zu ende ist. Der Benutzer soll es nicht selber schließen können.
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
1. Schau dir den Code in Post Nummer 28 an.
Dort ist eine Funktion namens DeleteReg und diese löscht einen Key aus der Registry.
2. Das ist gar nicht so leicht, du musst nämlich beim Fenster verhindern, dass eine Message an Windows gesendet wird wenn der Benutzer das X drückt.
Bei einem selbst erstellten Fenster ist das nicht so schwer, aber bei einem vom Betriebssystem erstellten, und das Consolen Fenster ist vom Betriebssystem, ist das nicht so leicht.
Ich weiß auf anhieb jetzt nicht wie man das machen könnte, aber ich werde Morgen mal schauen ob ich das schaffe.
Gruß
BlackMark
Dort ist eine Funktion namens DeleteReg und diese löscht einen Key aus der Registry.
2. Das ist gar nicht so leicht, du musst nämlich beim Fenster verhindern, dass eine Message an Windows gesendet wird wenn der Benutzer das X drückt.
Bei einem selbst erstellten Fenster ist das nicht so schwer, aber bei einem vom Betriebssystem erstellten, und das Consolen Fenster ist vom Betriebssystem, ist das nicht so leicht.
Ich weiß auf anhieb jetzt nicht wie man das machen könnte, aber ich werde Morgen mal schauen ob ich das schaffe.
Gruß
BlackMark
hi,
Zum Verständnis: Der X-Button ist einem Menü (Systemmenü) zugeordnet, dass du dir anzeigen lassen kannst in dem du z.B. in der Titelleiste des Konsolenfensters die rechte Maustaste drückst.
Wenn du also den X-Button deaktivieren willst, musst du den entsprechenden Menüpunkt deaktivieren. Da es einfacher ist, wird im folgendem der Menüeintrag mittels DeleteMenu() gelöscht (ansonsten müsste man halt mit SetMenuItemInfo () arbeiten):
Der X-Button ist danach zwar noch sichtbar, aber ohne Funktion.
Wie kann man Verhindern, das der Benutzer das Programm über x nicht beenden kann?
Zum Verständnis: Der X-Button ist einem Menü (Systemmenü) zugeordnet, dass du dir anzeigen lassen kannst in dem du z.B. in der Titelleiste des Konsolenfensters die rechte Maustaste drückst.
Wenn du also den X-Button deaktivieren willst, musst du den entsprechenden Menüpunkt deaktivieren. Da es einfacher ist, wird im folgendem der Menüeintrag mittels DeleteMenu() gelöscht (ansonsten müsste man halt mit SetMenuItemInfo () arbeiten):
Code:
...
char buffer[256];
GetConsoleTitle(&buffer[0],256);
DeleteMenu(GetSystemMenu(FindWindowEx(0,0,0,&buffer[0]),FALSE),6,MF_BYPOSITION);
// weitere Werte(Positionen)
// 0 = restore
// 1 = move
// 2 = change size
// 3 = minimize
// 4 = maximize
// 5 = seperator in menu
// 6 = close -> X-Button
// ...
...
Der X-Button ist danach zwar noch sichtbar, aber ohne Funktion.
Zuletzt bearbeitet:
BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
Jop, genau so geht es.
Es geht jedoch auch einfacher, es gibt die Funktion GetConsoleWindow, damit erspart man sich das FindWindowEx.
Dann braucht man nur noch eine Zeile und spart sich ein wenig Code:
Außerdem ist es übersichtlicher und man hat auch nicht mehr das Problem mit char und LPCWSTR und so weiter.
Gruß
BlackMark
Es geht jedoch auch einfacher, es gibt die Funktion GetConsoleWindow, damit erspart man sich das FindWindowEx.
Dann braucht man nur noch eine Zeile und spart sich ein wenig Code:
Code:
DeleteMenu(GetSystemMenu(GetConsoleWindow(),FALSE),6,MF_BYPOSITION);
Gruß
BlackMark
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 7
- Aufrufe
- 1.370
- Gesperrt
- Antworten
- 6
- Aufrufe
- 1.356