2010.01.03 Sunday | 11:57

  ブックマークレット : 手書きブログのタイトルにURLが書かれている場合にそこへ移動する プログラマ

複雑な処理を行うブックマークレットは、単独では文字数制限があるので、
外部の .js ファイルに委ねます。

ページの中から、BlogTitlePane というクラスを持つ DIV を探して、
見つけたら、その中が http で始まっているかを確認して、確認の上移動します。
※ コメントにしてある部分は、新しいウインドウで開く方法です

以下はコードの本体です。
if (!window.lightbox_tjump) {
(
function() {
	window.lightbox_tjump = 
	{
		version: 1.01
		,
		init : function( ) {
			var target = document.getElementsByTagName("DIV");
			var count = target.length;
			var i,work;
			for( i = 0; i < count; i++ ) {
				work = target[i].className + "";
				work = work.toUpperCase();
				if ( work == "BLOGTITLEPANE" ) {
					if ( (target[i].innerHTML).substr(0,4) == 'http' ) {
						if ( confirm(target[i].innerHTML) ) {
							window.location = target[i].innerHTML;
						}
//						window.open(target[i].innerHTML);
					}
					break;
				}
			}
		}
	};
}
)();
}

lightbox_tjump は、ほぼユニークであればいいタイトルのようなもので、
window オブジェクトのプロパティに処理を埋め込む方法です。
ブックマークレツトはその特性上、同時に複数のものを実行する事は無い
ので極端な話、lightbox_tjump は常に同じでも問題は無いと思います。

ただ、管理上は別にしておいたほうが良いとは思いますが。

ブックマークレットの埋め込みはこのユニーク名とURL以外はほぼ一定です。
▼ ブックマークレットの登録
手書きブログタイトルジャンプ
<a href="javascript:var mylib=document.createElement('script');if(!window.lightbox_tjump){mylib.setAttribute('src','http://winofsql.jp/tegaki_tjump.js');document.body.appendChild(mylib);(function(){if(window.lightbox_tjump){lightbox_tjump.init();}else{setTimeout(arguments.callee);}})();}else{lightbox_tjump.init();}void(mylib);"onclick='	if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {		event.returnValue = false;		alert("右クリックしてポップアップメニューからお気に入りに追加して下さい   ");	}	else {		event.preventDefault();		alert("右クリックしてポップアップメニューからブックマークして下さい   ");	}'>手書きブログタイトルジャンプ</a>





2009.12.09 Wednesday | 01:37

  Ruby + mechanize 経由のブログ更新 プログラマ

Ruby : Seesaa の任意のブログの設定ページの
「最新の情報に更新」ボタンを Ruby の mechanize で押す
結果的に言うと、とても優秀で便利です。 http 的な事ならたいてい肩代わりしてくれるようです。 seesaa の更新は以前から面倒だったので、更新頻度の高いブログにリンクとして貼り付けて 置いてあります。予定として、 1) ブログのバックアップを Ruby がある さくらに転送 2) Seesaa ブログの初期基本設定を一撃で行う WEB サービス たぶん力作業のみで問題は出無いと思いますが、 さくら側のスクリプトの実行時間制限が気になりますが、 CPU 的には時間かからない作業なので。 あと、CRON に登録して mixi の足跡ログを さくらに溜め込む。 これは、以前 PHP でやってたのですが、クッキーを手作業で埋め込んでたので 途中でやめたやつを Ruby の可能性の模索テストとして再開してみる。 PHP で mixi の足跡データを取得





2009.11.29 Sunday | 18:33

  総合 ふるいむかし

■ Flex3
	● FLARToolkit
	WEB カメ くらぶ
	Metasequoia.as 拡張クラス ( ローカルの zip 書庫内のファイルをロードする )
	Flex3 : FLARToolKitをベースとして、単純画像/3D画像/3D球体を乗っけてpngに保存
	● PV3D
	Flex3 : Papervision3D+KMZとDAE拡張(ローカルPCのzipファイルをロードして表示)
	Flex3 : Papervision3D で、3D平面をローカルPCの画像でCanvas に表示してクリックで移動し、マウス位置で回転
	● KMZ MQO DAE
	● 伝票入力
	● Zipfie
	● 手書きブログ用3D化コンテンツ

