SQLの窓

2009年12月05日


VB.net : ( vbc.exeで )自分でも簡単にビルドできる HTTP プロトコルを用いたダウンローダ



たぶん、普通にWindows アップデートとかされておれば、Framework 3.5 用の VB をビルドするコンパイラである vbc.exe が使えるとおもうのですが、そのvbc.exe を使った簡単なビルドセットです。


@echo off setlocal set PATH=%windir%\Microsoft.NET\Framework\v3.5;%PATH% vbc httpdownload.vb
バッチファイルを使って現在の環境に影響しないように一時的に環境変数をセットしてビルドします。Framework2.0 用も用意しており、おまけとしてC# 用のコードも付加しています。 プログラムが解らない人は、httpdownload.exe をそのままお使いいただけます。 httpdownload.exe URL "ローカルパス" [s] ※ s を指定しないと、ダウンロードしたディレクトリをエクスプローラで開きます
Imports System.IO	' Path
Imports System.Diagnostics	' Process
Imports System.Runtime.InteropServices	' DllImport

Module MyModule

<DllImport("urlmon.dll", CharSet:=CharSet.Unicode)> _
Private Function URLDownloadToFile( _
  ByVal pCaller As Integer, _
  ByVal szURL As String, _
  ByVal szFileName As String, _
  ByVal dwReserved As Integer, _
  ByVal lpfnCB As Integer _
) As Integer
End Function

' **********************************
' * Win32 API でHTTPダウンロード
' **********************************
Sub Main()

	Dim argv As String()
	argv = System.Environment.GetCommandLineArgs()

	Dim ret As Integer
	Dim str As String

	If argv.Length >= 3 Then
		ret = URLDownloadToFile( 0, argv(1), argv(2), 0, 0 )
		if ret = 0 then
			str = Path.GetFullPath( argv(2) )
			str = Path.GetDirectoryName( str )
			if argv.Length = 4 then
				if  argv(3) = "s" then
				else
					' 第3引数に s を指定しない場合は
					'  エクスプローラを開く
					Process.Start("explorer.exe","/e,"+str)
				end if
			else
				' 第3引数に s を指定しない場合は]
				' エクスプローラを開く
				Process.Start("explorer.exe","/e,"+str)
			end if
		end if
	end if

End Sub

End Module

' 古い vb の定義
' Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
' "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
' szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
' ▼
' http://support.microsoft.com/kb/244757/ja

VB の中は、Framework では無く Win32API を使っています。URLDownloadToFile という単純な API があるので、簡単ですが、VC でビルドするには環境設定がたいへんですが、VB.net だととても簡単なので。
************************************************************
* httpdownload.exe
* ( http ダウンローダ )
************************************************************

************************************************************
* 実行方法
************************************************************
そのまま使う場合は、以下のように指定します

httpdownload.exe ダウンロードURL "ダウンロードパス" [s]

ダウンロードパスは、a.lzh のようにカレントでもかまいません s を指定しないと、ダウンロード後にエクスプローラが起動してダウンロードしたディレクトリを開きます


************************************************************
* 自分でビルドしたい場合
************************************************************
Framework3.5 でビルドする場合は、build_35.bat を実行します。以下のファイルがあれば動作するばずです

C:\WINDOWS\Microsoft.NET\Framework\v3.5\vbc.exe

■ 同梱している httpdownload.exe は、3.5 でビルドしています

Framework2.0 でビルドする場合は、build_2.bat を実行します。以下のファイルがあれば動作するばずです

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\vbc.exe


************************************************************
* ソースコード
************************************************************
■ httpdownload.vb

■ httpdownload2.cs
   C# 用です。build_35.bat が動く場合、vbbuild_35_cs.bat でビルドできるはずです

************************************************************
* その他
************************************************************
■ 著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
以下は C# のコードですが、VB.NET -> C# 変換 で変換してビルドすると少しだけエラーが出るので修正してあります
using System.IO; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

static class MyModule 
{ 
    
    [DllImport("urlmon.dll", CharSet = CharSet.Unicode)] 
    private static extern int URLDownloadToFile(int pCaller, string szURL, string szFileName, int dwReserved, int lpfnCB);
    
