SQLの窓

2019年01月09日


VBScript のコードを書いた HTML を IEのツールメニューにアドオンする



IE拡張メニューとほぼ近いものですが、現在表示されているページ全体に対して「何かをする」という機能に合っています。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Extensions\{7D4A0D6B-9722-4106-8D10-6E3684F04594}]
"CLSID"="{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}"
"MenuText"="テストメニュー"
"MenuStatusBar"="ステータスバーに表示される文字列"
"Script"="C:\\TEMP\\menuex_location.html"



(HKEY_CURRENT_USER にするとユーザ単位です)
<SCRIPT language="VBScript">

	on error resume next
	' *************************************************
	' URLの表示
	' *************************************************
	str = external.menuArguments.document.URL
	if Err.Number <> 0 then
		str = "URL を取得できませんでした"
	else
		' 取得できたらクリップボードにセット
		Call window.clipboardData.setData("Text",str)
	end if
	on error goto 0

	alert(str)

</SCRIPT>

これはあくまでサンプルなので、レジストリをインポートした後、C:\TEMP\menuex_location.html を作成して上記 VBScript のコードを書き込む必要があります

※ 7D4A0D6B-9722-4106-8D10-6E3684F04594 は、任意のGUID なので、WSH : GUID取得 で個別に作成します

※ 以下のコマンドを実行するとクリップボードに GUID を取得できます
cmd /c echo Set TypeLib=CreateObject("Scriptlet.TypeLib"):Wscript.echo TypeLib.Guid>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs | clip

Adding Menu Items にこれらの設定に関する仕様があります(英文)

Exec エントリを使用すると実行ファイルを使用可能です 


▼ アドオンの管理で確認できます





posted by lightbox at 2019-01-09 16:34 | IE | このブログの読者になる | 更新情報をチェックする

2019年01月08日


WordPress の リダイレクト用のコードを作成する PHP / パーマリンクが数字だけだったので、投稿名を追加してから

記事数が40記事程度で少なかったので、パーマリンク設定を

/%year%%monthnum%%day%-%post_id%.html

から

/%postname%-%year%%monthnum%%day%-%post_id%.html

に変更して、タイトルを Google で翻訳してパーマリンクを編集してから以下のコードで .htaccess 用のリダイレクトコードを作成しました

参考 : How to Get a List of All WordPress Post URLs
<?php

include "wp-load.php";

// posts_per_page=-1 は全件
//$query_result = new WP_Query('post_type=any&posts_per_page=-1&post_status=publish');

// 通常記事のみ
$query_result = new WP_Query('post_type=post&posts_per_page=-1&post_status=publish');
$all_posts = $query_result->posts;

header('Content-type:text/plain');

foreach($all_posts as $post) {

	switch ($post->post_type) {

		// 関係の無いエントリ
		case 'revision':
		case 'nav_menu_item':
			break;

		// 固定ページ
		case 'page':
			$permalink = get_page_link($post->ID);
			break;

		// 通常記事
		case 'post':
			$permalink = get_permalink($post->ID);
			break;

		// 添付ファイル
		case 'attachment':
			$permalink = get_attachment_link($post->ID);
			break;

		// 独自投稿タイプ / その他
		default:
			$permalink = get_post_permalink($post->ID);
			break;
	}

	$pattern = '/https:\/\/.+-(\d+)-(\d+).html/';

	$replacement = 'Redirect 301 /lightbox/$1-$2.html';

	print "\n" . preg_replace($pattern, $replacement, $permalink) . " " . $permalink;
}
?>




posted by lightbox at 2019-01-08 19:07 | WEBサービス | このブログの読者になる | 更新情報をチェックする

2019年01月07日


IE拡張 : リンク下の情報を取得してクリップボードへコピー


インストールは AppData\Roaming\laylaClass に行われます。
アンインストールは、同梱の uninstall.reg をエクスプローラからダブルクリックして下さい

上記 .reg でレジストリより削除します。
実行ファイル(anchor_url.htm)は、AppData\Roaming\laylaClass\menuex 内より削除して下さい。
※ 実行ファイル(anchor_url.htm)は、削除しなくても Windows には影響ありません)
IE拡張メニューです。 ページ上で右クリックして表示されるポップアップメニューから起動される IE 専用アプリケーションです。 ▼一例▼ Ieex_menu
画像、テキストリンク兼用です。

通常は、リンクされている部分の URL を取得します

<a href="url">タイトル</a>
<a href="url"><img src="url"></a>

※ 画像のみの場合は、画像の URL を取得
<img src="url">

SHIFT キーを押しながらだとリンクの HTML を全て取得します

<a href="url"><b>タイトル</b></a>

CTRL キーを押しながらだと現在のA要素のHTMLを全て取得します

<a href="url"><b>タイトル</b></a>

<JOB>
<COMMENT>
************************************************************
IE 拡張メニューインストーラ

■アンカー下 URL 取得

テキストリンクと画像専用です。

通常は、リンクされている部分の URL を取得し、
SHIFT キーを押しながらだとリンクの内側を取得します
CTRL キーを押しながらだと、現在の A 要素の内部の情報を全て取得します

■著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
************************************************************
</COMMENT>

<SCRIPT
	language="VBScript"
	src="http://lightbox.in.coocan.jp/laylaClass.vbs">
</SCRIPT>

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
Call laylaFunctionTarget( "http://lightbox.in.coocan.jp/" )
Call laylaLoadFunction( "baseFunction.vbs" )

' //////////////////////////////////////////////////////////
' インストール時の表示名
strProgName	= "リンクのURL"
' インストールファイル名( 拡張子は .htm となる )
strProgFile	= "anchor_url"
' メニューとウインドウのタイトルに表示する文字列
' レジストリに登録するのでユニークである必要があります
strRegName	= strProgName
' 対象となるコンンテンツ
nTargetType 	= &H22
' &H3F : UNKNOWNを除く全て
' &H1  : DEFAULT
' &H2  : IMAGE
' &H4  : CONTROL
' &H8  : TABLE
' &H10 : TEXTSELECT
' &H20 : ANCHOR
' &H40 : UNKNOWN

' 画面ありかどうか
bIsGUI = False
' //////////////////////////////////////////////////////////



' Csript.exe で実行を強制
Crun

print strProgName & " をインストールします"
if not OkCancel( "インストールしてもよろしいですか?" ) then
	Wscript.Quit
end if

' ファイルシステムオブジェクト作成
GetFso

' 問題をできるだけ避ける為にc ドライブ固定(必要ならばここを変更)
strPath =  GetShellDir( &h1a )
strInstallPath1 = strPath & "\laylaClass"
strInstallPath2 = strInstallPath1 & "\menuex"
strInstallPath3 = strInstallPath2 & "\" & strProgFile & ".htm"
on error resume next
if not Fso.FolderExists( strInstallPath1 ) then
	Call Fso.CreateFolder( strInstallPath1 )
	if Err.Number <> 0 then
		ErrorFlg = True
	end if
end if
if not Fso.FolderExists( strInstallPath2 ) then
	Call Fso.CreateFolder( strInstallPath2 )
	if Err.Number <> 0 then
		ErrorFlg = True
	end if
end if
on error goto 0

Call PutTextFile( strInstallPath3, _
Replace(GetInline("MenuExt"),"$REGNAME", strRegName ) )

' レジストリ処理用オブジェクト作成
GetWshShell

on error resume next
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\", _
	strInstallPath3, _
	"REG_SZ"
WshShell.RegWrite _
	"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Contexts", _
	nTargetType, _
	"REG_DWORD"

