SQLの窓

2020年01月29日


.regファイルでレジストリのキーや値を削除

ファイルには、Unicode(UTF-16)で保存して下さい。( レジストリエディタからエクスポートすると、Unicode で出力されます )
※ 経験から言うと、SHIFT_JIS で問題無いようですが

Microsoft のドキュメントはこちらです

たとえば、以下のような .reg ファイルでキーとデータを追加します
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\001]
"data"="abc"

データ型が REG_SZ の場合は、"名前"="値" で記述されます。REG_SZ は通常の文字列で、その他のデータ型の場合は、"名前"="データ型:値" とする必要があり、データ型によって値の記述方法が変わります。

例)
REG_BINARY => "名前"=hex:80,00,00,00,00,00,00,00
REG_DWORD => "名前"=dword:00000000

REG_EXPAND_SZ は、環境変数を % で挟んで記述する事によって、システムが置き換えて使用しますが、値の表現はバイナリと同じで16進数表現になります。但し、データ型としては hex(2) が使用されて、Unicode 文字のバイト表現になっています。

例)
"ServiceControlManagerExtension"=hex(2):25,00,73,00,79,00,73,00,74,00,65,00,6d,\
  00,72,00,6f,00,6f,00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,\
  33,00,32,00,5c,00,73,00,63,00,65,00,78,00,74,00,2e,00,64,00,6c,00,6c,00,00,\
  00

キーの削除と値の削除です
Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\001]



Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\001]
"data"=-




.regファイルで レジストリのキーおよび値の名前の変更

キーまたは値を削除し、新しいキーまたは値を新しい名前で作成します
※ レジストリエディタ(regedit.exe) を使用すれば UI で直接変更する事ができます


このページのPDF



タグ:レジストリ
posted by lightbox at 2020-01-29 13:23 | Windows | このブログの読者になる | 更新情報をチェックする

2020年01月22日


VBScript : IE11のソースエディタの変更

最新の IE11 では、HKEY_CURRENT_USER でしか動作しないようです。





全て VBScript のみで実行しています。ですから、ファイル参照ウインドウの表示が、現在表示しているウインドウに隠れたりする場合があるので注意して下さい。

ieSrcEditor.wsf をエクスプローラから実行すると、ファイルを参照するダイアログが開きます。内部のコードは以下のようになっていますが、必要な関数等はインターネット上に保存して使用しています。ここでは、ローカルのファイルを開いてパスを取得する為に、InternetExplorer.Application を使用しています。

アンインストールは、zip 内の uninstall.reg か 以下のテキストを uninstall.reg として shift_jis か Unicode で保存してエクスプローラから実行します。内部は、Microsoft の仕様によるレジストリエントリの削除記述となっています。ですから、実際削除を行うのは、regedit.exe です。
Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\View Source Editor]


▼ 実行用のソースコードです
<JOB>
<COMMENT>
************************************************************
 WEB WSH 実行スケルトン
************************************************************
</COMMENT>

<COMMENT>
************************************************************
 外部スクリプト定義
************************************************************
</COMMENT>
<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )
Call laylaLoadFunction( "wmiReg.vbs" )
Call laylaLoadFunction( "toolFunction.vbs" )

' **********************************************************
' エディタ選択
' **********************************************************
strValue = OpenLocalFileName
if strValue = "" then
	Wscript.Quit
end if

' **********************************************************
' レジストリ
' **********************************************************
strPath = "SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name"
Call WMIRegCreateKey( HKEY_CURRENT_USER, strPath )
strValue = Dd( strValue )
Call WMIRegSetStringValue( HKEY_CURRENT_USER, strPath, Empty, strValue )

MsgOk( strValue & " を IE のソースエディタとして登録しました" )

Function OpenLocalFileName( )

	Call GetObj( "IEDocument", "InternetExplorer.Application" )
	IEDocument.Navigate( ScriptDir( ) & "\local.htm" )
	IEDocument.document.getElementsByTagName("BODY")(0).innerHTML = "<input id=FilePath type=file>"
	IEDocument.document.getElementById("FilePath").click
	if IEDocument.document.getElementById("FilePath").value = "" then
		OpenLocalFileName = ""
		IEDocument.Quit
		Set IEDocument = Nothing
		Exit Function
	end if

	OpenLocalFileName = IEDocument.document.getElementById("FilePath").value

	IEDocument.Quit
	Set IEDocument = Nothing

End Function
</SCRIPT>
</JOB>



このページの PDF



タグ:ツール IE
posted by lightbox at 2020-01-22 15:00 | IE | このブログの読者になる | 更新情報をチェックする

2020年01月21日


C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する

▼ NuGet パッケージマネージャコンソールより Json.NET をプロジェクト内にインストール
PM> Install-Package Newtonsoft.Json

'.NETFramework,Version=v4.6.1' を対象とするプロジェクト 'ConsoleApp-002' に関して、パッケージ 'Newtonsoft.Json.12.0.3' の依存関係情報の収集を試行しています
依存関係情報の収集に 17.23 ms かかりました
DependencyBehavior 'Lowest' でパッケージ 'Newtonsoft.Json.12.0.3' の依存関係の解決を試行しています
依存関係情報の解決に 0 ms かかりました
パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションを解決しています
パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションが解決されました
'nuget.org' からパッケージ 'Newtonsoft.Json 12.0.3' を取得しています。
  GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg
  OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg 5 ミリ秒
Newtonsoft.Json 12.0.3 をインストールしています。
パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しています
パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しました
パッケージ 'Newtonsoft.Json.12.0.3' を 'packages.config' に追加しました
'Newtonsoft.Json 12.0.3' が ConsoleApp-002 に正常にインストールされました
NuGet の操作の実行に 3.54 sec かかりました
経過した時間: 00:00:04.8406552
※ インストール後 Newtonsoft.Json は参照済で、packages フォルダが作成されてインストールされている。 Available NuGet Distribution Versions
using Newtonsoft.Json;
using System;
using System.Net;
using System.Text;

namespace ConsoleApp_002
{
	class Program
	{
		static void Main(string[] args)
		{
			string json_url = "https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/project/basic-01.json";
			WebClient webClient = new WebClient();
			webClient.Encoding = Encoding.GetEncoding("utf-8");
			string json_text = webClient.DownloadString(json_url);

			Console.WriteLine(json_text);

			// JSON 文字列を一括でクラスのオブシェクトに変換
			MyJson data = JsonConvert.DeserializeObject<MyJson>(json_text);

			Console.WriteLine(data.title);
			Console.WriteLine(data.name);
			Console.WriteLine(data.image);
			Console.WriteLine(data.text);

			Console.ReadLine();
		}

		// ******************************************
		// 一括変換用のクラス
		// ******************************************
		private class MyJson
		{
			public string title { get; set; }
			public string name { get; set; }
			public string image { get; set; }
			public string text { get; set; }
		}
	}
}


このページの PDF



