ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
【VB.NET】PATH 環境変数エディタ
日時: 2013/05/01 23:26
名前: lightbox



ユーザー環境変数
拡張子:
HKEY_CURRENT_USER\Environment
システム環境変数
拡張子:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
↓ツールボックスに登録して、LboxGrid を フォームに貼り付けます ブラウザでダウンロード 登録は、ツールボックスの「全般」で右クリックして「アイテムの登録」を行います 登録すると、「参照設定」にも登録されると思いますが、もし無ければ登録して下さい 値を空にすると、その行は削除されます。 行を追加したい場合は、任意の行の最後で ";" を入力してデータを続けます。
拡張子:
' RegistryKey クラス用
Imports Microsoft.Win32
Imports System.Runtime.InteropServices


Public Class Form1

	Const HWND_BROADCAST = &HFFFF
	Const WM_WININICHANGE = &H1A
	Const SMTO_ABORTIFHUNG = &H2

	<DllImport("User32.dll")> _
	 Private Shared Function SendMessageTimeout( _
	  ByVal hWnd As Integer, _
	  ByVal msg As Integer, _
	  ByVal wParam As Integer, _
	  ByVal lParam As String, _
	  ByVal fuFlags As Integer, _
	  ByVal uTimeout As Integer, _
	  ByRef lpdwResult As System.IntPtr) As Integer
	End Function

	' ユーザーかシステムかを示す変数( 1:ユーザー,2:システム )
	Private mode As Integer = 0

	' *********************************************************
	' 初期処理
	' *********************************************************
	Private Sub Form1_Load(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles MyBase.Load

		Me.LboxGrid1.AddColumn("PATH", "検索パス")
		Me.LboxGrid1.ReadOnly = False
		Me.LboxGrid1.EditMode = DataGridViewEditMode.EditOnF2

	End Sub

	' *********************************************************
	' ユーザーの PATH 環境変数の表示
	' *********************************************************
	Private Sub ユーザToolStripMenuItem_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles ユーザToolStripMenuItem.Click

		Me.Text = "PATH環境変数エディタ / ユーザ"

		Dim subkey As String = "Environment"
		Dim regkey As RegistryKey = Registry.CurrentUser.OpenSubKey(subkey, True)

		Try
			' C# では、if ( regkey != null ) {
			If Not regkey Is Nothing Then

				mode = 1
				DataEnum(regkey.GetValue("PATH").ToString())

			Else

				MessageBox.Show("レジストリが正しく開かれていません")

			End If

		Catch ex As Exception

			MessageBox.Show(ex.ToString())

		End Try

		If Not regkey Is Nothing Then

			regkey.Close()

		End If

	End Sub

	' *********************************************************
	' システムの PATH 環境変数の表示
	' *********************************************************
	Private Sub システムToolStripMenuItem_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles システムToolStripMenuItem.Click

		Me.Text = "PATH環境変数エディタ / システム"

		Dim subkey As String = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
		Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey(subkey, True)

		Try
			If Not regkey Is Nothing Then

				mode = 2
				DataEnum(regkey.GetValue("PATH").ToString())

			Else

				MessageBox.Show("レジストリが正しく開かれていません")

			End If

		Catch ex As Exception

			MessageBox.Show(ex.ToString())

		End Try

		If Not regkey Is Nothing Then

			regkey.Close()

		End If

	End Sub

	' *********************************************************
	' 文字列を ";" で分解して配列にする
	' ※ 引数は 値渡し
	' *********************************************************
	Private Sub DataEnum(ByVal Path As String)

		' 区切り文字定義
		Dim delimStr As String = ";"
		Dim delimiter As Char() = delimStr.ToCharArray()

		' 配列に分割
		Dim split As String() = Path.Split(delimiter)

		' ソートはしない( パスの順序に意味がある )
		' 表示のみならばソートしても良い
		' Array.Sort(split, split.GetLowerBound(0), split.Length)

		LoadGrid(split)

	End Sub

	' *********************************************************
	' LboxGrid にデータをロード
	' ※ 引数は 参照渡し
	' *********************************************************
	Private Sub LoadGrid(ByRef data As String())

		Me.LboxGrid1.Clear()
		' 自動サイズ変更モード
		Me.LboxGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells

		For Each value As String In data

			Me.LboxGrid1.AddRow()
			Me.LboxGrid1.SetColumnText("PATH", value)

		Next

		' 自動サイズ変更の列をユーザが変更できるようにする
		Me.LboxGrid1.AllowResizeColumn(True)

	End Sub


	' *********************************************************
	' 更新
	' *********************************************************
	Private Sub ToolStripMenuItem2_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles ToolStripMenuItem2.Click

		If mode = 0 Then
			MessageBox.Show("更新できません / ユーザまたはシステムを選択して下さい")
			Return
		End If

		Dim str As String = ""
		Dim fld As String = ""

		Me.LboxGrid1.EndEdit()

		' LboxGrid の全行を列挙して PATH 環境変数の値を作成する
		Me.LboxGrid1.SetCurrentRow()
		Do While (Me.LboxGrid1.FindNextRow())

			fld = Me.LboxGrid1.GetColumnText("PATH")
			If fld = "" Then
				Continue Do
			Else
				fld = fld.Trim()
				If fld = "" Then
					Continue Do
				End If
			End If

			If str <> "" Then
				str &= ";"
			End If

			str &= fld

		Loop

		' 作成された内容の表示
		If MessageBox.Show(str, "更新しますか? ( 実行後システムに反映するのに5秒必要です )", _
		 MessageBoxButtons.OKCancel, _
		 MessageBoxIcon.Question) = Windows.Forms.DialogResult.Cancel Then
			Return
		End If

		' レジストリへの書き込み
		If mode = 1 Then
			Dim subkey As String = "Environment"
			Dim regkey As RegistryKey = Registry.CurrentUser.OpenSubKey(subkey, True)

			regkey.SetValue("PATH", str)
			DataEnum(regkey.GetValue("PATH").ToString())

			regkey.Close()
		End If

		' レジストリへの書き込み
		If mode = 2 Then
			Dim subkey As String = "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
			Dim regkey As RegistryKey = Registry.LocalMachine.OpenSubKey(subkey, True)

			regkey.SetValue("PATH", str)
			DataEnum(regkey.GetValue("PATH").ToString())

			regkey.Close()
		End If

		Dim rdata As Integer = 0

		SendMessageTimeout(HWND_BROADCAST, WM_WININICHANGE, 0, "Environment", SMTO_ABORTIFHUNG, 5000, rdata)

	End Sub

End Class
環境変数の変更をシステムに通知する方法 : Microsoft サポートオンライン C#はこちら : 古いバージョンです ↓プロジェクトが使える方はこちら( LboxGrid[lightbox.dll] 同梱 ) http://lightbox.on.coocan.jp/download/PATH_EDITOR.lzh
メンテナンス

【C#】PATH 環境変数エディタ ( No.1 )
日時: 2008/04/24 11:24
名前: lightbox


日時: 2008/04/24 11:24
名前: lightbox
拡張子:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32; 

namespace PATH_EDITOR_CS
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}
		// ユーザーかシステムかを示す変数( 1:ユーザー,2:システム ) 
		private int mode = 0;

		// ********************************************************* 
		// 初期処理 
		// ********************************************************* 
		private void Form1_Load(object sender, EventArgs e)
		{

			this.LboxGrid1.AddColumn("PATH", "検索パス");
			this.LboxGrid1.ReadOnly = false;
			this.LboxGrid1.EditMode = DataGridViewEditMode.EditOnF2;

		}

		// ********************************************************* 
		// ユーザーの PATH 環境変数の表示 
		// ********************************************************* 
		private void ユーザー_Click(object sender, EventArgs e)
		{

			string subkey = "Environment";
			RegistryKey regkey = Registry.CurrentUser.OpenSubKey(subkey, true);

			try
			{
				if ((regkey != null))
				{

					mode = 1;
					DataEnum(regkey.GetValue("PATH").ToString());
				}

				else
				{

					MessageBox.Show("レジストリが正しく開かれていません");

				}
			}

			catch (Exception ex)
			{

				MessageBox.Show(ex.ToString());

			}

			if ((regkey != null))
			{

				regkey.Close();

			}

		}

		// ********************************************************* 
		// システムの PATH 環境変数の表示 
		// ********************************************************* 
		private void システム_Click(object sender, EventArgs e)
		{

			string subkey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
			RegistryKey regkey = Registry.LocalMachine.OpenSubKey(subkey, true);

			try
			{
				if ((regkey != null))
				{

					mode = 2;
					DataEnum(regkey.GetValue("PATH").ToString());
				}

				else
				{

					MessageBox.Show("レジストリが正しく開かれていません");

				}
			}

			catch (Exception ex)
			{

				MessageBox.Show(ex.ToString());

			}

			if ((regkey != null))
			{

				regkey.Close();

			}

		}

		// ********************************************************* 
		// 文字列を ";" で分解して配列にする 
		// ※ 引数は 値渡し 
		// ********************************************************* 
		private void DataEnum(string Path)
		{

			// 区切り文字定義 
			string delimStr = ";";
			char[] delimiter = delimStr.ToCharArray();

			// 配列に分割 
			string[] split = Path.Split(delimiter);

			// ソートはしない( パスの順序に意味がある ) 
			// 表示のみならばソートしても良い 
			// Array.Sort(split, split.GetLowerBound(0), split.Length) 

			LoadGrid(ref split);

		}

		// ********************************************************* 
		// LboxGrid にデータをロード 
		// ※ 引数は 参照渡し 
		// ********************************************************* 
		private void LoadGrid(ref string[] data)
		{

			this.LboxGrid1.Clear();
			// 自動サイズ変更モード 
			this.LboxGrid1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

			foreach (string value in data)
			{

				this.LboxGrid1.AddRow();
				this.LboxGrid1.SetColumnText("PATH", value);

			}

			// 自動サイズ変更の列をユーザが変更できるようにする 
			this.LboxGrid1.AllowResizeColumn(true);

		}


		// ********************************************************* 
		// 更新 
		// ********************************************************* 
		private void 更新_Click(object sender, EventArgs e)
		{ 
	        
			string str = ""; 
			string fld = ""; 
	        
			// LboxGrid の全行を列挙して PATH 環境変数の値を作成する 
			this.LboxGrid1.SetCurrentRow(); 
			while ((this.LboxGrid1.FindNextRow())) { 
	            
				fld = this.LboxGrid1.GetColumnText("PATH"); 
				if (fld == null) { 
					continue; 
				} 
				else { 
					fld = fld.Trim(); 
					if (fld == "") { 
						continue; 
					} 
				} 
	            
				if (str != "") { 
					str += ";";
				}

				str += fld;
	            
			} 
	        
			// 作成された内容の表示 
			MessageBox.Show(str); 
	        
			// レジストリへの書き込み 
			if (mode == 1) { 
				string subkey = "Environment"; 
				RegistryKey regkey = Registry.CurrentUser.OpenSubKey(subkey, true); 
	            
				regkey.SetValue("PATH", str); 
				DataEnum(regkey.GetValue("PATH").ToString()); 
	            
				regkey.Close(); 
			} 
	        
			// レジストリへの書き込み 
			if (mode == 2) { 
				string subkey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
				RegistryKey regkey = Registry.LocalMachine.OpenSubKey(subkey, true); 
	            
				regkey.SetValue("PATH", str); 
				DataEnum(regkey.GetValue("PATH").ToString()); 
	            
				regkey.Close(); 
			} 
	        
		}

	}
}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス