SQLの窓

2022年01月02日


VSCode : あるショートカットをぜひ設定して、SHIFT_JIS が化けた時とりえず正しく表示する



SHIFT  + ALT のショートカットはどちらかといえば『特殊なもの』という印象があるので、ショートカットそのものと、各 settings.json を直接開くようにしています。

S : Settings
W : Workspace
D : Directory
K : Keybord Shortcut




SHIFT + ALT + S でユーザの設定を開いて、先頭の SHIFT_JIS の設定の - ( ハイフン ) を一時的に削除してとにかく SHIFT_JIS で表示してしまう設定にします( 終わったら元に戻す )


言語別に SHIFT_JIS を強制するのは以下のようにしていますが、csv を言語化するには csv をそのように登録してくれる拡張をインスト−ルします。( コマンドパレットから changeLanguageMode でいまある言語の確認 )
        "[csv]": {
            "files.encoding": "shiftjis"
        },
        "[vbs]": {
            "files.encoding": "shiftjis",
            "editor.insertSpaces": true
        },
        "[bat]": {
            "files.encoding": "shiftjis"
        },
        "[powershell]": {
            "files.encoding": "shiftjis"
        },



言語で定義したら、拡張子への対応は以下のようにして行っています。
        "files.associations": {
            "*.mnu": "csv",
            "*.ujis": "perl",
            "*.932": "csv",
            "*.jsp": "java",
            "*.htm": "html",
            "*.hta": "html",
            "*.xlsx": "excel"
        },




【Visual Studio Codeの最新記事】
posted by lightbox at 2022-01-02 11:17 | Visual Studio Code | このブログの読者になる | 更新情報をチェックする

「送る」からファイルのダンプ

GitHub







※コマンドプロンプトの操作
Q : 終了します。
スペースキー : 次ページを表示します。
Enterキー : 次の行を表示します

dump.vbs
if WScript.Arguments.Count = 1 then
	strMessage = "送るから実行して下さい" & vbCrLf & vbCrLf
	strMessage = strMessage & "※ リンク先の最後の数字はコマンドプロンプトの行数です   " & vbCrLf
	strMessage = strMessage & "※ プロパティよりウインドウを最大化する方法もあります   " & vbCrLf
	Call MsgBox(strMessage,0,"lightbox")
	Wscript.Quit
end if

Set WshShell = CreateObject( "WScript.Shell" )   
Set Fso = CreateObject( "Scripting.FileSystemObject" )

strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path

