Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rejestr, problem z poprawnym wyświetlaniem ciągów Kurs WinAPI

Ostatnio zmodyfikowano 2011-09-14 12:34
Autor Wiadomość
Aplauz
Temat założony przez niniejszego użytkownika
Rejestr, problem z poprawnym wyświetlaniem ciągów Kurs WinAPI
» 2011-09-13 13:54:15
Witam,
Jestem początkującym programistą i próbując nauczy się czegoś z Kurs WinAPI, C++ (lekcja 18) napisałem program na podstawie programów umieszczonych w tej lekcji. Program ma za zadanie wejść do "Software\\Microsoft\\Windows\\CurrentVersion\\Run" i wypisać nazwy, oraz dane ciągów. Wszystko ładnie, pięknie ale mój kochany program nie działa tak jak powinien.

C/C++
#include <windows.h>
#include <iostream>
using namespace std;

int main()
{
    HKEY hkSoftware;
    LONG result;
    result = RegOpenKeyExA( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, & hkSoftware );
   
   
    DWORD dwMaxName, dwMaxData, dwMaxIndex;
   
    result = RegQueryInfoKeyA( hkSoftware, NULL, NULL, NULL, NULL, NULL, NULL, & dwMaxIndex,
    & dwMaxName, & dwMaxData, NULL, NULL );
   
   
   
    CHAR Data[ 256 ];
    CHAR ValueName[ 256 ];
   
    DWORD ValueType;
   
    for( DWORD i = 0; i < dwMaxIndex; i++ )
    {
       
        result = RegEnumValueA( hkSoftware, i, ValueName, & dwMaxName, NULL, & ValueType,( LPBYTE ) Data, & dwMaxData );
        if( result == ERROR_SUCCESS )
        {
            cout << ValueName << endl;
            cout << Data << endl;
           
        }
       
    }
   
    system( "pause" );
    return 0;
}
Problem polega na tym, iż zamiast wyświetlenia wszystkich ciągów z tego klucza wyświetla tylko kilka, w zależności od wartości "i".
Czy mógłby mi ktoś powiedzie dlaczego tak się dzieję i w jaki sposób mogę ten program naprawić?
P-40885
DejaVu
» 2011-09-13 13:59:54
Może po prostu w rejestrze nie istnieją klucze, których szukasz w gałęzi, którą listujesz :) To, że regedit pokazuje Ci klucze w danej gałęzi to nie znaczy wcale, że fizycznie one tam istnieją. Przeczytaj w MSDN'ie opis wszystkich funkcji, które użyłeś do obsługi rejestru - z pewnością znajdziesz więcej odpowiedzi na swoje pytania aniżeli gdziekolwiek na forum :)
P-40886
Aplauz
Temat założony przez niniejszego użytkownika
» 2011-09-13 14:08:06
Na pewno o tym poczytam.
Nie wiem, czy dobrze zrozumiałem, ale chciałbym lepiej zobrazować mój problem. Oto przykładowe wartości dla "i":

i = 0 StartCCC, Adobe ARM, Default
i = 1 Adobe Reader Speed Launcher, Adobe ARM
i = 2 Adobe ARM, Default
i = 3 Default
i = 4 eAgent PrintMonitor, Msger
i = 5 Msger
i = 6 SunJavaUpdateSched
i = 7 nic // bo mam tylko 6 (+ domyślny) ciągów w tym kluczu.

Co ciekawe, wszystkie 6 ciągów + domyślny, które są tutaj podane występują w moim kluczu, tylko nie mogę ich wyświetli wszystkich naraz.
P-40887
DejaVu
» 2011-09-13 14:42:51
tylko nie mogę ich wyświetli wszystkich naraz.
Myślę, że nikt nie zrozumie co tu miałeś na myśli :)
P-40888
Aplauz
Temat założony przez niniejszego użytkownika
» 2011-09-13 15:00:11
ohh.. przepraszam, już tłumaczę.
Chciałbym, aby program wyświetlił mi wszystkie ciągi w danym kluczu(w tym przypadku RUN).
On natomiast w zależności od tego jaką ustawię wartość dla "i" wyświetla różne ciągi.
Gdy samemu w miejsce "i" powpisuję wszystkie możliwe kombinacje (w tym przypadku od 1 do 7, bo tyle mam 7 ciągów w RUN) to wyświetla mi jeden, lub dwa różne ciągi. Jednak, gdy doda się te wszystkie wyniki to okazuję się, że faktycznie wszystkie ciągi są tylko wyświetlają się zależnie od początkowej wartości "i". Z niewiadomego mi powodu program nie wyświetla mi wszystkich tych ciągów jednocześnie (wszystkich 7), tylko właśnie jeden lub dwa.
Właściwie to chyba dalej jest to mało zrozumiałe, ale inaczej nie umiem tego przedstawić. : /

Osobiście uważam, że błąd jest gdzieś od momentu pętli "for"... nie wiem tylko, w którym miejscu.
P-40890
pekfos
» 2011-09-13 15:13:58
bo tą funkcją otrzymujesz wartość a nie zawartość klucza (wiele wartości).
P-40891
Aplauz
Temat założony przez niniejszego użytkownika
» 2011-09-13 15:19:12
Jakiej w takim razie mam użyć funkcji i dlaczego programiście, który pisał tą lekcje ten program działał?
P-40892
pekfos
» 2011-09-13 15:30:23
a co ci wyświetla ten program? jest pętla więc funkcja RegEnumValueA() powinna ci podać kolejne wartości.

Chyba że ścieżka nie jest poprawna. Debuguj lub po prostu sprawdzaj wartość result.
P-40893
« 1 » 2
  Strona 1 z 2 Następna strona