コメント |
[[ユーザー環境変数]]
@DIV
HKEY_CURRENT_USER\Environment
@END
[[システム環境変数]]
@DIV
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
@END
↓ツールボックスに登録して、http://winofsql.jp/enum/dnettlib/frame.htm(LboxGrid) を フォームに貼り付けます
@HTML
<IFRAME
src="http://winofsql.jp/fileDownload.swf?target=http%3A%2F%2Flightbox.on.coocan.jp%2Fdownload%2Flightbox.dll&type=red"
frameborder="no"
scrolling="no"
width="125"
height="90"
></IFRAME>
<a style="FONT-SIZE: 12px; COLOR: #0000ff; TEXT-DECORATION: none" href="http://lightbox.on.coocan.jp/download/lightbox.dll">ブラウザでダウンロード</a>
@HEND
登録は、ツールボックスの「全般」で右クリックして「アイテムの登録」を行います
登録すると、「参照設定」にも登録されると思いますが、もし無ければ登録して下さい
http://lightbox.cocolog-nifty.com/photos/app6/path_edit.png
@C:GREEN(
値を空にすると、その行は削除されます。
行を追加したい場合は、任意の行の最後で ";" を入力してデータを続けます。)
@DIV
' 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
@END
http://support.microsoft.com/kb/104011/ja(環境変数の変更をシステムに通知する方法 : Microsoft サポートオンライン)
http://lightbox.matrix.jp/ginpro/patio.cgi?mode=view2&f=232&no=1&type=ref&opt=text-align:left;margin-left:5px;&xml=y(C#はこちら : 古いバージョンです)
↓プロジェクトが使える方はこちら( LboxGrid[lightbox.dll] 同梱 )
http://lightbox.on.coocan.jp/download/PATH_EDITOR.lzh |