■ コマンドプロンプト
	● input.exe 作成
	コマンドプロンプト : 表示位置を指定できる locate.exe
	コマンドプロンプト : 初期値を設定できる行入力
	laylaClass バッチ処理支援パッケージ ( バッチ処理 )

■ ORACLE
	少しづつ Oracle
	● バックアップ
	エクスポート
	Oracle : スキーマエクスポート( expdp.hta ) : コマンドライン入力支援
	● インポート
	Oracle : 同一スキーマテーブルインポート : コマンドライン入力支援
	Oracle : 別スキーマテーブルデータインポート : コマンドライン入力支援
	Oracle : 別スキーマテーブル置き換えインポート : コマンドライン入力支援
	● PL/SQL

■ Win32API
	● lightbox.lib 内コード整備( C言語マテリアル )
	キー入力作成
	キー入力作成
	( Flash と連携 )
	● VB.NET
	構造体をファイルに書き込む 


■ サイト整備
	● XML サイドリンク更新
	● リンクページ用ポップアップメニュー作成

■ VB.NET
	● Filezilla 用ビュアー選択アプリ

■ VB.NET 2Dゲーム
	● SHOT クラス
	● BACKGROUND クラス
	VB.NET による EasyGame ( まずは基本クラスと初期処理のみ )

■ PHP
	● Zipfie

■ Ruby
	● mixi + Twitter
	mixi ボイス投稿

■ IE 拡張メニュー
	IE拡張メニュー

■ ブックマークレット
	JS : ブックマークレットのスケルトン
	Googleのドメイン内検索を任意のページで実行
	Seesaa(さくら)専用リンクデータ移行処理

■ Shell
	● ツールボックス
	デスクトップ整理 ( Shell 拡張 )
	◎ IE のツールメニューに応用可能か?


■ フリーソフト
	Google Chrome を使ったデトクトップ用HTMLドキュメント登録(OpenFileName)
	Apche 仮想ディレクトリ自動登録のテストと紹介
	VBScript + ADO : 汎用CSV出力

■ その他
	● sqlite 総合
	SQLite3 : 日本語販売管理データ
	Flex3 : AIR : SQLite のテーブル一覧
	PHP : SQLite3 を PDO の ODBC 経由で読み込み
	PHP : 5.3 / 5.2.11 用共用 sqlite3(日本語テーブル) 読み込み
	PHP : 5.3 / 5.2.11 共用 sqlite3 作成
	SQLite DBの作成と スキーマ情報取得と DataGrid へ一括ロード
	● Google ストリートビュー貼り付けまとめ
	Googleストリートビュー埋め込みコード取得

	bonurd.winofsql.jp のトップに総合メニューを作成




2009.10.31 Saturday | 09:49

  gd を c から ふるいむかし

ここにはソース長すぎるので。

gd を c から

LboxGd

if ( Commdlg->OpenFileName( FilePath ) ) {
	Dlg->EditSetText( IDC_READONLY, FilePath );
	if ( !(Gd->Load(FilePath)) ) {
		Dlg->MsgOk("ERR");
		break;
	}

	LboxString SavePath;
	Tool.ProgramDirectory( &SavePath );
	SavePath.AddBackslash();
	SavePath.operator += ("SAVE.PNG");

	LboxGd Gd2;

	Gd->Copy( &Gd2, 50 );

	Gd2.Save( &SavePath );
}


