S
Okay ... auch das habe ich überwunden. Aber wie so oft eine weitere Sache wo ihr mir helfen könntet:
void autostartanzeigen () /* <-- Autostarteinträge holen */
{
int i=0,x=0,run = 0; // Ab hier für Alle benutzer
int iLastError=0;
HKEY hKey;
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",&hKey);
do
{
char cValueName [256] = "";
DWORD dwValueName = 256;
DWORD ValueType = 0;
BYTE cValueData[256] = "\0";
DWORD dwValueData = 256;
iLastError = RegEnumValue (hKey,i,cValueName,&dwValueName,0,&ValueType,cValueData,&dwValueData);
String ^eintrag = gcnew String(cValueName); // <-- umwandeln von char zu System::String
if ( eintrag != "")
{
checkedListBox1->Items->Add (eintrag);
checkedListBox1->SetItemChecked (i, true); <-- erstelltes Item als Checked ????
}
++i;
run = 1;
}
while(iLastError!=ERROR_NO_MORE_ITEMS);
}
Eigentlich möchte ich, dass alle hinzugefügten Elemente der CheckedListBox standardmässig ge"checkt" werden. Leider passiert das aber nur beim ersten und beim letzten Eintrag. Im Designer finde ich dazu auch nichts passendes.
Ausserdem habe ich bei einer späteren Funktion - wo Autostarteinträge gelöscht werden sollen - das Problem, dass ich aufgrund der Bindung zum Enumerator keine Items löschen kann:
IEnumerator^ myEnum2 = checkedListBox1->CheckedItems->GetEnumerator();
while ( myEnum2->MoveNext() )
{
Object^ itemChecked = safe_cast<Object^>(myEnum2->Current);
System::String^ eintrag = itemChecked->ToString(); /* <-- System::Objekt umwandeln zu System::String */
pin_ptr<const wchar_t> wch = PtrToStringChars(eintrag); // <-- System::String umwandeln zu char*
size_t convertedChars = 0;
size_t sizeInBytes = ((eintrag->Length + 1) * 2);
errno_t err = 0;
char *ch = (char *)malloc(sizeInBytes);
err = wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);
RegDeleteValue (hKey,ch );
int index = checkedListBox1->Items->IndexOf (itemChecked);
checkedListBox1->Items->RemoveAt (index);
}
RegCloseKey (hKey);