Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 04:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Schon wieder ein Problem -.- Registry

Discussion on Schon wieder ein Problem -.- Registry within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,906
Received Thanks: 25,409
Registryproblem+Nullen aus Chararray (zwischen Zeichen) filtern

Hi,
mich kennt ihr ja schon
Mal wieder ein Problem, zu dem ich nach 3 Stunden googlen nichts gefunden habe (sagt mal gibts da ne versteckte Funktion um das zu finden, was man sucht oder was?)!

Ohne lange um den heißen Brei zu reden, mein Problem:

Ich wollte den Launcher nicht mehr vom Verzeichnis abhängig machen.
Da der Pfad eines Unterordners vom Spiel in der Registry steht, wollte ich damit den Pfad bekommen.
Der Schlüsselpfad ist richtig und auch die Typen etc.

Hier der Code:

PHP Code:
    HKEY hKey 0;

    
char buf[255] = {0};

    
DWORD dwType 0;

    
DWORD dwBufSize sizeof(buf);

    if( 
RegOpenKey(HKEY_CURRENT_USER,_T("HKEY_CURRENT_USER\\Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
    {
        
dwType REG_SZ;
        
RegQueryValueEx(hKey,_T("(Standard)"),0, &dwType, (BYTE*)buf, &dwBufSize);
        
path = *buf;
    }
    else
    {
        
CString str;
        
str.Format(L"Error: %i",GetLastError());
        
AfxMessageBox(L"Fehler beim Auslesen der Registry!/An Error occurred while reading the Registry!");
        
AfxMessageBox(L"Wende dich an MrSm!th bei epvpers/Contact MrSm!th on epvpers");
        
MessageBox(str,L"Error!",MB_OK); 

So ähnlich habe ich es erst selbst formuliert.
Dann habe ich ein fertiges Beispiel genommen.
Ich habe mit und ohne Adminrechte ausgeführt.
Und trotzdem failt RegOpenKey!
Wenn ich das im VS Debugger lese, steht da etwas bei hKey, nämlich (0x00000000=unused???) und dann in rot "Der Ausdruck kann nicht ausgewertet werden!".
Ok, ist klar beim Wert 0.
Aber wie gesagt die Funktion failt und ich finde einfach keine andere Fehlerquelle, aber das muss doch gehen.
Selbst in der MSDN ist der HKEY nicht großartig anders initialisiert.

In der MessageBox wird Error:0 ausgegeben.
Eigentlich ist 0 doch der Wert, dass es klappt; hier gehts aber nicht -.-
Und selbst wenn ich in der Abfrage den Wert 0 abfragen würde, käme ja immernoch der Crash vom Launcher, der auch kommt, wenn ich die Abfrage ganz weglasse.

Mal wieder Danke im Voraus.
MrSm!th is offline  
Old 12/03/2009, 22:32   #2
 
Shadowz75's Avatar
 
elite*gold: 0
Join Date: Mar 2009
Posts: 443
Received Thanks: 597
Code:
if( RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
statt:
Code:
if( RegOpenKey(HKEY_CURRENT_USER,_T("HKEY_CURRENT_USER\\Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
Shadowz75 is offline  
Thanks
1 User
Old 12/03/2009, 23:00   #3


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,906
Received Thanks: 25,409
Quote:
Originally Posted by Shadowz75 View Post
Code:
if( RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
statt:
Code:
if( RegOpenKey(HKEY_CURRENT_USER,_T("HKEY_CURRENT_USER\\Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
hupps sry, das habe ich glatt vergessen!
So wie du es geposted hast, hatte ich es vorher!
Nur es gab das gleiche Problem.
Also habe ich es mal damit probiert, aber gleiches Ergebnis.
Habe nur vergessen es wieder rückgängig zu machen.


edit: ah moment.
Ich hatte da \\Software... vorher stehen.
Und nicht Software...
Man das sollte auch in die größten Programmierfails
aber eine Execption gibts immernoch.
In thrdcore oder so.
Mal sehen ob die Pramameter richtig übergeben werden.


Danke trotzdem, ich kannte die Lösung zwar schon indirekt und dachte damit klappts nicht, aber dein Post hat mich dazu gebracht, es doch nochmal zu testen^^


edit2:

Jetzt kommt gar nix dabei raus.
Das heißt anscheinend wird in den char* buf nix geschrieben(zumindest zeigt der Debugger 0 an).
Deshalb wirds auch nix mit den anderen strings und am Ende kommt wohl deswegen ein String aus Japanischen/Chinesischen/Koreanischen Zeichen.

Also neue Frage:

Warum wird buf nicht beschrieben???

PHP Code:
HKEY hKey 0;

    
char buf[255] = {0};

    
DWORD dwType 0;

    
DWORD dwBufSize sizeof(buf);

    if( 
RegOpenKey(HKEY_CURRENT_USER,_T("Software\\Ahnlab\\HShield"),&hKey) == ERROR_SUCCESS)
    {
        
dwType REG_SZ;
        
RegQueryValueEx(hKey,_T(""),0, &dwType, (LPBYTE)buf, &dwBufSize);
        
path = *buf;
                
RegCloseKey(hKey);
    }
    else
    {
        
CString str;
        
str.Format(L"Error: %i",GetLastError());
        
AfxMessageBox(L"Fehler beim Auslesen der Registry!/An Error occurred while reading the Registry!");
        
AfxMessageBox(L"Wende dich an MrSm!th bei epvpers/Contact MrSm!th on epvpers");
        
MessageBox(str,L"Error!",MB_OK);
                
RegCloseKey(hKey);
    }




std::string str1 "S4Client.exe\"";
    
ClittleS4launcherDlg tmp;
    
tmp.FindDir();
    
size_t pos path.find("HShield",0);
    
path path.substr(0,path.length()-7);
    
path path+str1;
std::string param1 " -rc:eu -lac:eng -auth_server_ip:217.110.102.94";
    
std::string param2 " -rc:eu -lac:ger -auth_server_ip:217.110.102.94";
path "\""+path+param1;
        if(!
CreateProcess(NULL,(LPWSTR)&path,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
        {
            
CString str;
            
str.FormatL"Error: %i", ::GetLastError());
             
MessageBoxstrL"Error!"MB_OK );
             
MessageBox(L"Contact MrSm!th!",MB_OK);
        } 
MrSm!th is offline  
Old 12/05/2009, 22:01   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,906
Received Thanks: 25,409
Ok, habe es nun hingekriegt.
"(Standard)" wird nur in der Registry angezeigt, in C++ muss es "" sein.
Jetzt gehts.

Nur wird leider der Pfad mit 0en Zurückgegeben also:

buf[0] = F
buf[1] = 0
buf[2] = :
buf[3] = 0
usw.

Wie kriege ich die da raus? Das ist nämlich das Problem, warum der Pfad nicht richtig verwendet werden kann.
Schon nach F ist der buf angeblich zuende für den Rechner.

Habe schon versucht, die 0en zu löschen und die anderen Buchstaben aufrücken zu lassen.
Mit meinen Ideen (die 0 löschen, und den wert vom nächsten in diesen setzen; nächsten auf 0 setzen) hats nicht geklappt (hat sonst jemand eine Idee?), also probierte ich ohne Erfolg einfach alle nicht 0 Werte in ein zweites Array zu kopieren (code unten) hat nicht geklappt.
Es wurde gar nichts kopiert komischerweise, obwohl die Bedingung zutraf und man sogar in den if Teil kam.
Komischerweise hat das zweite Array auch trotz initialisierung mit 0 ganz komische Werte.

Code:

PHP Code:
    HKEY hKey 0;

    
char buf[255];
    for(
int i=0;i<256;i++) buf[i] = 0;
    
int pos 0;
    
int pos2 0;

    
DWORD dwType 0;

    
DWORD dwBufSize 255;

    if( 
RegOpenKeyEx(HKEY_CURRENT_USER,_T("Software\\Ahnlab\\HShield"),0,KEY_QUERY_VALUE,&hKey) == ERROR_SUCCESS)
    {
        
dwType REG_SZ;
        if(
RegQueryValueEx(hKey,_T(""),NULL, &dwType,(LPBYTE)buf, &dwBufSize)==ERROR_SUCCESS)
        {

//hier beginnt der Teil zum kopieren

        
int itmp =0;
        
int itmp2 0;
        
char temp[255];
        for(
int i=0;i<256;i++) temp[i] =0;
        while(
itmp <255)
        {
            if(
buf[itmp]!=0
            {
                
temp[itmp2] = buf[itmp];
                
itmp2++;
            }
            
itmp++;
        }
//Ende

        
std::string str temp;
        
std::string search_word "HShield"replace_word "S4Client.exe\"";
        
size_t pos 0length search_word.length();
        while ((
pos str.find(search_wordpos)) != std::string::npos)
        
str.replace(poslengthreplace_word);
        
path str;
        
RegCloseKey(hKey);
        }
        else
        {
            
CString str;
            
str.Format(L"Error: %i",GetLastError());
            
AfxMessageBox(str);
            
RegCloseKey(hKey);
            
OnOK();
        }
    }
    else
    {
        
CString str;
        
str.Format(L"Error: %i",GetLastError());
        
AfxMessageBox(L"Fehler beim Auslesen der Registry!/An Error occurred while reading the Registry!");
        
AfxMessageBox(L"Wende dich an MrSm!th bei epvpers/Contact MrSm!th on epvpers");
        
MessageBox(str,L"Error!",MB_OK);
    } 

Der Teil zwischen den Kommentaren ist der Teil, der kopiert.
Ist da irgendwo ein Fehler? Ich sehe keinen.
Oder gibts dafür eine fertige Funktion/könnt ihr mir sagen, wie man es besser schreiben könnte?
Oder am besten sogar gleich, wie man am besten Pfad aus der Registry ausliest?

Google hat bei keinem der drei Möglichkeiten etwas ausgespuckt =/


Danke im Voraus





edit:
Vielen Dank
super geholfen.
naja, für die, die das selbe Problem haben, poste ich mal den Code
#title edited to find it easier by google


PHP Code:
unsigned char temp[255] = {""};    
    
unsigned long size sizeof(temp);
    
HKEY hKey;
    
RegOpenKey(HKEY_CURRENT_USER_T("Software\\Ahnlab\\HShield"), &hKey);
    
RegQueryValueEx(hKey_T(""), NULLNULLtemp, &size);
    
RegCloseKey(hKey);

// Kopierteil beginnt (0en zwischen den Zeichen werden herausgefiltert)
    
char buf[255];
    
int i =0;
    
int i2 0;
    while(
<256)
    {
        
buf[i2] = temp[i];
        
i2++;
        
i+2;
    }

//ende
    
std::string str buf//voller String wird bei mir angezeigt 
MrSm!th is offline  
Reply


Similar Threads Similar Threads
Crossfire Problem schon wieder -.-!!!!!!
07/12/2010 - CrossFire - 21 Replies
Hi jungs, Ich hatte schon ein Thread aber hab den schließen lassen, weil ich dachte ich hab das Problem gelöst, was ja der fall nicht ist^^. Wie schon oben steht habe ich ein problem. Also wenn ich crossfire öffne und spiele so 10 minuten geht einfach mein Monitor aus einfach so. Und muss mein PC vom Schalter ausmachen und anmachen. Wer hilft kriegt THX. Mit freundlichen Grüßen
schon wieder problem mit d2nt bbird
05/27/2010 - Diablo 2 - 6 Replies
yo, bot läuft nun seit 3:00 uhr und es sieht atm folgendermassen aus (2bots) nr 1 runs restarts chickens 30 19 1 nr 33 27 2
Schon wieder ein Problem
04/15/2010 - Metin2 Private Server - 15 Replies
Moin also ich hab ein problem auf meinem hamachi pserver es können alle leute drauf zocken bis auf einem woran liegt es er hat die mc.txt in meine hamachi ip geändert er ist in hamachi drin er kriegt immer nach char auswahl kick
Sorry aber ich hab schon wieder ein Problem
02/27/2010 - Metin2 Private Server - 4 Replies
Schei** ich nerv schon wieder ich hab schon gegooglet aber nix gefunden Ich versuch dauernd mir Fliezilla auf meinen Server zuzugreifen aber da kommt dann immer nur Fehler: Zeitüberschreitung der Verbindung Fehler: Herstellen der Verbindung zum Server fehlgeschlagen Hoffe ihr könnt mir helfen MfG Nixodas
Schon wieder problem mit Longjuyt2 -.-
09/03/2009 - Metin2 Private Server - 8 Replies
also ich bins mal weder :D vllt geh ich euch schon auf die nerven, aber ich habe mal wieder eine frage. und zwar: ich spile Longjuyt2 mit der deutschen exe. Ich klicke wie immer auf die exe zum starten, wie jedes mal wenn ich spielen will. aber dann: das spiel startet einfaach nich -.-



All times are GMT +2. The time now is 04:19.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.