SQLの窓

2018年12月28日


ドメイン内 Google 検索 : 表示しているサイトで Google 検索を実行するブックマークレット

site:ドメインの 検索を呼び出します

※ Google ヘルプ : ウェブ検索の精度を高める( この中の『 特定のサイトを検索する』 )

最近は、セキュリティに厳密になったサイトが増えたので、そのページに埋め込む事ができなくなりつつあります。なので、windows.prompt で検索文字列を入力させて直接 Google を呼び出すようにしました。

※ 旧式の ページに IFRAME を埋め込むバージョンはこちらから





このブログの記事単体ページで実行すると、以下のようになります
PowerShell site:logicalerror.seesaa.net/article
一番最後の /(スラッシュ) を取り去った状態で、その階層内の検索をする為のの文字列になります ドメイン内 検索 ▼ リンク内コード
<a style='margin-left:60px;' href='javascript:var%20u=(document.URL).replace(/^http(s)?:\/\//g,"");var%20p=u.lastIndexOf("/");var%20u=u.substr(0,p);var%20a=prompt("検索文字列を入力してください","");if(a!=""&&a!=null){a=encodeURIComponent(a);a=a.replace("\u0025\u0032\u0030","+");a="https://www.google.co.jp/search?q="+a+"+site:"+u;window.open(a);}void(0);' onclick=" 
		alert('ブックマークバーまたは、お気に入りバーにドラッグドロップが簡単です'); 
		if (window.navigator.appName.toLowerCase().indexOf('microsoft') > -1) { 
			event.returnValue = false; 
		} 
		event.preventDefault(); 
		event.stopPropagation();
	">ドメイン内 検索</a>

▼ 実行内容を整理
// ********************************************
// 現在の URL から http:// または https:// を取り去ります
// ********************************************
va u = (document.URL).replace(/^http(s)?:\/\//g,"")

// ********************************************
// 最後の / の位置を取得します
// ********************************************
var p = u.lastIndexOf("/");

// ********************************************
// 元の文字列より、最後の / 以降を取り去ります
// ********************************************
var u = u.substr(0,p);

// ********************************************
// prompt で入力文字列を取得します
// ********************************************
var a = prompt("検索文字列を入力してください","");

// ********************************************
// 未入力時と、キャンセル時は何もしません
// ********************************************
if( a! = "" && a != null ) {
	// ********************************************
	// % エンコーディング
	// ********************************************
	a = encodeURIComponent(a);

	// ********************************************
	// encodeURIComponent では 空白は %20
	// 仕様に合わせて、空白は + 文字に変更
	// \u0025\u0032\u0030 は %20
	// ブックマークで %20 はスペースになるので
	// Unicode で指定
	// ********************************************
	a.replace("\u0025\u0032\u0030","+");

	// ********************************************
	// Google 用の検索用の URL を作成
	// ********************************************
	a = "https://www.google.co.jp/search?q="+a+"+site:"+u;

	// ********************************************
	// URL を開く
	// ********************************************
	window.open(a);
}

// ********************************************
// ※ お約束
// このブックマークレットでは必要無いですが
// ( 対話ウインドウが表示されるので )
// 通常はこれを最後に書いておくといいです
// ********************************************
void(0);



posted by lightbox at 2018-12-28 08:23 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

2018年12月26日


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>






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

IE11 から VBScript で ODBCで使用されるデータベース(例えばSQLServer) より Excel でデータをエクスポートする

Microsoft.Jet.OLEDB.4.0 を使用したいので、IE11 を 32 ビットで動作させる事が必要です。Access も Excel も古い拡張子を使用していますが、基本的に昔の処理ですし、Microsoft に邪魔されたく無い( 何勝手にするか解らない )ので、そうしています。

エクスポート用の SQL を使用する為に、接続は Access で行って、Access 内で可能な参照方法(修飾のようなもの)を用いて、SQLServer と Excel に動的にアクセスしています。

IE11 を 32 ビットで動作させる

通常、IE11 は 32ビットで動作しているはずですが、確認の為にF12 キーで開発者ツールを表示させて、コンソールタブに移動します。次に、navigator.userAgent と入力して表示された文字列の中に WOW64 の文字列があれば、32ビットで動作しています。

もし無ければ、64ビットで動作しているので、『インターネットオプション』の『詳細設定』のセキュリティで、【拡張保護モードで 64 ビット プロセッサを有効にする】と【拡張保護モードを有効にする】のチェックを外します。

※ 拡張保護モードに関する詳細は、Microsoft のこちら( E10 & IE11 : 拡張保護モードの実態 )から参照できます。

実行する URL を信頼するサイトに登録



レベルのカスタマイズで、『スクリプトを実行しても安全だとマークされていないActiveX コントロール』を『有効』 にして、『ドメイン間のデータソースのアクセス』も有効にします
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2]
"1201"=dword:00000000
"1406"=dword:00000000


※ 関連する Microsoft ドキュメント(上級ユーザー向けの Internet Explorer セキュリティ ゾーン関連のレジストリ エントリ)
※ IEのセキュリティゾーン関連のレジストリエントリ


IE11 を IE10 として実行してエクスポート
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10">
<meta http-equiv="Content-type" content="text/html; charset=shift_jis">
<script language="VBScript">

' ***********************
' 必要なオブジェクト作成
' ***********************
on error resume next

' ファイル削除用
Set Fso = CreateObject( "Scripting.FileSystemObject" )
if Err.Number <> 0 then
	alert("Fso:"&Err.Description)
end if

' エクスポート実行用
Set Cn = CreateObject( "ADODB.Connection" )
if Err.Number <> 0 then
	alert("Cn:"&Err.Description)
end if
Cn.CursorLocation = 3

' ダミー Access 作成用
Set Adox = CreateObject( "ADOX.Catalog" )
if Err.Number <> 0 then
	alert("Adox:"&Err.Description)
end if

' ディレクトリ参照と OS パス取得用
Set Shell = CreateObject( "Shell.Application" )
if Err.Number <> 0 then
	alert("Shell:"&Err.Description)
end if
on error goto 0

Function Export()

	' ***********************
	' 2回目の実行
	' ***********************
	if Cn is nothing then
		Set Cn = CreateObject( "ADODB.Connection" )
		Cn.CursorLocation = 3
	end if

	' ***********************
	' 実行確認
	' ***********************
	if not confirm( "エクスポートを実行しますか?" ) then
		Exit Function
	end if

	Dim obj

	' ***********************
	' ディレクトリ選択
	' フラグは https://docs.microsoft.com/ja-jp/windows/desktop/api/shlobj_core/ns-shlobj_core-_browseinfoa
	' ***********************
	on error resume next 
	Set obj = Shell.BrowseForFolder( 0, "出力先のディレクトリを選択して下さい", 11+&H40, 0 )
	if Err.Number <> 0 then
		alert(Err.Description)
	end if
	on error goto 0

	' ***********************
	' キャンセル
	' ***********************
	if obj is nothing then
		Exit Function
	end if

	' ***********************
	' 一応チェック
	' ※ フラグ使用しているので必要無いはず
	' ***********************
	if not obj.Self.IsFileSystem then
		alert( "ファイルシステムではありません" )
		Exit Function
	end if

	' ***********************
	' 選択してフォルダのパス
	' ***********************
	SelectDir = obj.Self.Path

	' ***********************
	' ダミー用のパス
	' C:\Users\lightbox\AppData\Temp\dummy.mdb
	' ***********************
	Set objFolder = Shell.Namespace(&H1c)
	Set objFolderItem = objFolder.Self
	strPath = objFolderItem.Path & "\Temp\dummy.mdb"

	' ***********************
	' 既存のダミー削除
	' ***********************
	on error resume next 
	Fso.DeleteFile(strPath)
	on error goto 0

	' ***********************
	' 出力 Excel 削除
	' ***********************
	on error resume next 
	Fso.DeleteFile(SelectDir & "\Export.xls")
	on error goto 0

	' ***********************
	' ダミー用 mdb 作成
	' ***********************
	on error resume next
	Adox.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & strPath & ";"
	if Err.Number <> 0 then
		alert(strPath & " : " & Err.Description)
	end if
	on error goto 0

	' ***********************
	' MDB 接続用文字列
	' ***********************
	ConnectionString = _
		"Provider=Microsoft.Jet.OLEDB.4.0;" & _
		"Data Source=" & strPath & ";"

	on error resume next
	Cn.Open ConnectionString
	if Err.Number <> 0 then
		alert(ConnectionString & " : " & Err.Description)
		Exit Function
	end if
	on error goto 0

	' ***********************
	' エクスポート用 SQL
	' ***********************
	Query = "select * "
	Query = Query & "into [Excel 8.0;DATABASE=" & SelectDir & "\Export.xls].[出力データ] "
	Query = Query & " from [ODBC;Driver={SQL Server};SERVER=サーバ;Database=データベース;UID=sa;PWD=パスワード].テーブル名"

	on error resume next
	Cn.Execute Query
	if Err.Number <> 0 then
		Call Cn.Close()
		alert(Err.Description)
		Exit Function
	end if
	on error goto 0

	alert("処理が終了しました")

	Call Cn.Close()

	Set Cn = Nothing

End Function

</script>
</head>
<body>
<input id="export" type="button" value="エクスポート" language="VBScript" onclick="Call Export()">
</body>
</html>


本当は、このページを window.open で開けて、終了したら close させます。そうすれば、dummy.mdb がアプリケーションから解放されます。


補足

Windows7 で実際に運用しているコードです。Windows10 に完全対応する為に、今回コードを整備して Windows10 でテストを行いました。この次の段階としては、VBScript やめて JScript で書いて処理します( そうすると、jQuery 使えますし )