posted by lightbox at 2020-01-21 21:30 | VS(C#) | このブログの読者になる | 更新情報をチェックする

2020年01月20日


C# の文法的文字列処理

文字列補間 の $ はとても便利です。$@ で文章をそのまま解りやすく構築できると思います。

また、文字列補完では、空白文字を埋める機能と書式文字列を同時に使用する事ができます。
{<interpolationExpression>[,<alignment>][:<formatString>]}
※ めったに使う事はありませんが、文字列を[] で位置指定して文字( char ) を取得できます。
using System;
using System.IO;

namespace ConsoleApp_001
{
	class Program
	{
		static void Main(string[] args)
		{
			// 実行中ファイルのパス
			string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
			Console.WriteLine(dir);

			// 部分文字
			Console.WriteLine(dir[2].GetType());
			Console.WriteLine(dir[2]);

			// 逐語的リテラル文字列
string lines = @"
特殊文字を
直接表現
する方法
";
			Console.WriteLine(lines);

			// 文字列補間
			string lines_copy = $"{lines}";
			Console.WriteLine(lines);

			// 文字列補間 + 逐語的リテラル文字列
lines = $@"
{dir}
C:\user\cs\cs20\ConsoleApp-001
";
			Console.WriteLine(lines);

			// 文字列補間幅指定(指定文字数でどちらかに寄せる)
			string ok = "OK";
			string double_5 = $"|{ok,-5}|{ok,5}|";
			Console.WriteLine(double_5);

			// 文字列補間 カンマ編集
			int num = 1234567890;
			string yen = $"{num,20:#,#}";
			Console.WriteLine(yen);

			// 配列
			string[] abc = { "a", "b", "c" };
			foreach( string val in abc )
			{
				Console.WriteLine(val);
			}

			// 実行停止
			Console.ReadLine();
		}
	}
}


実行結果
D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
System.Char
\

特殊文字を
直接表現
する方法


特殊文字を
直接表現
する方法


D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
C:\user\cs\cs20\ConsoleApp-001

|OK   |   OK|
       1,234,567,890
a
b
c
このページの PDF
posted by lightbox at 2020-01-20 20:44 | VS(C#) | このブログの読者になる | 更新情報をチェックする

JDK がインストールされていない PC の XAMPP の TOMCAT を Pleiades の JDK8 で動作させる

catalina_start.bat より、レジストリに 『HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit』が存在する必要があるのが解ります。

さらに、そのキー以降のどこかに JavaHome の値として実際のパスが必要です。

▼ 必要なレジストリエントリ( これを手作業で作成します )
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]

[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"JavaHome"="C:\\pleiades\\java\\8"



catalina_start.bat
@echo off
::::::::::::::::::::::::::::::::::::
::  Set JAVA_HOME and   ::
::::::::::::::::::::::::::::::::::::

IF EXIST tomcat\logs\catalina.pid (
  del /F/Q tomcat\logs\catalina.pid
) 

echo.
echo [XAMPP]: Searching JDK HOME with reg query ...
set KeyName=HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit

reg query "%KeyName%" /s
if %ERRORLEVEL% == 1 (
  echo . [XAMPP]: Cannot find current JDK installation! 
  echo . [XAMPP]: Cannot set JAVA_HOME. Aborting ...
  goto :END
)

set "CURRENT_DIR=%cd%"
set "CATALINA_HOME=%CURRENT_DIR%"

:: only for windows 32 bit if you have problems with the tcnative-1.dll
:: set CATALINA_OPTS=-Djava.library.path="%CATALINA_HOME%\bin"

set Cmd=reg query "%KeyName%" /s
for /f "tokens=2*" %%i in ('%Cmd% ^| find "JavaHome"') do set JAVA_HOME=%%j

echo.
echo [XAMPP]: Seems fine!
echo [XAMPP]: Set JAVA_HOME : %JAVA_HOME%
echo [XAMPP]: Set CATALINA_HOME : %CATALINA_HOME%
echo.

if %ERRORLEVEL% == 0 (
echo run > logs\catalina.pid
)

"%CATALINA_HOME%\bin\catalina.bat" run


:END
echo done.
pause



このページの PDF




posted by lightbox at 2020-01-20 12:10 | java : JSP | このブログの読者になる | 更新情報をチェックする

2020年01月19日


VBScript : Seesaa ブログのエクスポートを呼び出して全てをバックアップするスクリプト

過去何度も作り直してきたのですが、2020年に至って改めて調整しました。要するに『スクレイピング』ですので、Seesaa のフォーマットが変われば調整する必要が出て来ます。

今回、プログID を取得するのに、ブログ一覧画面で『記事を書く』のリンクを取り出します( その中に書かれています )

bk.wsf
<JOB>
<COMMENT>
************************************************************
 EXPORT ( バッチ処理用 )
 Seesaa からブログのバックアップデータを取得する

************************************************************
</COMMENT>

<OBJECT id="objHTTP" progid="Msxml2.ServerXMLHTTP" />
<OBJECT id="Stream" progid="ADODB.Stream" />
<OBJECT id="Fs" progid="Scripting.FileSystemObject" />

<SCRIPT language=VBScript>
' ***********************************************************
' 正規表現用
' ***********************************************************
Set regEx = New RegExp

' ***********************************************************
' タイムアウト用
' ***********************************************************
lResolve = 60 * 1000
lConnect = 60 * 1000
lSend = 60 * 1000
lReceive = 60 * 1000

' ***********************************************************
' 処理開始
' ***********************************************************
Wscript.Sleep(5000)

bDebug = False
target_blog = WScript.Arguments(0)
target_year1 = WScript.Arguments(1)
target_month1 = WScript.Arguments(2)
target_year2 = WScript.Arguments(3)
target_month2 = WScript.Arguments(4)

emailData = "メールアドレス"
passData = "パスワード"
' バックアップしたいブログの ID を指定します
blogData = target_blog

' ログインページの取得
Call objHTTP.Open("GET","https://ssl.seesaa.jp/auth",False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' ページ全体
strPage = objHTTP.responseText

' 投稿用のキーを取得
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "authpost""><input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next


' ***********************************************************
' (1) : POST
' ***********************************************************
' ログイン URL
Call objHTTP.Open("POST","https://ssl.seesaa.jp/auth",False)
' POST 用ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
strData = ""
strData = strData & "aXt=" & strPostKey
strData = strData & "&email=" & emailData
strData = strData & "&password=" & passData
strData = strData & "&return_to=http%3A%2F%2Fblog.seesaa.jp%2F"
Call objHTTP.SetRequestHeader("Content-Length",Len(strData))
Call objHTTP.Send(strData)

strHeaders = objHTTP.getAllResponseHeaders()
if bDebug then
	Wscript.Echo strHeaders
end if

' ***********************************************************
' (2) : GET
' ***********************************************************
' 対象ブログ URL
Call objHTTP.Open("GET","https://blog.seesaa.jp/cms/home/switch?blog_id="& blogData &"&goto=/cms/settings/home/" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

if bDebug then

	Set OutObj = Fs.OpenTextFile( "log.txt", 2, True )
	OutObj.Write objHTTP.responseText
	OutObj.Close

	Wscript.Echo "開始"
end if

' ***********************************************************
' (3) : GET
' ***********************************************************
' エクスポートページ
Call objHTTP.Open("GET","https://blog.seesaa.jp/cms/tools/mt/export/input" , False)
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send()

' 投稿用のキーを取得
strPage = objHTTP.responseText
if bDebug then
	Wscript.Echo strPage
end if
regEx.Pattern = "enctype=""multipart/form-data""><input value=""([^""]+)"""
Set Matches = regEx.Execute( strPage )
For Each Match in Matches
	strPostKey = Match.SubMatches(0)
	Exit For
Next

if bDebug then
	Wscript.Echo strPostKey
end if

' ***********************************************************
' カテゴリ ID リストの取得 ( 2015/02/04 追加 )
' ***********************************************************
regEx.Pattern = "name=""category_id"" value=""([^""]+)"""
regEx.Global = True
Set Matches = regEx.Execute( strPage )

Wscript.Sleep(2000) ' 2秒間の間を置く

' ***********************************************************
' (3) : Export 用データ準備
' ***********************************************************
boundary = DateDiff("s", "1970/1/1 0:00:00",DateAdd("h",-9,now))
h_boundary = "---------------------------" & boundary

' ソース内テキストデータの表示
str = RegTrim(GetResource("myTextData"))
str = Replace( str, "$B", boundary )
str = Replace( str, "$YEAR1", target_year1 )
str = Replace( str, "$MONTH1", target_month1 )
str = Replace( str, "$YEAR2", target_year2 )
str = Replace( str, "$MONTH2", target_month2 )
str = Replace( str, "$AXT", strPostKey )
if bDebug then
	Wscript.Echo str
end if

' ***********************************************************
' カテゴリ ID リストの設定 ( 2015/02/04 追加 )
' ***********************************************************
bFlg = False

For Each Match in Matches
	if bFlg <> False then
		bFlg = True
	else
		str = str & vbCrLf
	end if
	str = str & "Content-Disposition: form-data; name=""category_id""" & vbCrLf & vbCrLf

	if bDebug then
		Wscript.Echo Match.SubMatches(0)
	end if

	str = str & Match.SubMatches(0) & vbCrLf
	str = str & "-----------------------------" & boundary
Next

str = str & "--" & vCrLf

if bDebug then
	Wscript.echo str
end if

' ***********************************************************
' (4) : Export 用データ送信
' ***********************************************************
Call objHTTP.Open( "POST","https://blog.seesaa.jp/cms/tools/mt/export/do_export", False )
' POST 用 HTTP ヘッダ
Call objHTTP.setRequestHeader("Content-Type", "multipart/form-data; boundary=" & h_boundary)
' 念のため
Call objHTTP.setRequestHeader("Referer", "https://blog.seesaa.jp/cms/tools/mt/export/input" )
Call objHTTP.SetRequestHeader("Content-Length",Len(str))
Call objHTTP.setTimeouts(lResolve, lConnect, lSend, lReceive)
Call objHTTP.Send(str)

Stream.Open
Stream.Type = 1 ' バイナリ
Stream.Write objHTTP.responseBody
Stream.SaveToFile "seesaa_" & blogData & "_" & target_year1 & target_month1 & "_" & target_year2 & target_month2 & ".log", 2
Stream.Close   

Wscript.Echo "処理が終了しました:" & target_year1 & target_month1 & "〜" & target_year2 & target_month2

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>

<COMMENT>
************************************************************
 ソース内テキストデータ
************************************************************
</COMMENT>
<RESOURCE id="myTextData">
<![CDATA[
-----------------------------$B
Content-Disposition: form-data; name="aXt"

$AXT
-----------------------------$B
Content-Disposition: form-data; name="encode"

utf8
-----------------------------$B
Content-Disposition: form-data; name="from_year_month"

$YEAR1-$MONTH1
-----------------------------$B
Content-Disposition: form-data; name="to_year_month"

$YEAR2-$MONTH2
-----------------------------$B
Content-Disposition: form-data; name="tags"

1
-----------------------------$B
Content-Disposition: form-data; name="category_id_all"

all
-----------------------------$B
]]>
</RESOURCE>

</JOB>


実行するファイルはバッチファイルで以下のようにしますが、スペースでは無くタブで記述されています。というのは、作成するのに Excel を使うとオートフィルで比較的容易に作成できるからです
cscript.exe bk.wsf	2107032	2009	04	2009	12
cscript.exe bk.wsf	2107032	2010	01	2010	12
cscript.exe bk.wsf	2107032	2011	01	2011	12
cscript.exe bk.wsf	2107032	2012	01	2012	12
cscript.exe bk.wsf	2107032	2013	01	2013	12
cscript.exe bk.wsf	2107032	2014	01	2014	12
cscript.exe bk.wsf	2107032	2015	01	2015	12
cscript.exe bk.wsf	2107032	2016	01	2016	12
cscript.exe bk.wsf	2107032	2017	01	2017	12
cscript.exe bk.wsf	2107032	2018	01	2018	12
cscript.exe bk.wsf	2107032	2019	01	2019	12
cscript.exe bk.wsf	2107032	2020	01	2020	01



このページの PDF



posted by lightbox at 2020-01-19 20:17 | VBS + インターネット | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり