Programm wie oft ausgeführt??



  • 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



  • Prima, dann werden das doch keine 10 Seiten hier im Thread 😃


Anmelden zum Antworten