if bIsGUI then
	' この定義があると、画面あり
	WshShell.RegWrite _
		"HKCU\Software\Microsoft\Internet Explorer\MenuExt\"&strRegName&"\Flags", _
		&H1, _
		"REG_DWORD"
end if
on error goto 0

print "処理が終了しました"
print ""

Wscript.Quit

</SCRIPT>

<COMMENT>
******** ●ここを変更● ********
</COMMENT>
<RESOURCE id="MenuExt">
<![CDATA[
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<SCRIPT language="VBScript">

	Dim WshShell,RegName,strLocation,obj,doc

	Set WshShell = CreateObject("WScript.Shell")
	RegName = "$REGNAME"

	' *************************************************
	' ウインドウサイズ
	' *************************************************
'	window.dialogWidth = "900px"
'	window.dialogHeight = "610px"

'	window.dialogTop = "100px"
'	window.dialogLeft = (window.screen.width/2)&"px"

	on error resume next
	ExecuteGlobal "function dummy(): end function"
	on error goto 0

	' SHIFTとCTRL用変数
	Dim keyflg1,keyflg2
	keyflg1 = False
	keyflg2 = False

Function setObj( src )
	Set obj = src
End Function
</SCRIPT>

<SCRIPT language="JavaScript">
setObj(external.menuArguments.event.srcElement);
</SCRIPT>
<html>
<head>
<title>$REGNAME</title>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<base target="_self">
</head>
<BODY>
<!--SHIFTとCTRLがおされているかどうかを取得するボタン-->
<INPUT id="btn" type=button onClick='keyflg1=window.event.shiftKey:keyflg2=window.event.ctrlKey'>
</BODY>
</html>
<SCRIPT language="VBScript">

	' ボタンの呼び出し
	document.getElementById("btn").click()

	on error resume next
	' *************************************************
	' 画像とアンカーの処理( レジストリ 0x22 )
	' obj は、カーソル下のオブジェクト
	' *************************************************
	Dim fobj
	Set fobj = obj
	tag = obj.tagName
	if Err.Number <> 0 then
		str = "カーソル下のオブジェクトを取得できませんでした"
	else

		tag = Ucase( tag )
		' *************************************************
		' リンクの場合
		' *************************************************
		if tag = "A" then

			if keyflg1 then
				stra = obj.innerHTML
			else
				if keyflg2 then
					stra = obj.outerHTML
				else 
					stra = obj.href
				end if
			end if 

			Call window.clipboardData.setData("Text", stra )
			str = stra

		end if

		' *************************************************
		' 画像の場合
		' *************************************************
		if tag = "IMG" then

			Dim nCnt
			nCnt = 0
			Do While True
				stra = Ucase(obj.parentElement.tagName)
				if stra = "BODY" then
					stra = fobj.src
					Exit Do
				end if
				if stra = "A" then
					if keyflg1 then
						stra = obj.parentElement.innerHTML
					else
						if keyflg2 then
							stra = obj.parentElement.outerHTML
						else 
							stra = obj.parentElement.href
						end if
					end if 
					Exit Do
				end if
				Set obj = obj.parentElement
				nCnt = nCnt + 1
				if nCnt > 100 then
					alert("階層が深すぎます   ")
					Exit Do
				end if
			Loop

			Call window.clipboardData.setData("Text", stra )
			str = stra

		end if

	end if
	on error goto 0

	alert(str)


</SCRIPT>
]]>
</RESOURCE>

</JOB>





posted by lightbox at 2019-01-07 14:54 | IE拡張メニュー | このブログの読者になる | 更新情報をチェックする

2019年01月05日


Seesaa ブログの『カテゴリ』をソートするブックマークレット

▼ ブックマークバーにドラッグ&ドロップして登録して下さい
Seesaaカテゴリソート

iframe をページ内に作成して、その中で JavaScript を読み込んで、parent を操作するという方法です。



以下が読み込まれた JavaScript です( https://winofsql.jp/seesaa_cat_sort.js )。
var doc = parent.document;
var colTable = doc.getElementsByTagName("TABLE");
var len = colTable.length;
var objTable,colInput,colINum
for( var i = 0; i < len; i++ ) {

	objTable = colTable[i];

	if ( objTable.className == "list-table" ) {
		colInput = objTable.getElementsByTagName("A");
		colINum = objTable.getElementsByTagName("INPUT");
	}

}

len = colInput.length;
len = len / 2;
var cname1 = Array();
var cname2 = Array();
for( var i = 0; i < len; i++ ) {
	cname1.push((colInput[i*2].firstChild.nodeValue).toUpperCase());
	cname2.push((colInput[i*2].firstChild.nodeValue).toUpperCase());
}

cname2.sort();

len = cname2.length;
var base_i;
for( var i = 0; i < len; i++ ) {
	base_i = cname1.indexOf(cname2[i]);
	colINum[base_i].value = (i*10)+100;
}

一度登録したら二度目は登録済のものを使うようにコードを書いているので、解っていれば無駄なコードが殆どです。必要なのは、iframe を作成してその中にコードを document.write しているところです。
<a href='javascript:if(window[window.location.hostname+".loadSeesaaCatSort"]!==true){window[window.location.hostname+".loadSeesaaCatSort"]=true;(function(){var%20wnd=document.createElement("iframe");with%20(wnd){with%20(style){display="none";}}document.body.appendChild(wnd);wnd.contentWindow.document.write("<"+"script src=\"https://winofsql.jp/seesaa_cat_sort.js\"></"+"script>");wnd.contentWindow.document.close();})();}void(0);'>Seesaaカテゴリソート</a>
▼ 整形した元の状態
if ( window[window.location.hostname+".loadSeesaaCatSort"] !== true ) {
	window[window.location.hostname+".loadSeesaaCatSort"] = true;
	(function() {
		var wnd = document.createElement("iframe");
		with (wnd){
			with (style){
				display = "none";
			}
		}
		document.body.appendChild(wnd);
		wnd.contentWindow.document.write("<"+"script src=\"http://winofsql.jp/seesaa_cat_sort.js\"></"+"script>");
		wnd.contentWindow.document.close();
	})();
}

関連する記事

Seesaa(またはさくらのブログ) の『コメント・公開設定・広告の表示・カテゴリ』を一括変更するブックマークレット




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

Google Chrome でイラストAC のタグをコピー可能にするブックマークレット

イラストAC の詳細ページにはタグの一覧がありますが、ここは css の user-select が none になっているので選択できません。この user-select を all にすると、右クリックだけで全て選択されてコピーのメニューが使用可能です。

ブックマークレットが無くても、F12 のデペロッパーツールで該当部分の css を 変更すれば同じ事です。




javascript:document.getElementsByClassName('image-tags')[0].style.userSelect='all';void(0)




posted by lightbox at 2019-01-05 15:36 | ブックマークレット | このブログの読者になる | 更新情報をチェックする

選択した文字列を Google 翻訳で翻訳するブックマークレット( 選択が無い場合はページごと翻訳 ) / 3年半でだいぶ結果が変わってます

選択した文字列を新しいウインドウに Google 翻訳を開いて翻訳完了状態にします。選択が無い場合は、同じく Google 翻訳でページ全体を翻訳します。


▼ 冒頭の文章を選択して訳してみました( 2015-06-19 )
Open the Google translated the selected string to a new window and the translation is complete state. If the selection is not, it will translate the entire page in the same Google translation.
▼ 冒頭の文章を3年半ぶりに選択して訳してみました( 2019-01-05 )
Open the Google Translate into the new window and place the selected character string in the translation completion state. If there is no choice, we also translate the whole page with Google Translate.
ブックマークレットに関する記事




posted by lightbox at 2019-01-05 14:59 | ブックマークレット | このブログの読者になる | 更新情報をチェックする
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 終わり