SQLの窓 イラストAC フリー素材

2013年07月26日

IE拡張メニューで取得したテキストをメールで送る(CDO.Message版)

かなり前に作ったものなので、IEの仕様変更が理由で動かなくなっていた部分がありました。今回修正とともに、Gmail に最適化しました。


ダウンロード

Gmail を基本にデフォルト表示していますが、SSL/465 でクライアント設定できるメールサービスなら使えるはずです。

パスワードをソースに埋め込む事になるので、自宅でのみの使用が推奨されます。

内容を変更したい場合は、再度インストールを行います。

  1) カーソル下のテキストを取得します
  2) 選択状態のテキストがあれば、それを取得します
  3) リンクの場合は、テキストと URL を取得します
  4) HTML タグによっては( PRE など ) その範囲内のテキスト
    を取得します
<JOB>
<COMMENT>
************************************************************
IE 拡張メニューインストーラ

■カーソル下のテキストを CDO.Message でメール送信

   CDO.Message は、Windows 標準のメール用コンポーネントです

  インストール時に以下の情報を入力する必要があります。
  ( 何度でもインストールしなおせます )
  一度インストールしたら、直接
  C:\laylaClass\menuex\send_mail_text_CDOMessage.wsf
  を変更しても同じです

  1) ホスト名(またはIPアドレス)
  2) 宛先
  3) 差出人
  4) メールのタイトル

------------------------------------------------------------

  1) カーソル下のテキストを取得します
  2) 選択状態のテキストがあれば、それを取得します
  3) リンクの場合は、テキストと URL を取得します
  4) HTML タグによっては( PRE など ) その範囲内のテキスト
    を取得します

■著作権その他

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

<SCRIPT
	language="VBScript"
	src="http://homepage2.nifty.com/lightbox/laylaClass.vbs">
</SCRIPT>

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



' //////////////////////////////////////////////////////////
' インストール時の表示名
strProgName	= "ブラウザの情報をメール(CDO.Message)で送る"
' インストールファイル名( 拡張子は .htm となる )
strProgFile	= "send_mail_text_CDOMessage"

' メニューとウインドウのタイトルに表示する文字列
' レジストリに登録するのでユニークである必要があります
strRegName	= "−★ブラウザの情報をメール(CDO.Message)で送る"
' 対象となるコンンテンツ
nTargetType 	= &H3F
' &H3F : UNKNOWNを除く全て
' &H1  : DEFAULT
' &H2  : IMAGE
' &H4  : CONTROL
' &H8  : TABLE
' &H10 : TEXTSELECT
' &H20 : ANCHOR
' &H40 : UNKNOWN

' 画面ありがどうか
bIsGUI = True
' //////////////////////////////////////////////////////////



' Csript.exe で実行を強制
' Crun

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

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

strInstallPath1 = "c:\laylaClass"
strInstallPath2 = "c:\laylaClass\menuex"
strInstallPath3 = "c:\laylaClass\menuex\" & strProgFile & ".htm"

SMTPServer = InputBox( "SMTPサーバー", strProgName, "smtp.gmail.com:465" )
MailTo = InputBox( "宛先", strProgName )
MailFrom = InputBox( "差出人", strProgName, "username@gmail.com:username:パスワード" )
MailSubject = InputBox( "Subject(固定)",strProgName, "ブラウザのデータ" )

' ******** ●ここを変更● ********
strHtml = GetInline("MenuExt")
strHtml = Replace( strHtml, "$REGNAME", strRegName )
strHtml = Replace( strHtml, "$SMTPServer", SMTPServer )
strHtml = Replace( strHtml, "$MailTo", MailTo )
strHtml = Replace( strHtml, "$MailFrom", MailFrom )
strHtml = Replace( strHtml, "$MailSubject", MailSubject )
Call PutTextFile( strInstallPath3, strHtml )

' レジストリ処理用オブジェクト作成
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 "処理が終了しました"

Wscript.Quit

</SCRIPT>

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

	SMTPServer	= "$SMTPServer"
	MailTo		= "$MailTo"
	MailFrom	= "$MailFrom"
	MailSubject	= "$MailSubject"

	Dim WshShell,RegName,strLocation,obj,doc

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

	' *************************************************
	' ウインドウサイズ
	' *************************************************
	window.dialogWidth = "800px"
	window.dialogHeight = "600px"

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

	strLocation = external.menuArguments.document.URL

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

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">
<STYLE type="text/css">
* {
	font-size:12px;
}
body {
	margin:0;
}
</STYLE>

<SCRIPT language="VBScript">

	' 関数定義用
Function SendMailCDOMessage()

	Dim Cdo

	Set Cdo = CreateObject("CDO.Message")

	aAuth = Split( MailFrom, ":" )
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/sendusername") = aAuth(1)
	Cdo.Configuration.Fields.Item _ 
	 ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = aAuth(2)

	Cdo.From = aAuth(0)

	Cdo.To		= MailTo
	Cdo.Subject	= MailSubject
	Cdo.Textbody	= document.getElementsByName("text")(0).value

	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/sendusing") = _
		2

	sv = Split(SMTPServer,":")

	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
		sv(0)
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = _
		sv(1)
	Cdo.Configuration.Fields.Item _
	 ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true

	Cdo.Configuration.Fields.Update

	on error resume next
	Cdo.Send
	if Err.Number <> 0 then
		alert(Err.Description & "   ")
	else
		alert("メールを送信しました   ")
	end if
	on error goto 0
	window.close()

End Function


</SCRIPT>
<base target="_self">
</head>
<BODY>

<TEXTAREA
	name="text"
	style='width:790px;height:550px;'
></TEXTAREA>
<INPUT
	type="button"
	value="送信"
	onClick='Call SendMailCDOMessage()'
><br>
</FORM>

</BODY>
</html>
<SCRIPT for=window event=onload language="VBScript">

	' onload 処理
	Set doc = obj.document

	set objTextArea = doc.selection
	set objTextRange = objTextArea.createRange( )
	on error resume next
	strData = objTextRange.text
	nLen = Len( strData )
	on error goto 0

	if nLen <> 0 then
		document.getElementsByName("text")(0).value = strData
	else
		strTag = obj.tagName
		if UCase( strTag ) = "A" then
			strWork = obj.innerText
			strWork = strWork & vbCrLf & obj.href
			document.getElementsByName("text")(0).value = strWork
		else
			document.getElementsByName("text")(0).value = obj.innerText
		end if
	end if

</SCRIPT>
]]>
</RESOURCE>

</JOB>

更新履歴
2009-04-07 : 初回投稿
2013-07-26 : 動作確認とブログ本文を大幅に変更



posted by at 2013-07-26 20:54 | IE | このブログの読者になる | 更新情報をチェックする

IE拡張メニューで取得したテキストをメールで送る

ネットサーフィンしていて、気になるデータや URL をどこかにメモする事があると思いますが、お気に入りばかりを使っているとやたら増えて整理できないし、掲示板へ移動するのも面倒だったりします。

そこで、IE 拡張メニューを利用してブラウジング中にデータを特定のメールアドレスへ送ってしまおうというものです。
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );

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

mb_language( "ja" );
mb_internal_encoding("EUC-JP");
$subject = mb_convert_encoding( "ブラウザ報告(lightbox)", mb_internal_encoding(), "SJIS" );
$body = mb_convert_encoding( $_POST['text'], mb_internal_encoding(), "SJIS" );
$body = mb_convert_kana($body,'K','euc-jp');

$to = mb_convert_encoding( "宛先", "JIS", "SJIS" );
$to = "=?ISO-2022-JP?B?" . base64_encode($to) . "?= <宛先メールアドレス>";
$from = mb_convert_encoding( "差出人", "JIS", "SJIS" );
$from = "From: =?ISO-2022-JP?B?" . base64_encode($from) . "?= <差出人メールアドレス>";
mb_send_mail($to, $subject, $body, $from );

?>
メール送信が終了しました。
メール送信は、サーバーサイドの PHP を使って、sendmail で送信します。その為の最低限のコードは上記のようなコードですが、$_POST['text'] が本文ですので、name=text であるテキストエリアが IE 拡張メニューで表示した HTMLに存在すれば良いわけです。
<FORM
	method="POST"
	action="http://host/サーバ側処理.php"
>
<TEXTAREA
	name="text"
	style='width:790px;height:550px;'
></TEXTAREA>
<INPUT
	type="submit"
	name="send"
	value="送信"
><br>
</FORM>
上記のとおり、 テキストエリアは問題無いので、action を前述の PHP の URL に変更すれば良い事になります。メール送信の実際は、さくらインターネットでテストしましたが、うまくいっています。

更新履歴
2009-04-06 : 最初の投稿
2013-07-26 : 再検証前の本文更新

関連する記事

IE拡張メニューで取得したテキストをメールで送る(CDO.Message版)



posted by at 2013-07-26 14:13 | PHP | このブログの読者になる | 更新情報をチェックする

『フリーフォントで簡単ロゴ作成』に idfont さんの、フリーカナフォントの 13番と26番を追加しました





たくさんのカナとひらがなのフォントが殆ど制限無しに使えます
商標権等の権利を取得する商品名や会社名等のロゴとして使用する事は出来ません。
その他には特に使用制限は無いので商用などにも自由に使用して構いません。
あまりにたくさんあるので、とりあえず二つを実装しましたが、別ページで全部登録しようかなぁ・・・と思っています。 このフォントは、.ttc で作成されているので、PHP 等の WEB アプリで使用するには、.ttf に分解する必要があります。以前は、Microsoft の純正のコマンドプロンプトアプリが手に入ったのですが、もうそれはありませんでした。 代わりに、みつけたのが『UniteTTC』です。とても助かりました。
posted by at 2013-07-26 00:00 | フリーフォントで... | このブログの読者になる | 更新情報をチェックする

2013年07月20日

『フリーフォントで簡単ロゴ作成』にTフォント楷書(GT-01) を追加しました

久しぶりのフォントの追加です。楷書は今まで教育漢字のみの白舟書体のフリーフォントしか無かったのですが、わりと今まで出会うチャンスがありませんでした。使う場面も限られているので放置していたのですが、縁があったようです。



※ Tフォントについてはこちらを参照して下さい

白舟書体の楷書は、太めで( さらに極太楷書もある )筆の名残が大きいのですが、Tフォント楷書はとても活字らしい楷書となっています。

▼ 白舟楷書


▼ 白舟極太楷書



posted by at 2013-07-20 02:13 | フリーフォントで... | このブログの読者になる | 更新情報をチェックする

2013年07月19日

Google の API を使用する為の OAuth 2.0 ログイン

Using OAuth 2.0 for Login( Google のドキュメント )

上のドキュメントではログインする為の URL のサンプルがありますが、一般アプリケーションでブロウザコントロールを使う上において、以下が最低限必要なものです( 見やすいように改行を付加しています )
https://accounts.google.com/o/oauth2/auth?
client_id=424911365001.apps.googleusercontent.com&
response_type=code&
scope=openid%20email&
redirect_uri=https://oa2cb.example.com/
ベースは『https://accounts.google.com/o/oauth2/auth』ですが、必要なものの詳細は以下のようになります。
➀ client_id : Google Developer Console より取得
➁ response_type : code で固定
➂ scope : 使用する API によって違います
➃ redirect_uri : client_id と供に登録されている URL

scope は、例えば Google Drive であれば https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/drive+https://www.googleapis.com/auth/drive.appdata となります。
また、カレンダーなら https://www.googleapis.com/auth/calendar+https://www.googleapis.com/auth/calendar.readonly+https://www.googleapis.com/auth/plus.me です。

❷ URL 内の code の取得

