Programm wie oft ausgeführt??



  • 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