    // **********************************
    // * Win32 API でHTTPダウンロード 
    // **********************************
    public static void Main() 
    { 
        
        string[] argv = null; 
        argv = System.Environment.GetCommandLineArgs(); 
        
        int ret = 0; 
        string str = null; 
        
        if (argv.Length >= 3) { 
            ret = URLDownloadToFile(0, argv[1], argv[2], 0, 0); 
            if (ret == 0) { 
                str = Path.GetFullPath(argv[2]); 
                str = Path.GetDirectoryName(str); 
                if (argv.Length == 4) { 
                    if (argv[3] == "s") { 
                    } 
                    else { 
                        // 第3引数に s を指定しない場合は 
                        // エクスプローラを開く 
                        Process.Start("explorer.exe", "/e," + str); 
                    } 
                } 
                else { 
                    // 第3引数に s を指定しない場合は] 
                    // エクスプローラを開く 
                    Process.Start("explorer.exe", "/e," + str); 
                } 
            } 
            
        } 
    } 
    
} 

// 古い vb の定義 
// Private Declare Function URLDownloadToFile Lib "urlmon" Alias _ 
// "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _ 
// szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long 
// ▼ 
// http://support.microsoft.com/kb/244757/ja 






タグ:VB.NET HTTP
posted by lightbox at 2009-12-05 06:09 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2009年11月28日


コマンドプロンプト : 初期値を設定できる行入力

Inputline

ブラウザでダウンロード
いちおう、テンポラリフォルダにも結果を出力していますが、
以下のようにして使用します
@echo off
setlocal
cls

locate 5,3 && echo 社員コード
locate 5,5 && echo 氏名
locate 5,7 && echo 確認


:inputloop
locate 20,3
for /F %%i in ('inputline "0001"') do (
	set INP01=%%i
)

locate 20,5
for /F %%i in ('inputline "山田 太郎"') do (
	set INP02=%%i
)

locate 20,7
for /F %%i in ('inputline') do (
	if "%%i"=="q" (
		goto end
	)
)

goto inputloop 

:end 

echo %INP01%
echo %INP02%
▼ こういうのもありです
for /F %%i in ('inputline "%INP02%"') do (
	set INP02=%%i
)
Imports System.IO
Imports System.Text

Module MyModule

' ********************************************************
' * 実行
' ********************************************************
Sub Main()

	Dim argv As String()

	argv = System.Environment.GetCommandLineArgs()

	if argv.Length = 2 then
			System.Windows.Forms.SendKeys.SendWait(argv(1))
	end if

	' SHIFT_JIS 書き込み
	Dim WriteFile As StreamWriter = New StreamWriter( _
		Path.GetTempPath() & "\lightbox_input.txt", _
		False, Encoding.GetEncoding(932) _
	)

	Dim str As String = Console.ReadLine()

	WriteFile.Write( str )
	WriteFile.Close()
	WriteFile.Dispose()
	Console.WriteLine( str )

End Sub

End Module

関連する記事
コマンドプロンプト : 表示位置を指定できる locate.exe




posted by lightbox at 2009-11-28 23:30 | フリーソフト | このブログの読者になる | 更新情報をチェックする

コマンドプロンプト : 表示位置を指定できる locate.exe

ブラウザでダウンロード

Locate_1
Locate_1
Module MyModule

' ********************************************************
' * 実行
' ********************************************************
Sub Main()

	Dim argv As String()
	Dim Pos As String()
	Dim x As Integer
	Dim y As Integer

	argv = System.Environment.GetCommandLineArgs()

	if argv.Length = 2 then

		Pos = (argv(1)).Split(",")
		if Pos.Length <> 2 then
			y = 0
		end if
		Try
			x = Integer.Parse(Pos(0))
		Catch
			x = 0
		End Try
		Try
			y = Integer.Parse(Pos(1))
		Catch
			y = 0
		End Try

		Console.CursorLeft = x
		Console.CursorTop = y

	end if

End Sub

End Module

■プログラム名
表示位置指定

※ 指定した位置に表示位置を移動します

スペースで表示位置を調整する必要がなくなります

▼ test.bat
-------------------------------------------------
@echo off
cls

locate 0,0 && echo CALL
locate 0,1 && echo CLS
locate 0,2 && echo DIR

locate 5,20
pause

locate 5,0 && echo バッチ ファイル中から、別のバッチ ファイルを呼び出します。
locate 5,1 && echo 画面を消去します。
locate 5,2 && echo ディレクトリ中のファイルやサブディレクトリの一覧を表示します。
-------------------------------------------------


▼ 結果
-------------------------------------------------
CALL バッチ ファイル中から、別のバッチ ファイルを呼び出します。
CLS  画面を消去します。
DIR  ディレクトリ中のファイルやサブディレクトリの一覧を表示します。
-------------------------------------------------

■使用方法
locate n,n

n は 0 から始まります

■利用環境
Framework2.0 以上がインストールされている環境


■著作権その他

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




posted by lightbox at 2009-11-28 15:32 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2009年11月13日


HTA : CSV汎用出力

ダウンロード
Adocsv

Windows に登録されている ODBC ドライバを使用して
汎用的に CSV を出力します( 同じフォルダに出力 )

Adocsv2


※ このソフトの詳細についてはこちらを参照してください。


posted by lightbox at 2009-11-13 12:13 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2009年11月10日


Flex3 ( swf ) なNumericStepper コントロール : 値の微調整用

2009/11/09 : 更新
※ パッケージの内容をミスっていたみたいです。申し訳ありません
▼ こんな感じです

初期値の指定は、swfobject の 2.1 で以下の設定が可能です

var flashvars = {
	jsid:"01",
	value:"20",
	minimum:6,
	maximum:1000,
	stepSize:1,
	width:60
};
jsid は、Flex 内部から呼び出す JavaScript の function の連番です
value は、初期値ですから、PHP ならば 

value:"<?= $_POST['field'] ?>",

とすれば良いです。POST 用の フィールドは非表示にしておきます。
フィールドへのセットは JavaScript の function で行います。
value は、setValue というメソッドを Flex 側に用意してあります。

手入力でも変更できますし、フォーカス中に SHIFT キーで四捨五入
されて、そのまま数値を動かすと 10 づつ値が変化します
微調整はリビルドしたほうが早いですね、ソース短いので。

▼ ダウンロードと実装コード

Flex3 : NumericStepper コントロール

実際に使っているページ
フリーフォントで簡単ロゴ作成



posted by lightbox at 2009-11-10 13:00 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2009年09月19日


JS+PHP : コンボボックスでどんなファイルもダウンロード

JavaScript も PHP もホスティングしていますので、以下のように書くだけです。ブログの記事に毎回書いても動くはずです。( ご自分のサイトで使ったほうが安定して使えると思います )

ダウンロードするファイルが、通常のダウンロードされるファイルの場合はPHP を使う必要は無いのですが、一つの方法として、いったんサーバー側で読み込ませています。
<script type="text/javascript" src="http://lightbox.on.coocan.jp/createDownloadCombo.js"></script>

<script type="text/javascript">
window.createDownload = [
"http://lightbox.on.coocan.jp/download/WinOfSql102.lzh","SQLの窓 Build C++",
"http://winofsql.jp/download/hanbaib.lzh","簡易販売管理用DBデータ",
"https://lh5.googleusercontent.com/-syfw6V1Njzo/UmP30xD-YcI/AAAAAAAAQ0E/p08uQf_2CQw/s1200/gtxr.jpg","画像もダウンロード"
]
createDownloadCombo();
</script>




以下は、createDownloadCombo.js の内容です。
fget.php は、こちら
function createDownloadCombo(){
	var i,url,name,str;

str="";
str+="<div> \n";
str+="<select>  \n";

	for( i = 0; i < (window.createDownload.length)/2; i++ ) {
		url = window.createDownload[i*2];
		name = window.createDownload[i*2+1];
str+="<option value=""+url+"">"+name+"</option> \n";

	}

str+="</select>  \n";
str+="<input type=button value="\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9" onclick=' \n";
str+="	var a = this.parentNode; \n";
str+="	a = encodeURIComponent(a.getElementsByTagName("SELECT")[0].value); \n";
str+="	top.location = "http://lightbox.on.coocan.jp/fget.php?target="+a; \n";
str+="	' \n";
str+="> \n";
str+="</div> \n";

	document.write(str);

}



posted by lightbox at 2009-09-19 18: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 終わり