2010-12-13 10 views
0

これらのコードを使用すると、レジストリにアクセスして、読み取り不可能な形式のlastvisitedMRU値を取得できます。私がここで行ったことは、それらを読みやすい形式に変換することでした。私はそれらを配列に配置し、それらをコンソールに出力しました。C#レジストリ(配列間の文字間のスペースを削除するには?)

出力は次のようになります:
C : \ P r o g r a m F i l e s \ i P o d \ f i l e . t x t

私が間に間隔を削除するにはどうすればよいですか?

ありがとうございます。

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(); 
     } 

答えて

0

バイナリには、ユニコードがエンコードされています。私はあなたのコードを修正し、私のXP上で動作していることを確認しました。しかし、LastVisitedMRUは存在しないため、Windows 7またはVistaでは動作しません。

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

ありがとう、忘れて、XPにのみ存在することを忘れてしまった。 – athgap