2010-12-13 8 views
0

Diese Codes ermöglichen es mir, auf die Registrierung zuzugreifen und die zuletzt besuchtenMRU-Werte in einem nicht lesbaren Format abzurufen. Was ich hier gemacht habe, war, sie in ein lesbares Format zu konvertieren. Ich platzierte sie in einem Array und gab sie in die Konsole aus.C# -Registrierung (Wie Abstand zwischen Buchstaben aus Array entfernen)?

Der Ausgang geht so:
C : \ P r o g r a m F i l e s \ i P o d \ f i l e . t x t

Wie entferne ich die Abstände dazwischen?

Vielen Dank im Voraus.

try 
     { 
      RegistryKey rk = Registry.CurrentUser; 

      rk = rk.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU", false); 
      PrintKeys(rk); 
     } 

     catch (Exception MyError) 
     { 
      Console.WriteLine("An error has occurred: " + MyError.Message); 
     } 
    } 

    static void PrintKeys(RegistryKey rk) 
    { 
     if (rk == null) 
     { 
      Console.WriteLine("No specified registry key!"); 
      return; 
     } 

     String[] names = rk.GetValueNames(); 

     Console.WriteLine("Subkeys of " + rk.Name); 
     Console.WriteLine("-----------------------------------------------"); 

     foreach (String s in names) 
     { 
      try 
      { 
       if (s == "MRUList") 
       { 
        continue; 
       } 

       else 
       { 
        try 
        { 
         Byte[] byteValue = (Byte[])rk.GetValue(s); 

         string str = BitConverter.ToString(byteValue).Replace("00", ""); 

         str = BitConverter.ToString(byteValue).Replace("-", ""); 
     //str binry AND VAR CONVERTED TEXT 

         Console.WriteLine(s + " Contains the value of : " + str); 

         StringBuilder sb = new StringBuilder(); 

         for (int i = 0; i <= str.Length - 2; i += 2) 
         { 
          sb.Append(Convert.ToString(Convert.ToChar(Int32.Parse(str.Substring(i, 2), System.Globalization.NumberStyles.HexNumber)))); 
         } 

         String val = Convert.ToString(sb).Replace(" ", ""); 

         Console.WriteLine(s + " Contains the value of : " + val); 
        } 

        catch (Exception Errors) 
        { 
         Console.WriteLine("An error has occurred: " + Errors.Message); 
        } 
       } 

       //rk.Close(); 
      } 

      catch (Exception MyError) 
      { 
       Console.WriteLine("An error has occurred: " + MyError.Message); 
      } 

      Console.WriteLine("-----------------------------------------------"); 
      //rk.Close(); 
     } 

Antwort

0

Die Binärdatei dort ist Unicode-codiert. Ich habe deinen Code repariert und bestätigt, dass er auf meinem XP funktioniert. Unter Windows 7 oder Vista funktioniert es jedoch nicht, da LastVisitedMRU nicht mehr vorhanden ist.

static void Main(string[] args) 
    { 
     try 
     { 
      RegistryKey rk = Registry.CurrentUser; 
      rk = rk.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\LastVisitedMRU", false); 
      PrintKeys(rk); 
     } 

     catch (Exception ex) 
     { 
      Console.WriteLine("An error has occurred: " + ex.Message); 
     } 
    } 

    static void PrintKeys(RegistryKey rk) 
    { 
     if (rk == null) 
     { 
      Console.WriteLine("No specified registry key!"); 
      return; 
     } 

     foreach (String s in rk.GetValueNames()) 
     { 
      if (s == "MRUList") 
      { 
       continue; 
      } 
      Byte[] byteValue = (Byte[])rk.GetValue(s); 

      UnicodeEncoding unicode = new UnicodeEncoding(); 
      string val = unicode.GetString(byteValue); 

      Console.Out.WriteLine(val); 
     } 
     Console.ReadLine(); 
    } 
+0

Danke, vergessen zu erwähnen, dass es nur in XP existiert. – athgap

Verwandte Themen