PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String aus Registry auslesen



BlondyBoy
02.06.2005, 14:48:03
Hi

Ich versuche einen String aus der Registry meines PPC auszulesen, aber irgendwie klappt das nicht so richtig. Hier mein Code:


LONG lError;
HKEY hMainKey;
DWORD dwTyp, dwSize;
CString csKey;

lError = RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"System\\StorageManager\\Profiles\\MMC", 0, KEY_ALL_ACCESS, &hMainKey);
if (lError == ERROR_SUCCESS) {
dwTyp = REG_SZ;
csKey = "";
dwSize = sizeof (csKey);
lError = RegQueryValueEx (hMainKey, L"Folder", 0, &dwTyp, (BYTE*)&csKey, &dwSize);
if (lError == ERROR_SUCCESS) {
Sleep(100);
}
}

Was könnte hier falsch sein? Bekomme keine Fehlermeldung oder Warnung.

Ich will damit einfach herausbekommen wie der Ordner einer CF-Karte genannt wird wenn eine eingesteckt ist.


MfG
BlondyBoy

Günni
02.06.2005, 15:54:56
das ist einfacher!



CString CSpezialFunktionen::Speicherkartenverzeichnis()
{
WIN32_FIND_DATA fd;
HANDLE h = FindFirstFlashCard(&fd);
FindNextFlashCard(h,&fd);
CString Verzeichns = fd.cFileName;
FindNextFlashCard(h,&fd);
Verzeichns = fd.cFileName;
return Verzeichns;
}

wenn Du nur "FindFirstFlashCard(&fd) " machst erhälst du in fd.cFileName den FlashRom deines PPC. FindNextFlashCard(..) besorgt dir dann den Verzeichnisnamen deiner Speicherkarte!!!
wenn ein PPC ein weiteres internes FlashRom hat (einige Industriegeräte) dann müstest du ein weiteres Mal FindNextFlashCard durchführen um an den richtigen Verzeichnisnamen heran zu kommen! (natürlich auch wenn du von der 2.Speicherkarte das Verzeichnis haben willst)
Hatte vor einigen Tagen auch das selbe Problem mit den verschiedenen Verzeichnisnamen der Speicherkarten auf verschiedenen Geräten!

Sven

BlondyBoy
03.06.2005, 08:20:33
Hi

Hört sich gut an. Aber finden diese Funktionen auch ein SD Karten Verzeichniss?

MfG
BlondyBoy

Günni
03.06.2005, 09:17:51
ja das geht!

sorry hatte ich vergessen zu posten :D
#include <projects.h>
link to: note_prj.lib

dann sollte es gehen!

Es gibt auch ein tool mit dem du die Eintrag der Registry ändern kannst!
Les mal diesen link (http://www.ppc-welt.info/community/showthread.php?t=67848&highlight=Speicherkarte)
Nur halt bis irgendwann ein Hardreset gemacht wird, dann ist alles wieder beim alten!

Sven

BlondyBoy
03.06.2005, 15:04:25
Hi

danke nochmal funktioniert auch soweit, aber mich würde trotzdem interessieren was an meinem Code oben so falsch ist?

Besser gesagt warum ich damit nichts aus der Registry bekomme obwohl keinerlei Fehlermeldung kommt.

MfG
BlondyBoy

siaccarino
03.06.2005, 15:34:12
probiers mal so:

LONG lError;
HKEY hMainKey;
DWORD dwTyp, dwSize;
char csKey[256];

lError = RegOpenKeyEx (HKEY_LOCAL_MACHINE,L"System\\StorageManager\\Profiles\\MMC", 0, KEY_READ, &hMainKey);
if (lError == ERROR_SUCCESS) {
dwTyp = REG_SZ;
*csKey = 0;
dwSize = 256;
lError = RegQueryValueEx (hMainKey, L"Folder", 0, &dwTyp, (BYTE*)csKey, &dwSize);
if (lError == ERROR_SUCCESS) {
Sleep(100);
}
}

mich wunderts eher, daß Dein Programm nicht abgestürzt ist.

siaccarino
03.06.2005, 15:39:49
oder diesen hier:
LONG lError;
HKEY hMainKey;
DWORD dwTyp, dwSize;
CString csKey;

lError = RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"System\\StorageManager\\Profiles\\MMC", 0, KEY_ALL_ACCESS, &hMainKey);
if (lError == ERROR_SUCCESS) {
dwTyp = REG_SZ;
csKey = "";
dwSize = 256;
lError = RegQueryValueEx (hMainKey, L"Folder", 0, &dwTyp, (BYTE*)csKey.GetBuffer(256), &dwSize);
csKey.ReleaseBuffer();
if (lError == ERROR_SUCCESS) {
Sleep(100);
}
}

jochen.albrecht
22.09.2005, 15:07:17
um einen String auszulesen muss man in einem ersten schritt die länge des Strings ermitteln und diesen dann in einem zweiten Schritt auslesen:

Hier eine Bsp-Funktion:

BOOL ReadRegistryStr(char * lpszValueName, char * lpszValue)
{
LONG lRes;
HKEY hKeyParent = HKEY_LOCAL_MACHINE;
HKEY hKey = NULL;
REGSAM samDesired = KEY_ALL_ACCESS;
DWORD dwType = NULL;
DWORD dwCount = 0;

USES_CONVERSION;

lRes = RegOpenKeyEx(hKeyParent, v_szRegRootKey, 0, samDesired, &hKey);
if(lRes!=ERROR_SUCCESS)
return FALSE;

lRes = RegQueryValueEx(hKey, A2W(lpszValueName), 0, &dwType, 0, &dwCount);
if(lRes!=ERROR_SUCCESS || dwCount == 0)
{
RegCloseKey(hKey);
return FALSE;
}

BSTR StrTemp = new WCHAR[dwCount];

lRes = RegQueryValueEx(hKey, A2W(lpszValueName), NULL, &dwType,(unsigned char *)StrTemp, &dwCount);
if(lRes!=ERROR_SUCCESS)
{
RegCloseKey(hKey);
return FALSE;
}

lRes = RegCloseKey(hKey);
if(lRes!=ERROR_SUCCESS)
return FALSE;

CString tempo(StrTemp);
SysFreeString(StrTemp);

strcpy(lpszValue,W2A(tempo));

return TRUE;
}