『リダイレクトURL?code=必要なデータ』という単純な内容なので、『必要なデータ』を取り出して、それを使って正式なアクセストークンを POST で取得します。( Exchange Code for Access Token and ID Token )

❸ https://accounts.google.com/o/oauth2/token へPOST

※ 見やすいように改行を付加しています
※ grant_type=authorization_code は固定です
POST /o/oauth2/token HTTP/1.1
Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded

code=必要なデータ&
client_id=Client ID&
client_secret=Client secret&
redirect_uri=Redirect URIs&
grant_type=authorization_code


❹ JSON で返されるアクセストークン

token_type は、Bearer で固定のようですが、このアクセストークンを使う時に必要なので、保存して使用します。( Authorization ヘッダで、アクセストークンの前にセットする / 区切りはスペース )
{
  "access_token" : "アクセストークン",
  "token_type" : "Bearer",
  "expires_in" : 3599
}
関連する記事(実装)VS2010(C#) Form : Google API でログインして Google ドライブにアップロードWindows8(C#) で Google にログインしてカレンダーの情報を扱う


posted by at 2013-07-19 13:00 | API | このブログの読者になる | 更新情報をチェックする

Twitter API 1.1 : POST statuses/update_with_media / 画像付き投稿 -- の注意事項

要するに、boundary を使った、multipart/form-data による投稿です。

Twitter の API 詳細ページ
( Resource URL : https://api.twitter.com/1.1/statuses/update_with_media.json )

上記ページで、サンプルの生データが書かれていますが、正確なものを以下に書きます。
POST /1.1/statuses/update_with_media.json HTTP/1.1
Host: api.twitter.com
Content-Length: 15532
Authorization: OAuth oauth_consumer_key="...", oauth_nonce="...", oauth_signature="...", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1347058301", oauth_token="...", oauth_version="1.0"
Content-Type: multipart/form-data;boundary=cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340
 
--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340\r\n
Content-Disposition: form-data; name="status"\r\n
\r\n
UTF-8 での日本語\r\n
--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340\r\n
Content-Type: application/octet-stream\r\n
Content-Disposition: form-data; name="media[]"; filename="media.png"\r\n
\r\n
生の画像データ
\r\n--cce6735153bf14e47e999e68bb183e70a1fa7fc89722fc1efdf03a917340--\r\n
ヘッダ部分はたいていメソッド等が出力してくれますが、本体は自分で書く場合改行コードは \r\n です。
( \n でも動作するかもしれませんが、VS2010 で \r\n を使って動作確認しています )

画像データ部分はバイナリそのままで、バイナリデータの後ろにも、\r\n が必要です。また、画像データの前に一行空の行が必要です。( base64でエンコードされた画像は、現在サポートされていません。)

API 側の注意事項としては、認証用のデータは oauth_* のみで作成するようになっており、通常投稿で使用される『status』は使用されません。

ファイル名を格納する name 部分に media[] がセットされており、配列としての利用を想定しているようですが、実際は画像はひとつしかアップロードできません。

対応画像フォーマットはPNG、JPGとGIFです。アニメーションGIFはサポートされていません

古いエントリポイントである、『upload.twitter.com』はもう使えません。

日本語を投稿する場合、URLエンコードは必要ありません。UTF-8 で投稿します。
▼ 例
content = Encoding.GetEncoding("UTF-8").GetBytes(text + "\r\n");
sw.Write(content, 0, content.Length);
Twitter の場合、ファイル名( サンプルは、media.png ) は実際はなんでも良いような気がします。 関連する記事(実装) VS2010(C#) Form : POST statuses/update_with_media で画像を伴った Twitter 投稿
posted by at 2013-07-19 11:47 | API | このブログの読者になる | 更新情報をチェックする

2013年07月06日

GIMP で例えば、『フラクタルエクスプローラ』からブラシを作って色づけ

いろいろな模様ができそうですが、基本的にはブラシ化して使う事を想定しています。白を透明にした時点で、ブラシとして保存して使うといいと思います。
























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

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

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

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

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


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

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

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

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

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