Announcement

Collapse
No announcement yet.

Problem mit use RegEnumValues / RegEnumKeys...

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit use RegEnumValues / RegEnumKeys...

    Hallo,

    ich habe ein Problem mit folgendem Source:
    <pre>
    HKEY hKey;
    LPCTSTR Test;
    CHAR Val[2000];
    int i,j;
    char buffer[200];
    DWORD l,r;
    hKey=0;
    Test="Software";
    i=RegOpenKeyEx(HKEY_LOCAL_MACHINE,Test,0,KEY_ALL_A CCESS,&hKey);
    if (i!=ERROR_SUCCESS)
    {
    sprintf( buffer, "\tInteger: %d\n", i );
    MessageBox(hWnd,buffer,"Test2",0);
    }
    else
    {
    FILETIME FileTime;
    l=2000;
    r=0;
    j=0;

    while (i==0)
    {
    i=RegEnumKeyEx(hKey,j,Val,&l,&r,NULL,&r, &FileTime);
    if (i==ERROR_SUCCESS)
    {
    MessageBox(hWnd,Val,"Key",0);
    }
    else
    if (i==ERROR_NO_MORE_ITEMS) {MessageBox(hWnd,"Zu viele Schlüssel","Ende",0);}
    else
    {
    sprintf( buffer, "Fehler: %d\n", i );
    MessageBox(hWnd,buffer,"Fehler",0);
    }

    j++;
    }

    }
    </pre>

    Kann mir jemand sagen, was ich falsch mache?

    Tschüss...

  • #2
    Zum Stecknadeln im Heuhaufen suchen hab ich keine Zeit. Wie macht sich das Problem denn bemerkbar
    Günther

    Comment


    • #3
      Hallo,

      Zwei Schlüssel werden zurückgegeben, aber danach kommt "ERROR_MORE_DATA".
      Aber weshalb?

      Tschüss..

      Comment


      • #4
        Und wo steht ERROR_MORE_DATA im Quelltext ? Unsichtbar im letzten else - Zweig ? Kann man das auf jedem PC nachvollziehen ? Ich blick noch nicht so ganz durch, aber kann es sein daß es so sein soll:

        else

        <b>{</b>

        if (i==ERROR_NO_MORE_ITEMS) {MessageBox(hWnd,"Zu viele Schlüssel","Ende",0);}
        else
        {
        sprintf( buffer, "Fehler: %d\n", i );
        MessageBox(hWnd,buffer,"Fehler",0);
        }

        <b>}</b>


        ???

        entschuldige die schlechte Formatierung, aber ich war zu faul, das bisserl mit Frontpage zu machen
        Günther

        Comment


        • #5
          Hallo,

          danke für die Antwort es lag an "RegEnumKey". Man muss statt dessen "RegEnumKeyEx" verwenden, damit alles funktioniert.

          Tschüss..

          Comment


          • #6
            Hi

            1. ERROR_MORE_DATA heißt nicht genügend Platz im Buffer,
            Nach jeder abfrage wird dein l überschrieben. Es muß in while Schleife
            initialisiert sein.
            2. RegOpenKeyEx Parameter Nr. 5 muß NULL sein.

            So läuft es.

            <PRE>
            #include <afx.h>
            #include <windows.h>

            int main()
            {
            HWND hWnd=NULL;
            HKEY hKey;
            LPCTSTR Test;
            CHAR Val[2000];
            int i,j;
            char buffer[200];
            DWORD l,r;
            hKey=0;
            Test="Software";
            i=RegOpenKeyEx(HKEY_LOCAL_MACHINE,
            Test,0,KEY_ALL_ACCESS,&hKey);
            if (i!=ERROR_SUCCESS)
            {
            sprintf( buffer, "\tInteger: %d\n", i );
            MessageBox(hWnd,buffer,"Test2",0);
            }
            else
            {
            FILETIME FileTime;
            r=0;
            j=0;
            while (i==0)
            {
            l=2000;
            memset(Val,0,sizeof(Val));
            i=RegEnumKeyEx(hKey,j,Val,
            &l,NULL,NULL,NULL, &FileTime);
            if (i==ERROR_SUCCESS)
            {
            MessageBox(hWnd,Val,"Key",0);
            }
            else if (i==ERROR_NO_MORE_ITEMS)
            {
            MessageBox(hWnd,
            "Zu viele Schlüssel","Ende",0);
            }
            else
            {
            sprintf( buffer,
            "Fehler: Rc=%d Error=%d\n",
            i, GetLastError() );
            MessageBox(hWnd,buffer,"Fehler",0);
            }
            j++;
            }
            }
            return 0;
            }
            </PRE>

            Gruss Marti

            Comment

            Working...
            X