信頼してレジストリエディタを開くページ

  regopen.php



WEB サイトのレジストリについて説明されているページでは、レジストリのパスが書かれてあったりしますが、
その場所を実際にレジストリエディタで開くのは時間がかかりすぎるので、自分のサイトに置いて、保存せずに
そのまま実行します( IE 以外はいったんダウンロードします )

↓ダウンロードで試して、自分のサイトに実装して試してみると良いでしょう




ブラウザでダウンロード

<?
if ( $_POST['target'] != '' ) {
	$rep = trim(str_replace("\\\\","\\", $_POST['target']));
	setcookie("reg", $rep, time()+3600*24*30);

header( "Content-Type: application/octet-stream" );
header( "Content-disposition: attachment; filename=regopen_". uniqid() . ".vbs" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

foreach( $_GET as $Key => $Value ) {
	$_POST[$Key] = $_GET[$Key];
}
foreach( $_POST as $Key => $Value ) {
	$_POST[$Key] = str_replace("\\\\", "\\", $Value );
	$_POST[$Key] = str_replace("\\'", "'", $_POST[$Key] );
	$_POST[$Key] = str_replace("\\\"", "\"", $_POST[$Key] );
}


$vbs = <<<EOD
strParam = "{$rep}"

' レジストリ書き込み用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")

' レジストリエディタが最後に開いていたキーの登録を行います
strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey"
if GetOSVersion() >= 6 then
	strRegPath = "コンピュータ\\" & strParam
else
	strRegPath = "マイ コンピュータ\\" & strParam
end if

' 既に regedit が実行中の場合はいったん終了させます
Set colProcessList = objWMIService.ExecQuery _ 
	("Select * from Win32_Process Where Name = 'regedit.exe'") 
For Each objProcess in colProcessList
	' 最後のウインドウの位置とサイズを保存する為の終わらせ方
	WshShell.AppActivate("レジストリ エディタ")
	Wscript.Sleep(500)
	WshShell.SendKeys ("%{F4}")
	Wscript.Sleep(500)
	' 上記終わらせ方が失敗した時の強制終了
	on error resume next
	objProcess.Terminate() 
	on error goto 0
Next 

WshShell.RegWrite "HKCU\" & strPath, strRegPath, "REG_SZ"

' レジストリエディタを起動します
Call WshShell.Run( "regedit.exe" )
' レジストリエディタが終わるまで待つ場合は以下のようにします
' Call WshShell.Run( "regedit.exe", , True )

REM **********************************************************
REM OS バージョンの取得
REM **********************************************************
Function GetOSVersion()

	Dim colTarget,str,aData,I,nTarget

	Set colTarget = objWMIService.ExecQuery( _
		 "select Version from Win32_OperatingSystem" _
	)
	For Each objRow in colTarget
		str = objRow.Version
	Next

	aData = Split( str, "." )
	For I = 0 to Ubound( aData )
		if I > 1 then
			Exit For
		end if
		if I > 0 then
			nTarget = nTarget & "."
		end if
		nTarget = nTarget & aData(I)
	Next

	GetOSVersion = CDbl( nTarget )

End Function

EOD;

print str_replace("\n","\r\n", $vbs);

}
else {
	header( "Content-Type: text/html" );
	$_COOKIE['reg'] = trim(str_replace("\\\\","\\", $_COOKIE['reg']));
?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>指定した位置でレジストリエディタを開く為のスクリプトをダウンロード</TITLE>
<STYLE type="text/css">
BODY {
	margin: 0;
	font-size: 12px;
}

h1 {
	font-size: 13px;
	border-style: solid;
	border-width: 1px;
	border-color: #9192A3;
	padding: 7px 0px 8px 13px; 
	background: url(http://winofsql.jp/image/h1.png) repeat-x 0px 0px;
}

span {
	color: #000000;
}

</STYLE>
</HEAD>
<BODY>
<FORM
	method="POST"
>
<H1>指定した位置でレジストリエディタを開く為のスクリプトをダウンロードします</H1>
<div style='margin-top:-10px;padding-left:8px;'>
<INPUT
	id="reg"
	type="text"
	name="target"
	style='width:600px;'
	value="<?= $_COOKIE['reg'] ?>"
>
<INPUT
	type="submit"
	name="send"
	value="送信"
>
<br><br>
例: <INPUT
 type="button" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
 onClick='document.getElementById("reg").value=this.value'
 style='width:300px;vertical-align:middle'
>

<script type="text/javascript">
if (window.navigator.userAgent.toLowerCase().indexOf("msie") > -1) {
	var str="";
	str+="<INPUT style='vertical-align:middle' type=button value=\"IE専用貼り付けボタン\" onClick='document.getElementById(\"reg\").value=clipboardData.getData(\"Text\")'> ";
	document.write( str );
}
</script>
<br>
<span>( クリップボードから貼り付けるのが通常です )</span><br>
</div>
</FORM>

</BODY>
</HTML>

<? } ?>







  古いコード



ダウンロード用のファイルをサーバー側に一時的に作成して、後のアクセスで
一定時間経過したファイルを削除していました。

クライアント側のこのコードでは、Windows7( Vista ) で動作しません

<?
if ( $_POST['target'] != '' ) {
	session_start();
	$rep = trim(str_replace("\\\\","\\", $_POST['target']));
	setcookie("reg", $rep, time()+3600*24*30);
	$str = <<<VBS
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
strPath = "Software\\Microsoft\\Windows\\CurrentVersion\\Applets\\Regedit\\LastKey"
strRegPath = "マイ コンピュータ\\$rep"
WshShell.RegWrite "HKCU\\" & strPath, strRegPath, "REG_SZ"

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2")
Set colProcessList = objWMIService.ExecQuery _ 
	("Select * from Win32_Process Where Name = 'regedit.exe'") 
For Each objProcess in colProcessList 
	objProcess.Terminate() 
Next 

Call WshShell.Run( "regedit", , True )
VBS;
$flname = "regopen" . session_id() . ".vbs";
file_put_contents($flname,$str);
header( "Location: $flname" );
}
else {
	header( "Content-Type: text/html" );
	$_COOKIE['reg'] = trim(str_replace("\\\\","\\", $_COOKIE['reg']));
?>
<HTML>
<HEAD>
<META http-equiv="Content-type" content="text/html; charset=shift_jis" />
<TITLE>指定した位置でレジストリエディタを開く為のスクリプトをダウンロード</TITLE>
<STYLE type="text/css">
BODY {
	font-size: 12px;
}
</STYLE>
</HEAD>
<BODY>
<FORM
	method="POST"
>
● 指定した位置でレジストリエディタを開く為のスクリプトをダウンロードします<br>
  レジストリのパスを入力してください。<br>
  例: <INPUT
 type="button" value="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft"
 onClick='document.getElementById("reg").value=this.value'
 style='width:300px;vertical-align:middle'
><br>
  ( クリップボードから貼り付けるのが通常です )<br>
	<INPUT
		id="reg"
		type="text"
		name="target"
		style='width:400px;'
		value="<?= $_COOKIE['reg'] ?>"
	>
	<INPUT
		type="submit"
		name="send"
		value="送信"
	>
</FORM>

↓regopen.lzh ( このファイル ) のダウンロード<br>
<IFRAME
	src="http://lightbox.on.coocan.jp/fileDownload.swf?dir=php%2Fonline%2Fregopen&file=regopen&ext=lzh"
	frameborder="no"
	scrolling="no"
	width="250"
	height="70"
></IFRAME>
<br><br>
※ 自分のサイトに置く場合は IFRAME を削除するとダウンロードコンテンツが削除されます

</BODY>
</HTML>
<?

$DirHandle = @opendir("./");
if ( $DirHandle ) {
	$Target = readdir( $DirHandle );
	while( $Target !== false ) {

		if ( $Target != "." ) {
			$ext = strrchr( $Target, "." );
			$ext = strtolower($ext);
			if ( $ext == ".vbs" ) {
				$astamp = stat($Target);
				$laststamp = $astamp[9];
				if ( $laststamp < time() - 300 ) {
						@unlink($Target);
				}
			}
		}
		$Target = readdir( $DirHandle );

	}
	
	closedir( $DirHandle );
}

}
?>













   SQLの窓    create:2008/07/25  update:2018/02/23   管理者用(要ログイン)





フリーフォントツール

SQLの窓ツール

SQLの窓フリーソフト

写真素材

一般ツールリンク

SQLの窓

フリーソフト

JSライブラリ