// *********************************************************
// 伸縮コピー
// 戻り値 : true 成功, false 失敗
// *********************************************************
BOOL LboxGd::Copy( LboxGd *objGD, int nRate )
{
	if ( this->lib == NULL ) {
		this->SetLibLoadErrorMessage();
		return false;
	}

	LPFUNC_gdImageCopyResampled Dll_gdImageCopyResampled;

	Dll_gdImageCopyResampled =
		(LPFUNC_gdImageCopyResampled)GetProcAddress(
			lib, "gdImageCopyResampled@40"
		);
	if ( Dll_gdImageCopyResampled == NULL ) {
		this->SetFuncLoadErrorMessage();
		return false;
	}

	int w,w2;
	int h,h2;

	this->GetImageSize( &w, &h );
	w2 = (double)w * ( (double)nRate / (double)100 );
	h2 = (double)h * ( (double)nRate / (double)100 );

	gdImagePtr im_in;
	gdImagePtr im_out;

	if ( !(objGD->Create( w2, h2 )) ) {
		return false;
	}

	im_in = (gdImagePtr)(this->gd);
	im_out = (gdImagePtr)(objGD->gd);

	Dll_gdImageCopyResampled(
		im_out,
		im_in,
		0, 0, 0, 0,
		w2, h2,
		w, h
	);

	return true;
}



2009.10.31 Saturday | 09:33

  SendMessage と PostMessage のフック ふるいむかし

こいつは dll である必要があります
// LboxHook.cpp : DLL アプリケーション用のエントリ ポイントを定義します。
//

#include "stdafx.h"
#include "LboxHook.h"
#include <lightbox.h>

HINSTANCE hInst;

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    switch (ul_reason_for_call)
	{
		case DLL_PROCESS_ATTACH:
		case DLL_THREAD_ATTACH:
		case DLL_THREAD_DETACH:
		case DLL_PROCESS_DETACH:
			break;
    }
	
	hInst = (HINSTANCE)hModule;

    return TRUE;
}


// これはエクスポートされた変数の例です。
LBOXHOOK_API int nLboxHook=0;

// これはエクスポートされた関数の例です。
LBOXHOOK_API int fnLboxHook(void)
{
	return 42;
}

// これはエクスポートされたクラスのコンストラクタです。
// クラスの定義については LboxHook.h を参照してください。
CLboxHook::CLboxHook()
{ 
	return; 
}

// SendMessge のフックハンドル
static HHOOK hhk = NULL;
// PostMessge のフックハンドル
static HHOOK hhkPost = NULL;

// *********************************************************
// SendMessge のフック処理
// *********************************************************
LRESULT CALLBACK CallWndRetProc(
  int nCode,
  WPARAM wParam,
  LPARAM lParam
)
{
	if ( nCode < 0 ) {
		return CallNextHookEx( hhk, nCode, wParam, lParam );
	}

	HANDLE hMutex;

	hMutex = OpenMutex(
		SYNCHRONIZE,
		false,
		"LboxHook"
	);
	if ( hMutex != NULL ) {
		WaitForSingleObject(hMutex, INFINITE);

		CWPRETSTRUCT *msg;
		char szClass[512];
		char szTitle[512];

		msg = (CWPRETSTRUCT *)lParam;
		if ( msg->message == WM_COMMAND ) {
			GetClassName( msg->hwnd, szClass, 512 );
			GetWindowText( msg->hwnd, szTitle, 512 );

			LboxInfo Info;
			LboxString LString;
			LboxTextFile Txt;

			Info.TempPath( &LString );
			LString.AddBackslash();
			LString.operator += ("LboxHook.log");

			if( Txt.AppendOpen( &LString ) ) {
				Info.Time( &LString );
				Txt.PutPrintf(
					"%s:"
					"SEND:WM_COMMAND:"
					"%lu:%u:%u:%lu:%s:%s\n",
					LString.szLboxString,
					msg->hwnd,
					LOWORD(msg->wParam),
					HIWORD(msg->wParam),
					lParam,
					szClass,
					szTitle
				);
				Txt.Close();
			}

		}
		ReleaseMutex(hMutex);
		CloseHandle(hMutex);
	}

	return CallNextHookEx( hhk, nCode, wParam, lParam );

}
// *********************************************************
// PostMessge のフック処理
// *********************************************************
LRESULT CALLBACK GetMsgProc(
  int nCode,
  WPARAM wParam,
  LPARAM lParam
)
{
	if ( nCode < 0 ) {
		return CallNextHookEx( hhkPost, nCode, wParam, lParam );
	}

	HANDLE hMutex;

	hMutex = OpenMutex(
		SYNCHRONIZE,
		false,
		"LboxHook"
	);
	if ( hMutex != NULL ) {
		WaitForSingleObject(hMutex, INFINITE);

		MSG *msg;
		char szClass[512];
		char szTitle[512];

		msg = (MSG *)lParam;
		if ( msg->message == WM_COMMAND ) {
			GetClassName( msg->hwnd, szClass, 512 );
			GetWindowText( msg->hwnd, szTitle, 512 );

			LboxInfo Info;
			LboxString LString;
			LboxTextFile Txt;

			Info.TempPath( &LString );
			LString.AddBackslash();
			LString.operator += ("LboxHook.log");

			if( Txt.AppendOpen( &LString ) ) {
				Info.Time( &LString );
				Txt.PutPrintf(
					"%s:"
					"POST:WM_COMMAND:"
					"%lu:%u:%u:%lu:%s:%s\n",
					LString.szLboxString,
					msg->hwnd,
					LOWORD(msg->wParam),
					HIWORD(msg->wParam),
					lParam,
					szClass,
					szTitle
				);
				Txt.Close();
			}

		}
		ReleaseMutex(hMutex);
		CloseHandle(hMutex);
	}

	return CallNextHookEx( hhk, nCode, wParam, lParam );

}

extern "C" { 
// *********************************************************
// システムフックのインストール
// *********************************************************
LBOXHOOK_API void Initialize( void )
{
	if ( hhk == NULL ) {
		// ミューテックス作成
		CreateMutex(
			NULL,
			false,
			"LboxHook"
		);

		// システムフックの実装
		hhk = SetWindowsHookEx(
			WH_CALLWNDPROCRET,
			CallWndRetProc,
			hInst,
			0				
		);
		hhkPost = SetWindowsHookEx(
			WH_GETMESSAGE,
			GetMsgProc,
			hInst,
			0				
		);
	}
}

// *********************************************************
// システムフック解放
// *********************************************************
LBOXHOOK_API void End( void )
{
	if ( hhk != NULL ) {
		UnhookWindowsHookEx( hhk );
		hhk = NULL;
	}
	if ( hhkPost != NULL ) {
		UnhookWindowsHookEx( hhkPost );
		hhkPost = NULL;
	}
}
}




2009.10.31 Saturday | 09:23

  DSN 作成 ( これは比較的新しい ) : 2006 ふるいむかし

システム DSN + MDB なんで、Tomacat 用に作った奴です。
#include "stdafx.h"

#include <windows.h>
#include <odbcinst.h>

int main( int argc, char *argv[] )
{
	// システム DSN 削除	
	SQLConfigDataSource(
		NULL,
		ODBC_REMOVE_SYS_DSN,
		"Microsoft Access Driver (*.mdb)",
		"DSN=jspMDBlightbox\0" 
	);

	char buff[4096];
	memset( buff, 0x00, 4096 );

	char *ptr;

	ptr = buff;
	strcpy( ptr, "DSN=jspMDBlightbox" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "DBQ=" );
	strcat( ptr, argv[1] );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "MaxBufferSize=2048" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "PageTimeout=5" );
	ptr += strlen( ptr ) + 1;
	strcpy( ptr, "FIL=MS Access" );

	// システム DSN 作成	
	SQLConfigDataSource(
		NULL,
		ODBC_ADD_SYS_DSN,
		"Microsoft Access Driver (*.mdb)",
		buff
	);

	return 0;
}




<< 4/29 >>