posted by lightbox at 2018-12-26 14:36 | IE | このブログの読者になる | 更新情報をチェックする

2018年12月21日


VBScript : Excel.Application でファイルを複数選択する

VBScript で使用可能な Windows の標準のオブジェクトだけではファイルの参照ダイアログを使え無いので、Excel.Application を使うのが比較的近道です。( Excel がインストールされている環境 )

ここでは、複数のファイルを選択して配列内にあるパスをループで参照しています。

Application.GetOpenFilename メソッド (Excel)
' ****************************
' Excel オブジェクト作成
' ****************************
Set App = CreateObject("Excel.Application")

' ****************************
' 警告を出さないようにする
' ****************************
App.DisplayAlerts = False

' ****************************
' ファイル参照( 複数 )
' ▼ 1ファイル選択では、戻り値は文字列で、キャンセルだと False
' Path = App.GetOpenFilename("テキストファイル,*.txt,全て,*.*", , "ファイルを選択して下さい")
' ****************************
Path = App.GetOpenFilename("テキストファイル,*.txt,全て,*.*", , "ファイルを選択して下さい", , True )

' ****************************
' キャンセルで終了
' ****************************
if not IsArray( Path ) then
	Wscript.Quit
end if

' ****************************
' 選択したパスを表示
' ****************************
For I = 1 to Ubound( Path )
	MsgBox( Path( I ) )
Next

' ****************************
' Excel をアプリケーションとして終了
' ****************************
App.Quit()

' ****************************
' Excel を VBScript から開放
' ****************************
Set App = Nothing

' ****************************
' オブジェクト変数を初期化
' ( 初期化しないとオブジェクト扱いされる )
' ****************************
App = Empty


MsgBox( "処理が終了しました" )




posted by lightbox at 2018-12-21 17:20 | VBS + オブジェクト | このブログの読者になる | 更新情報をチェックする

jQuery UI のタブを使用時に、前回開いたタブを localStorage に保存して、次回の表示に使用する

タブやアコーディオンや、限られた視野の範囲で効率良く表示するコンテンツは、最後に表示したものを記憶しておくのが良いと思います。
物事を始めたり終えたりするのに、適当な時機

1 本人が悪いことでないと確信してなされる犯罪

2 《1から転じて》悪いことだとわかっていながら行われた犯罪や行為

◆犯罪というほど重大な行為でない場合にも用いる。2 の意はもともと誤用とされていたが、文化庁が発表した平成14年度「国語に関する世論調査」では、50パーセント以上の人が 1 ではなく 2 の意で用いると回答した。

【徐に】落ち着いて、ゆっくりと行動するさま
<script>
$(function() {
	var target_tab = 0;
	if ( typeof(localStorage["old_active"]) != 'undefined' ) {
		target_tab = localStorage["old_active"];
	}
	$( "#mytabs" ).tabs({
		active: target_tab,
		activate: function( event, ui ) {
			localStorage["old_active"] = $( this ).tabs( "option", "active" );
		}
	});
});
</script>

<div id="mytabs">

	<ul>
		<li><a href="#tabs-1">潮時</a></li>
		<li><a href="#tabs-2">確信犯</a></li>
		<li><a href="#tabs-3">おもむろに</a></li>
	</ul>
	<div id="tabs-1">
物事を始めたり終えたりするのに、適当な時機
	</div>
	<div id="tabs-2">
<p>1 本人が悪いことでないと確信してなされる犯罪</p>
<p>2 《1から転じて》悪いことだとわかっていながら行われた犯罪や行為</p>
<p>◆犯罪というほど重大な行為でない場合にも用いる。2 の意はもともと誤用とされていたが、文化庁が発表した平成14年度「国語に関する世論調査」では、50パーセント以上の人が 1 ではなく 2 の意で用いると回答した。</p>
	</div>
	<div id="tabs-3">
【徐に】落ち着いて、ゆっくりと行動するさま
	</div>
</div>
jQuery 部分は全て Google のホスティングを使用しています。




posted by lightbox at 2018-12-21 14:32 | jQuery UI | このブログの読者になる | 更新情報をチェックする

指定した位置でレジストリエディタを開く為の VBScript をダウンロードします

コンボボックスにいくつかサンプルを用意しています。入力フィールドに直接セットしてもいいですし、いったんダウンロードしたソースの先頭のパスを変更しても OK です。

理屈としては、regedit は、終了する時に表示していたパスをレジストリに保存しており、その場所に書き込む事によって regedit を起動した時に好きな場所が表示されるようにしています。

▼ 保存場所
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey
※ IE11 ソースエディタは、インターネットオプションのプログラムでメモ帳を選択してからアクセスします


▼ 一度ダウンロードしたソースコードの先頭の strParam にレジストリのパスを設定するだけで使えます
strParam = "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI"

' レジストリ書き込み用
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





posted by lightbox at 2018-12-21 13:43 | VBScript | このブログの読者になる | 更新情報をチェックする
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 終わり