Programm wie oft ausgeführt??



  • Hallo,

    ich brauche dringend eure Hilfe! Ich habe ein kleines Programm geschrieben und da soll in einer Zahl am Ende ausgegeben, wie oft es an diesem Tag schon ausgeführt wurde! Ich will das in die Reg eintragen lassen da es vor Manipulationen eher geschützt ist, als in einer Datei(das Prog ist nicht nur für mich bestimmt)! Habt ihr da eine Idee?? Könnt ihr mir da irgendwie weiterhelfen? Ich habe da keinen Plan...

    Gruß
    mp22



  • Es gibt Funktionen um Werte in die Reg eintragen zu lassen.

    Hat aber IMHO recht wenig mit std C++ zu tun.



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





  • Hallo,

    ich kenne diese Seite mit der Registry, das habe ich mir vorher schonma angeschaut! Mit meinem eigentlichen Problem komme ich aber nicht weiter! Und zwar:
    WIE schreibe ich WAS in die Registry, um zu checken wie oft das Programm am Tag ausgeführt wurde! Es geht mir eher um den Algorithmus...deswegen habe ich auch ins C++-Forum geschrieben und nicht ins WinApi-Forum!

    Es kommt hauptsächlich auf die Initialisierung der Variable an! Ihr darf nur einmal überhaupt die "0" zugewiesen werden! Wenn ich das bei jedem Programmstart machen würde, dann wird die Zahl nie größer als "1" werden!
    Habt ihr mein Problem erkannt?? Also ich weiß da nicht weiter...könnt ihr mir helfen?

    mp22



  • Ist doch ganz Einfach, wenn das Programm das erstemal startet, steht nichts in der Reg drinn also dann ne 0, sonst erhöhen.



  • Du liest einfach den Zählerstand aus der Registry - ist der Wert nicht vorhanden, setzt du ihn auf 0. Dann einfach hochzählen und wieder reinschreiben. Wo ist da jetzt dein Problem 😕



  • @flenders
    Abschreiben mit eigenen Worten giebt die gelbe Karte 😃

    Mal ne andere Frage, willst du ne Trial machen, die z.B. nur 50 x gestartet werden kann? Es giebt auch diverse andere Tricks, z.B. das ändern der EXE Informationen (Version, Firmenname, bla bla).



  • MiC++ha schrieb:

    @flenders
    Abschreiben mit eigenen Worten giebt die gelbe Karte 😃

    Sorry, was wohl etwas langsam 🙄 Hab aber nicht abgeschrieben - ehrlich 🤡



  • Ich habe mal ein Grundgerüst entworfen:

    int zahl=0;
    
    // datum aus reg lesen
    
    if(datum!=heute)
    {
        // heutiges datum reinschreiben
        zahl=1;
        // zahl reinschreiben
    }
    else
    {
        // zahl auslesen
        zahl++;
        // zahl reinschreiben
    }
    
    // zahl auslesen
    cout<<zahl;
    

    Könnte das so funktionieren??

    (Nein keine Trial! Am Ende soll nur eine Zahl rauskommen, die mir die Ausführungen pro Tag anzeigt)



  • Mit deinem Code weißt du dann aber nachher nur, wie oft das Programm an diesem Tag ausgeführt wurde ⚠



  • Ja genau das will ich ja 🙂

    Mal schaun, ob ich das irgendwie in Quelltext umsetzen kann, wird wohl ein bißchen dauern 😞

    mp22



  • mp22 schrieb:

    Am Ende soll nur eine Zahl rauskommen, die mir die Ausführungen pro Tag anzeigt

    Das hörte sich für micht irgendwie nach einer Durchschnittswert-Berechnung an 🙄

    Ansonsten sollte das schon so klappen 🙂



  • Hab ein Problem, mein Code(das Wichtigste):

    // datReg ist das Datum in der Reg
        // dat ist das aktuelle heutige Datum
    
        int zahl=0, datReg=0;
    
        int dat=2709;
    
        HKEY hKey;
    	RegCreateKeyEx(HKEY_CURRENT_USER,"Test",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    
    	RegSetValueEx(hKey,"KontrollDatum",0,REG_DWORD,(BYTE*)&datReg,sizeof(DWORD)); 
    
    	DWORD dwData = sizeof(DWORD); 
    	RegQueryValueEx(hKey,"KontrollDatum",0,0,(BYTE*)&datReg,&dwData);
    
    	if(datReg!=dat)
    	{
    		datReg=dat;
    
    		RegSetValueEx(hKey,"KontrollDatum",0,REG_DWORD,(BYTE*)&datReg,sizeof(DWORD));
    
    		DWORD Nummer=1;
    		RegSetValueEx(hKey,"KontrollZahl",0,REG_DWORD,(BYTE*)&Nummer,sizeof(DWORD));
    
    		RegQueryValueEx(hKey,"KontrollZahl",0,0,(BYTE*)&Nummer,&dwData);
    
    		cout<<Nummer;
    	}
    	else
    	{
    		DWORD dwData = sizeof(DWORD); //lesen
    		RegQueryValueEx(hKey,"KontrollZahl",0,0,(BYTE*)&zahl,&dwData);
    
    		zahl++;
    
    		DWORD Nummer=zahl;
    		RegSetValueEx(hKey,"KontrollZahl",0,REG_DWORD,(BYTE*)&Nummer,sizeof(DWORD));
    
    		RegQueryValueEx(hKey,"KontrollZahl",0,0,(BYTE*)&Nummer,&dwData);
    
    		cout<<Nummer;
    	}
    
    	RegCloseKey(hKey);
    

    Ich hoffe es ist nicht zu verwirrend für euch! Ich blicke selbst nicht mehr durch! Hab auch nicht gerade viel Erfahrung mit dieser Art von Programmen! Kann mir jemand weiterhelfen?? Was mache ich falsch?? Für die Zahl kommt am Ende immer "1" raus(wie ich zuvor schon vermutet hatte)! Hängt wohl doch mit der Initialisierung zusammen! Weiß jemand eine Lösung?
    (Womöglich habe ich auch absoluten Schrott zusammen gecodet 😞 )

    mp22



  • Du hast dich nicht an deinem Pseudocode gehalten daher kommt "1" immer raus, denn du schreibst stehts immer als erstes den Startwert rein!
    ERST LESEN OB KEY VORHANDEN BZW DAS DATUM STIMMT, WENN NICHT DANN 0 REIN SCHREIBEN, WENN GLEICHER TAG BZW. KEY VORHANDEN, DANN ERHÖHEN UND NEU REINSCHREIBEN



  • bzw. das ganze mal so Abhandeln:
    Pseudocode:

    if (ERROR_SUCCESS == RegQueryValueEx(hKey,"KontrollDatum",0,0,(BYTE*)&datReg,&dwData) {
    	if (datreg == dat) {
    		/* erhöhen und schreiben */
    	} else {
             /* neues Datum schreiben */
    		/* 0 schreiben */
    	}
    } else {
    	/* aktuelles Datum schreiben */
    	/* 0 schreiben */
    }
    


  • Ich habe immernoch das gleiche Problem, langsam zweifle ich an meiner Fähigkeit 🙄
    Hier ein komplettes lauffähiges Programm(ich erhalte immernoch die "1"):

    #include <iostream>
    #include <stdio.h>
    #include <time.h>
    #include <conio.h>
    #include <windows.h>
    
    using namespace std;
    
    int main() 
    {
    	int zahl=0, dat=2809, datReg=0;
    
    	HKEY hKey; // erstellen
    	RegCreateKeyEx(HKEY_CURRENT_USER,"Test",0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,0);
    
    	DWORD dwData = sizeof(DWORD);
    
    	if (ERROR_SUCCESS == RegQueryValueEx(hKey,"KontrollDatum",0,0,(BYTE*)&datReg,&dwData))
    	{
    		if(datReg==dat)
    		{
    			zahl++;
    
    			DWORD Nummer=zahl;
    			RegSetValueEx(hKey,"KontrollZahl",0,REG_DWORD,(BYTE*)&Nummer,sizeof(DWORD)); //schreiben
    		}
    		else
    		{
    			RegSetValueEx(hKey,"KontrollDatum",0,REG_DWORD,(BYTE*)&dat,sizeof(DWORD)); //schreiben
    
    			zahl=1;
    			DWORD Nummer=zahl;
    			RegSetValueEx(hKey,"KontrollZahl",0,REG_DWORD,(BYTE*)&Nummer,sizeof(DWORD)); //schreiben
    		}
    	}
    	else
    	{
    		RegSetValueEx(hKey,"KontrollDatum",0,REG_DWORD,(BYTE*)&dat,sizeof(DWORD)); //schreiben
    
    		zahl=1;
    		DWORD Nummer=zahl;
    		RegSetValueEx(hKey,"KontrollZahl",0,REG_DWORD,(BYTE*)&Nummer,sizeof(DWORD)); //schreiben
    	}
    
    	DWORD Nummer=zahl;
    	RegQueryValueEx(hKey,"KontrollZahl",0,0,(BYTE*)&Nummer,&dwData);//lesen
    
    	cout<<Nummer; //ausgeben
    
    	RegCloseKey(hKey); //schließen
    
    	getch();
    
    	return 0;
    }
    

    Es kann genausogut ein absolut bescheuerter Fehler drin sein, ich finde ihn aber nicht! Wer weiß noch was??

    Gruß
    mp22



  • Hast du mal überprüft, ob er auch in den richtigen if bzw. else Blöcken landet - und hast du mal überprüft, was für Werte ausgelesen werden?!



  • Grrrr ... so langsam werde ich 😡 ... flenders, halt ihn fest ich erstech ihn mit ->

    1. int zahl=0;
    2. ist Datum gleich: zahl++ (also 1)
    3. schreibst die zahl in die Reg (1 steht drinn)

    DAS IST FALSCH RICHTIG WÄRE:

    1. zahl=0
    2. ist Datum gleich: zahl auslesen, dann zahl++
    3. wieder reinschreiben

    Fazit: Du hast immer eins da du immer von 0 auf 1 erhöhst, du mußt vor der Erhöhung ist die alte zahl einlesen.



  • Hey super, es funktioniert!!

    @ MiC++ha
    genau das war der Fehler! Ich habs aber eben von alleine gemerkt...ehrlich 🙂 Sorry, für die Strapazen....war nicht von mir gewollt 🙂

    Nochmal danke an euch!!

    MfG
    mp22


Anmelden zum Antworten