strCommand = "cmd /k mode CON lines="&WScript.Arguments(0)&" & cscript.exe """ & _
strCurPath & "\dump_c.vbs"" """ & WScript.Arguments(1) & """ | more & pause"
Call WshShell.Run( strCommand )


dump_c.vbs
' ****************************************************
' ファイルを16進数でダンプします
' ****************************************************
Dim Fs,Stream
Dim InFile
Dim Kana
Dim KjFlg
Kana = Array( _
"。","「","」","、","・","ヲ","ァ","ィ","ゥ","ェ","ォ","ャ","ュ","ョ","ッ", _
"ー","ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ", _
"タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ", _
"ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ン","゙","゚" )

Set Fs = CreateObject( "Scripting.FileSystemObject" )
Set Stream = CreateObject("ADODB.Stream")

InFile = WScript.Arguments(0)

Dim LineBuffer,DispBuffer,CWork,nCnt,strBuff,i,j

if not Fs.FileExists( InFile ) then
	Wscript.Echo "ファイルが存在しません"
	Wscript.Quit
end if

' ------------------------------------------------------
' Stream のオープン
Stream.Open
 
' ------------------------------------------------------
' Stream タイプの指定
Stream.Type = 1		' StreamTypeEnum の adTypeBinary
 
' ------------------------------------------------------
' 既存ファイルの内容を Stream に読み込む
Stream.LoadFromFile InFile
 
' ------------------------------------------------------
' バイナリ型の Stream オブジェクトからを読み取って加工
Bcnt = 0
nCnt = 0
KjFlg = ""

Do while not Stream.EOS

	if ( nCnt MOD 16 ) = 0 then
		Wscript.Echo "          0  1  2  3  4  5  6  7" _
		& "  8  9  A  B  C  D  E  F"
		Wscript.Echo "--------------------------------" _
		& "------------------------------------------"
	end if

	' 16 バイトの読込
	LineBuffer = Stream.Read(16)

	strBuff = ""
	For i = 1 to LenB( LineBuffer )
		CWork = MidB(LineBuffer,i,1)
		Cwork = AscB(Cwork)
		Cwork = Hex(Cwork)
		Cwork = Ucase(Cwork)
		Cwork = Right( "0" & Cwork, 2 )
		DispBuffer = DispBuffer & Cwork & " "
		strBuff = strBuff & CharConv( Cwork )
	Next

	Wscript.Echo _
		Right( _
			"00000000" & Ucase(Hex( nCnt * 16 )), 8 _
		) & " " & _
		Left(DispBuffer & String(49," "), 49 ) & strBuff
	DispBuffer = ""

	nCnt = nCnt + 1
 
Loop
 
' ------------------------------------------------------
' Stream を閉じる
Stream.Close

Set Stream = Nothing
Stream = Empty
Set Fs = Nothing
Fs = Empty

' ****************************************************
' 生データのテキスト
' ****************************************************
function CharConv( HexCode )

	Dim nCode

	nCode = Cint( "&H" & HexCode )

	if KjFlg = "" then
		if &H81 <= nCode and nCode <= &H84 or _
			&H88 <= nCode and nCode <= &H9f or _
			&HE0 <= nCode and nCode <= &HEA then
			KjFlg = HexCode
			CharConv = ""
			Exit Function
		end if
	else
		if HexCode <> "00" then
			KjFlg = KjFlg & HexCode
			CharConv = Chr( Cint( "&H" & KjFlg ) )
		else
			CharConv = ".."
		end if
		KjFlg = ""
		Exit Function
	end if

	if 0 <= nCode and nCode <= &H1F then
		CharConv = "."
	end if
	if &H20 <= nCode and nCode <= &H7E then
		CharConv = Chr(nCode)
	end if
	if &H7F <= nCode and nCode <= &HA0 then
		CharConv = "."
	end if
	if &HA1 <= nCode and nCode <= &HDF then
		CharConv = Kana(nCode-&HA1)
	end if
	if &HE0 <= nCode and nCode <= &HFF then
		CharConv = "."
	end if

end function


エクスプローラで SendTo フォルダに移動するには、アドレスバーに sendto と直接入力します。






posted by lightbox at 2022-01-02 09:44 | 右クリックで「送る」 | このブログの読者になる | 更新情報をチェックする

2021年08月07日


GAS : 自分の共有ドライブ一覧とマイドライブのルートフォルダ一覧

スプレッドシートに出力します

Logger.log がとても使いやすくなりましたが、あくまでデバッグ目的になるのでスプレッドシートに結果を残します。実行前に出力する列単位のクリアを行っていますが、マクロで取得したコードです。

Drive API サービスの設定

GAS からは、V2 の利用となるので注意が必要です。V3 ではパラメータが違います

マイドライブのルートフォルダのソート

そのままではソートされないので、一旦配列へセットしてソートしてから出力しています
function listDrive() {

    // **************************************************
    // 選択したシートを対象とします
    // **************************************************
    var spreadsheet = SpreadsheetApp.getActive();

    // **************************************************
    // 列クリア
    // **************************************************
    spreadsheet.getRange('A:E').activate();
    spreadsheet.getActiveRangeList().clear({contentsOnly: true, commentsOnly: true, skipFilteredRows: true});

    // **************************************************
    // ドライブ一覧 (100件まで:それ以上は nextPageToken を使う)
    // Drive API v2
    // **************************************************
    var response = Drive.Drives.list({"maxResults":100});
    var drives = response.items;
    var targetRange;
    for (i = 0; i < drives.length; i++) {

        Logger.log('%s (%s)', drives[i].name, drives[i].id);
        targetRange = spreadsheet.getRange('A' + (i+1));
        targetRange.setValue(drives[i].name);
        targetRange = spreadsheet.getRange('B' + (i+1));
        targetRange.setValue(drives[i].id);

    }

    // **************************************************
    // マイドライブルート内のフォルダの一覧 (Drive API は必要ない)
    // **************************************************
    var folders = DriveApp.getRootFolder().getFolders();
    var a = new Array();

    while (folders.hasNext()) {
        var folder = folders.next(); 
        Logger.log(folder.getName());
        a.push(folder.getName());
    }

    a.sort()
    for (i = 0; i < a.length; i++) {
        targetRange = spreadsheet.getRange('E' + (i+1));
        targetRange.setValue(a[i]);
    }

}


GitHub


posted by lightbox at 2021-08-07 15:38 | GAS | このブログの読者になる | 更新情報をチェックする

2021年03月15日


Google Apps Script(GAS) で、Google Classroom に投稿する



ドキュメントでは、REST API なので、UrlFetchApp クラスを使うのか? とか思ってしまいますが、そもそも それだと auth が必要なのでまだ試してしません。

で、そんな事をしなくてもそれぞれの REST の クラスのメソッドに引数を渡す形で実行できます。
但し、Classroom Service が拡張なので、スクリプトエディタのサービスの追加より API を実行可能にしておく必要があります。



以下のサンプルでは、Classroom の一覧取得後に目的の id を確認して固定で投稿しています。
function myFunction() {

	// **************************************************
	// Classroom 一覧	
	// **************************************************
	var response = Classroom.Courses.list();
	var courses = response.courses;
	for (i = 0; i < courses.length; i++) {
		Logger.log('%s (%s)', courses[i].name, courses[i].id);
	}

	// **************************************************
	// POST する JSON	
	// **************************************************
	var target = "35126354603";

	var data = {
		"courseId" : target, 
		"materials": [
			{
				"link": {
					"url": "https://news.google.com/?hl=ja&tab=rn1&gl=JP&ceid=JP:ja",
					"title": "Google ニュース",
					"thumbnailUrl": ""
				}
			}
		],
		"text": "Google Apps Script による Classroom への投稿",
		"assigneeMode": "ALL_STUDENTS",
		"state": "PUBLISHED"
	};

	Classroom.Courses.Announcements.create(data, target);  

}

Logger.log の代わりに Gmail で自分のアドレスに送信したほうが良い場合もあります。
// The code below will send an email with the current date and time.
var now = new Date();
GmailApp.sendEmail("mike@example.com", "current time", "The time is: " + now.toString());

関連する記事

Google Classroom のテーマ画像のサイズと既存画像をテーマ画像として使用してみた手順



courses.announcements.create リファレンス



posted by lightbox at 2021-03-15 14:04 | GAS | このブログの読者になる | 更新情報をチェックする

2021年01月28日


サクラエディタの初期設定

ダウンロード

ダウンロード( 32ビット / Installer.zip ) ※ 設定をそのままでバージョンアップしたい場合は、exe.zip をダウンロードしてインストールフォルダの中に上書きコピー ( 以下、C:\app\sakura\sakura.exe としてインストールしています )

インストール時のオプション

✅ SAKURAで開くのチェックは特に必要ではありませんが、そのレジストリ登録結果は以下の内容になります。( インストールパスは書き換えてください )
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\sakuraeditor]
@="SAKURAで開く(&E)"

[HKEY_CLASSES_ROOT\*\shell\sakuraeditor\command]
@="\"C:\\app\\sakura\\sakura.exe\" \"%1\""




✅ アイコンも表示したいのであれば以下のレジストリの Icon 部分を追加します


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\shell\sakuraeditor]
@="SAKURAで開く(&E)"
"Icon"="\"C:\\app\\sakura\\sakura.exe\",0"

[HKEY_CLASSES_ROOT\*\shell\sakuraeditor\command]
@="\"C:\\app\\sakura\\sakura.exe\" \"%1\""



クリックで URL を選択しない

✅ これをしておかないと、URL の部分文字列を選択できません

タブバーを表示

✅ この機能がサクラエディタの大きなメリットで、FileZilla でサーバのファイルをタブで変更して素早く編集できます

フォントの設定

✅ デフォルトでは少し小さすぎるので調整します

タブ毎に閉じるボタンを表示する

✅ 作業が速やかに行えます

他で変更されたファイルの同期

✅ サーバ上のファイルが変更された場合に再読み込みします

空白文字を表示させる

✅ 設定がタイプ毎になりますが、まずは基本で設定変更すれば登録されてない拡張子の設定となります。

拡張子の追加

✅ 新たにタイプを追加せずとも、ほぼ同様であれば追加するだけで済みます。

サクラエディタが持っている他の言語を追加登録する

✅ keyword フォルダにある .KWD ファイルを使って PHP 言語を追加しました ※ 少しプロセスが多いので、一つづつ確認しながら行ってください ✅ PHP では HTML も同時に表示される事が多いので、以下のように追加します ✅ 第二以降はオレンジで見にくいので変更します。
posted by lightbox at 2021-01-28 18:56 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2021年01月19日


VBScript : Cscript.exe で実行を強制する為の関数( Function Crun ) : Wscript.Echo で止まらないように

Wscript.Echo で止めない為に

WSH のテストをする場合エクスプローラからの起動が便利なわけですが、GUI を使用するとどうしても Wscript.exe が起動されて、デバッグの為に表示している Wscript.Echo が 実行毎にダイアログ表示になってしまいます。 これでは、ループ内で処理している場合等は悲惨な事になります。 そうならない為の関数です。

スクリプト自身から再度 Cscript.exe で実行させる

具体的には Cscript.exe で実行して無かった場合にコマンドプロンプトを開いて、そこから Cscript.exe で自分自身を実行させて、終了したら PAUSE します。( Wscript で実行されたスクリプトは終了させます ) ※ スクリプトへの引数は引継ぎます

サンプルコード( .vbs )

▼ 以下のコードでは、Crun 関数がその部分ですが、それを利用して『デスクトップのショートカットのアイコン情報』の一覧を表示しています。
Call Crun()

Set Shell = WScript.CreateObject( "Shell.Application" )
Set WshShell = WScript.CreateObject( "WScript.Shell" )

' デスクトップ
Set objFolder = Shell.NameSpace( 0 )

Set objFolderItems = objFolder.Items()
' 一覧の数
nCount = objFolderItems.Count

' デスクトップ一覧の列挙
For i = 0 to nCount - 1

	strPath = objFolderItems.Item(i).Path
	' パスをピリオドで分解
	aData  = Split( strPath, "." )
	' 配列の上限値より、一番右端にある拡張子を取得
	strTarget = aData( Ubound( aData ) )
	' 大文字に変換
	strTarget = Ucase( strTarget )

	' デスクトップのショートカットのアイコン情報を取得
	if strTarget = "LNK" then
		' ショートカットへのオブジェクト( 保存はしない )
		Set oShellLink = WshShell.CreateShortcut(strPath)
		strTarget = oShellLink.IconLocation
		' %変数名% で参照される環境変数を展開する
		strTarget = WshShell.ExpandEnvironmentStrings(strTarget)
		if strTarget = ",0" then
			' アイコンは、TargetPath の 0 番目のアイコンを使用
			Wscript.Echo oShellLink.TargetPath
		else
			' アイコンは、strTarget を , で分解して抽出
			Wscript.Echo strTarget
		end if
	end if

Next

' **********************************************************
' Cscript.exe で実行を強制
' Cscript.exe の実行終了後 pause で一時停止
' **********************************************************
Function Crun( )

	Dim str,WshShell

	' 実行中の WSH のフルパス
	str = WScript.FullName
	' 右から11文字取得
	str = Right( str, 11 )
	' 全て大文字に変更
	str = Ucase( str )
	' CSCRIPT.EXE でなければ処理を行う
	if str <> "CSCRIPT.EXE" then
		' 実行中の自分自身(スクリプト)のフルパスを取得
		str = WScript.ScriptFullName

		Set WshShell = CreateObject( "WScript.Shell" )

		' 実行中の自分自身(スクリプト)への引数を引き継ぐ為の文字列を作成
		strParam = " "
		For I = 0 to Wscript.Arguments.Count - 1
			if instr(Wscript.Arguments(I), " ") < 1 then
				strParam = strParam & Wscript.Arguments(I) & " "
			else
				strParam = strParam & Dd(Wscript.Arguments(I)) & " "
			end if
		Next
		' cscript.exe で実行しなおす為のコマンドラインを実行
		Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 1 )
		' 実行中の自分自身(スクリプト)を終了
		WScript.Quit
	end if

End Function
' **********************************************************
' 文字列を " で囲む関数
' **********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function


Microsoft のドキュメント

Shell.NameSpace method ShellSpecialFolderConstants(0はデスクトップ) Folder.Items method CreateShortcut メソッド ExpandEnvironmentStrings メソッド WshShortcut オブジェクト のプロパティ
タグ:VBScript WSH
posted by lightbox at 2021-01-19 00:14 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり