終了直前のウィンドウサイズと位置をファイルに記録して、次回起動時にそのファイルを読み込んで元のサイズ・位置に戻すサンプルを作成しました。
2016年11月29日火曜日
2016年11月24日木曜日
htaのウィンドウをアクティブにする方法
HTA内部でWScript.ShellのAppActivateメソッドを実行しても、HTAのウィンドウをアクティブにすることはできませんが、HTAから外部スクリプトを作成して、そちらからAppActivateを実行すればアクティブにできます。
アクティブにしたいHTAがシングルインスタンス制限を有効にしても良いならば、上記の方法より短いコードで同様の効果を得る方法がありました。
アクティブにしたいHTAがシングルインスタンス制限を有効にしても良いならば、上記の方法より短いコードで同様の効果を得る方法がありました。
ラベル:
HTA,
HTA:Application
2016年11月15日火曜日
指定日時に文章画像や実行ボタンなどを表示させるリマインダーアプリ
デスクトップPC(Windows)用リマインダ―アプリです。
一旦予定を立てたら、その予定に従って行動している最中は日時に対して注意を払わなくて済むように(次の行動に移る日時になったら画面上に必要なものが表示されるように)するためのものです。
よくあるリマインダーアプリと違うところは「表示させるものをJavaScriptなどで制御できる」という点です。
2016年11月14日月曜日
任意のエレメントが画面上に表示されるようにScrollTopを調整する関数
用途・目的
スクロール可能なエレメント内部の任意のエレメントが画面に表示されるようにscrollTopを調整する関数
Chromeなどのブラウザで動くかは未確認。htaで使っています。
Chromeなどのブラウザで動くかは未確認。htaで使っています。
ラベル:
HTA,
JavaScript,
サンプル
2016年11月2日水曜日
WebWorkerで作成したサブスレッドよりメインスレッドは37%ぐらい速い
WebWorkerを使うとJavaScriptでもマルチスレッド処理が可能になります。
ただしメインスレッド以外はHTMLエレメントにアクセス出来ないとかActiveXObjectは使えないとか色々制約があります。
制約があってできることが少ないというのは、逆に言えば「シンプルな状態」であり、もしかして、制約がある代わりに処理が高速だったりするのでは!?と思って先日比較テストしましたが、もう少し分かり易いデータが取得できました。
ただしメインスレッド以外はHTMLエレメントにアクセス出来ないとかActiveXObjectは使えないとか色々制約があります。
制約があってできることが少ないというのは、逆に言えば「シンプルな状態」であり、もしかして、制約がある代わりに処理が高速だったりするのでは!?と思って先日比較テストしましたが、もう少し分かり易いデータが取得できました。
WebWorkerのpostMessageは非同期?
先日サンプルを作成して比較した結果、Workerスレッドの方がわずかに速いという結果になったのですが、数回分の試験データを比較した時に気になった点がありました。
タイトルの通り、postMessageは非同期なのか?ということが気になったので、それをプログラムで動作確認しました。
タイトルの通り、postMessageは非同期なのか?ということが気になったので、それをプログラムで動作確認しました。
2016年11月1日火曜日
Excelに画像とファイル名を一括挿入するプログラム
2016年10月28日金曜日
contentEditableでリッチテキストエディタ
HTML5では全ての要素でcontentEditableプロパティが使えます。
それを利用して「リッチテキスト」を作成するプログラムを作りました。
JavaScriptが扱える人なら容易に機能を拡張することができます。
何気なく思いついて作ってみたけど、なかなかの拡張性で実用性が高そう。
それを利用して「リッチテキスト」を作成するプログラムを作りました。
JavaScriptが扱える人なら容易に機能を拡張することができます。
何気なく思いついて作ってみたけど、なかなかの拡張性で実用性が高そう。
ラベル:
contentEditable,
draggable,
HTML5,
iframe
2016年10月21日金曜日
基数変換
用途・目的
toStringメソッドを使うと36進数までは10進数から変換できます。
37以上を指定すると「引数が不正です」というエラーが出ます。
37以上でも使える基数変換用の関数を作成しました。
37以上を指定すると「引数が不正です」というエラーが出ます。
37以上でも使える基数変換用の関数を作成しました。
ラベル:
JavaScript,
サンプル,
変換
2016年10月14日金曜日
共有フォルダ内のファイルやフォルダを、それを保有するPCからZIP圧縮させるスクリプト
LANで接続された2台のPCがあり、片方はPC1、もう片方はPC2という名前だったとします。
PC1はC:\testを共有フォルダとして設定済みで、PC2からはそのフォルダを参照できます。
この時、PC2からPC1の共有フォルダ内のファイルやフォルダを圧縮する場合、普通にやると水面下では以下のような処理が行われます。
1.PC1の共有フォルダからPC2に圧縮対象のデータが全てコピーされる。
2.PC2で圧縮したデータをPC1にコピーする。
合計サイズが小さいとか、ファイルやフォルダが少ない場合はこれでも問題ありませんが、大量のファイルを圧縮したい場合はネットワークでデータをやりとりする分のロスが大きくなってきます。
それを回避するスクリプトを作成しました。
PC1はC:\testを共有フォルダとして設定済みで、PC2からはそのフォルダを参照できます。
この時、PC2からPC1の共有フォルダ内のファイルやフォルダを圧縮する場合、普通にやると水面下では以下のような処理が行われます。
1.PC1の共有フォルダからPC2に圧縮対象のデータが全てコピーされる。
2.PC2で圧縮したデータをPC1にコピーする。
合計サイズが小さいとか、ファイルやフォルダが少ない場合はこれでも問題ありませんが、大量のファイルを圧縮したい場合はネットワークでデータをやりとりする分のロスが大きくなってきます。
それを回避するスクリプトを作成しました。
2016年10月13日木曜日
ファイルやフォルダをCAB形式で圧縮するスクリプト
先ほどの記事でCAB形式は使わないことにする、と記載しましたが、その結論に至る問題が発覚したのはこの記事で公開するプログラムを作成した後だったのです。
問題はexpandコマンドだけではないですが、それがクリアになったら、もしかしたら心変わりするかもしれませんし、正常に動作するケースもありますので、一応作ったものを公開します。
問題はexpandコマンドだけではないですが、それがクリアになったら、もしかしたら心変わりするかもしれませんし、正常に動作するケースもありますので、一応作ったものを公開します。
expandコマンドにはバグがあると思う
makecabコマンドを使うとCAB形式でファイルを圧縮することができます。
Windowsの標準機能として、コマンドラインから圧縮機能を利用できるなら使いたいと思って少し試してみたのですが、展開用のexpandコマンドが正常に動作しないケースがありましたので履歴として残します。
(将来、このことを忘れて再びmakecabコマンドを使おうとした私が余計な時間を使わずに済むようにするためにも)
Windowsの標準機能として、コマンドラインから圧縮機能を利用できるなら使いたいと思って少し試してみたのですが、展開用のexpandコマンドが正常に動作しないケースがありましたので履歴として残します。
(将来、このことを忘れて再びmakecabコマンドを使おうとした私が余計な時間を使わずに済むようにするためにも)
ラベル:
CAB,
expandコマンド,
extractコマンド,
makecabコマンド,
圧縮,
展開
PsExecでリモートPCのドライブ空き容量を確認する
PsExecというものを使うとリモートPC上でコマンドを実行することができます。
それを利用してリモートPCに接続されているドライブの空き容量を確認するスクリプトを作成しました。
共有設定しているフォルダが保管されているドライブの空き容量が知りたい時に利用します。
それを利用してリモートPCに接続されているドライブの空き容量を確認するスクリプトを作成しました。
共有設定しているフォルダが保管されているドライブの空き容量が知りたい時に利用します。
ラベル:
fsutilコマンド,
net shareコマンド,
PsExec,
リモート
2016年9月16日金曜日
フォルダ内のBMPファイルだけをbmp2png(コマンドライン版)に渡して変換後にBMPだけ削除する
BMP形式の画像ファイルを作成しまくるプログラムを使っています。
その画像について以下の要求がありました。
・画質を劣化させずにファイルサイズを小さくしたい
・サムネイル表示したい
ZIPなどで圧縮してしまうとサムネイル表示が出来なくなってしまいます。
ZIPファイル内にある複数の画像のうち、最初の画像だけを表示するソフトなどはありますが、今回の用途ではZIPファイル内の複数の画像をすべてサムネイル表示する必要がありました。
BMPからPNGへの変換なら画質劣化がなく、PNG形式ならサムネイル表示が可能なのでbmp2pngというソフトを使って変換することにしました。
ついでに、変換したら元のBMPファイルは削除したいので、プログラムを作成しました。
その画像について以下の要求がありました。
・画質を劣化させずにファイルサイズを小さくしたい
・サムネイル表示したい
ZIPなどで圧縮してしまうとサムネイル表示が出来なくなってしまいます。
ZIPファイル内にある複数の画像のうち、最初の画像だけを表示するソフトなどはありますが、今回の用途ではZIPファイル内の複数の画像をすべてサムネイル表示する必要がありました。
BMPからPNGへの変換なら画質劣化がなく、PNG形式ならサムネイル表示が可能なのでbmp2pngというソフトを使って変換することにしました。
ついでに、変換したら元のBMPファイルは削除したいので、プログラムを作成しました。
プログラムが保存されているフォルダのPathを取得する
プログラムが保存されているフォルダに各種情報を保存するフォルダを作成したりする時に使います。
HTAとWSHとで利用できるオブジェクトが異なります。
2016年9月6日火曜日
ウィンドウが非アクティブ状態の時間をカウントするHTA
常にウィンドウをアクティブにしていたいアプリケーションがありますが、文字通り「常に」だと色々と困ることがあるので、数分程度ならアクティブでなくてもOKですが、アクティブではない状態が数分間続いたら、ウィンドウを再起動するなどして再びアクティブにしたいです。
ウィンドウのfocus、blurイベントを検知してカウントするサンプルを作成しました。
ラベル:
HTA,
JavaScript,
サンプル
2016年9月5日月曜日
指定日時から相対的な日時を取得するプログラム
用途・目的
「2016/10/1と同じ曜日は、今週だと○月×日」を調べたり
「次の1:00は○月×日 1:00」などを調べたいことがあったので、日時に関するプログラムを作成しました。
「次の1:00は○月×日 1:00」などを調べたいことがあったので、日時に関するプログラムを作成しました。
2016年9月2日金曜日
いつかやるメモ
今やらなければいけないことがあって、他のことは保留にする必要がある状況なのですが、その優先事項を進めるために色々調べる過程で見かけた情報が、今回はちょっと関係無い内容だったけど今後役に立つ事例もありそうだと感じました。
時間ができたらテストしたいので思い出せるようにメモ
時間ができたらテストしたいので思い出せるようにメモ
AppActivateはHTA内部のスクリプトでは動作しない
動作しませんが実行してもエラーは出ません。
それが良いのか悪いのかは分かりませんが、とりあえず外部スクリプトを作成してそちらから実行するようにすれば動作するようです。
以下がサンプルHTAのソースです。
それが良いのか悪いのかは分かりませんが、とりあえず外部スクリプトを作成してそちらから実行するようにすれば動作するようです。
以下がサンプルHTAのソースです。
ラベル:
HTA,
JavaScript,
rundll32,
user32.dll,
VBScript
2016年8月26日金曜日
リテラルの外部化は、もう、してもしなくても良いようです
用途・目的
chrome52.0.2743.116の結果

ie11.0.9600.18426の結果

htaの結果

ループ処理を行う場合、リテラルを外部化すると処理が高速化できる、という記事を数年前に読んだ当時に自分の環境でもテストした結果、確かに効果があったので、それ以来ずっと外部化していたのですが、同時に「処理系が賢くなれば、リテラル最適化は処理系が勝手にやれる筈…変数を使うやり方は余計な宣言がある分、逆に遅くなってしまうのでは?」とも思っていました。
気にするほどの差ではないことは経験的に分かっていましたが、気になるタチなので確認してみました。
結論としては、現代のブラウザやHTAではリテラルを外部化してもしなくても速度は変わらないようです。
下記ソースのループ1は普通のループ処理で、ループ2は外部化したループ処理です。
ソース
気にするほどの差ではないことは経験的に分かっていましたが、気になるタチなので確認してみました。
結論としては、現代のブラウザやHTAではリテラルを外部化してもしなくても速度は変わらないようです。
下記ソースのループ1は普通のループ処理で、ループ2は外部化したループ処理です。
サンプル
chrome52.0.2743.116の結果

ie11.0.9600.18426の結果

htaの結果

配列の要素0番目からlength-1番目までを処理する関数
用途・目的
配列の要素0番目からL-1番目までを処理するループの使用頻度が高いです。
ループをネストする際、添え字を扱う変数の名前でトラブルが起きがちです。
以下の関数を利用すると
・for(var i=0,L=arr.length;i<L;i++){~}という文章をほんの少し短くかけます。
・添え字を扱う変数名の重複を避けられます。
ただし、以下の問題があります。
・break labelができない。(私はほぼ使わないので関係ありませんが。。)
ちなみに、for(var i=0;i<arr.length;i++){~}だとlengthの長さの読み込み回数が増えるため、速度が遅くなります。
ループをネストする際、添え字を扱う変数の名前でトラブルが起きがちです。
以下の関数を利用すると
・for(var i=0,L=arr.length;i<L;i++){~}という文章をほんの少し短くかけます。
・添え字を扱う変数名の重複を避けられます。
ただし、以下の問題があります。
・break labelができない。(私はほぼ使わないので関係ありませんが。。)
ちなみに、for(var i=0;i<arr.length;i++){~}だとlengthの長さの読み込み回数が増えるため、速度が遅くなります。
ラベル:
JavaScript,
TIPS,
サンプル
2016年8月25日木曜日
WSHやHTAでプログラムを作成する時によく使う定型文
ファイルの入出力やリストの取得などを行う独自関数は利用頻度が高く、かなり使いまわしています。そういう便利で大事なものを、バックアップのためにもまとめてみました。
2016年8月10日水曜日
コメントの行数をカウント
プログラムを作るときは出来るだけシンプルにしよう、と思っています。
行数はシンプルさの簡易的な指標になります。
しかし、分かりやすくするためにコメントを沢山書くと、その分行数が増してしまいますので、行数の増加が「コメントが増えた」ことによるのか「プログラムが長くなった」なのかが分からなくなります。
あくまで簡易的な指標でしかありませんが、コメントとプログラムの行数が修正前後でどのように変化したのか確認したいと思いました。
以下のテキストエリアにプログラムを貼りつけるとコメントなどの行数をカウントします。
コメント行として判定するのは「//」で始まる行に限定していますのでJavaScript専用です。
「/**/」とかは考慮しません。あくまで簡易的なものなので…
行数はシンプルさの簡易的な指標になります。
しかし、分かりやすくするためにコメントを沢山書くと、その分行数が増してしまいますので、行数の増加が「コメントが増えた」ことによるのか「プログラムが長くなった」なのかが分からなくなります。
あくまで簡易的な指標でしかありませんが、コメントとプログラムの行数が修正前後でどのように変化したのか確認したいと思いました。
以下のテキストエリアにプログラムを貼りつけるとコメントなどの行数をカウントします。
コメント行として判定するのは「//」で始まる行に限定していますのでJavaScript専用です。
「/**/」とかは考慮しません。あくまで簡易的なものなので…
2016年8月6日土曜日
ファイルを復元するソフトを比較
SanDiskのSDカードを購入しました。
購入者特典として、有料の復元ソフトが1年間利用できるというライセンスがついていました。
先日作成した埋め尽くす.htaによって抹消したつもりのデータは無料の復元ソフト(Puran File Recovery)では復元できないことを確認済みですが、有料のソフトでも復元できないのか、確認してみました。
購入者特典として、有料の復元ソフトが1年間利用できるというライセンスがついていました。
先日作成した埋め尽くす.htaによって抹消したつもりのデータは無料の復元ソフト(Puran File Recovery)では復元できないことを確認済みですが、有料のソフトでも復元できないのか、確認してみました。
2016年8月5日金曜日
ファイルにタグを付けて管理するソフトを改良した
先日公開したtags.wsfを数日間、自分で使いこんでみて、使い勝手を良くするためのアイデアがいくつか浮かんだので、それを反映したものを作成しました。
tags.wsfはドラッグ&ドロップで使うことを基本としていますが、今回作成したものはキーボードでの操作を前提とした設計になっていて、tags.wsfのバージョンUP版という位置づけではないのでtags.wsfのソースは変更していません。
tags.wsfはドラッグ&ドロップで使うことを基本としていますが、今回作成したものはキーボードでの操作を前提とした設計になっていて、tags.wsfのバージョンUP版という位置づけではないのでtags.wsfのソースは変更していません。
2016年8月3日水曜日
showModalDialogで入力用ウィンドウを表示する
メインウィンドウとは別で小さいウィンドウを表示して、その小さいウィンドウに何か入力するか閉じるかしないとメインウィンドウを操作できない状態にするサンプルを作成しました。
ラベル:
HTA,
showModalDialog,
モーダルダイアログ
2016年7月29日金曜日
tags.wsfの動作速度を確認
2016年7月28日木曜日
タグでファイルやフォルダを管理するソフト
ブログの記事をラベルで分類してみたら、ちょっと便利な気がしました。
ローカルのファイルやフォルダも同じように分類できたら便利かも?と思いました。
タグで分類するEvernoteは一時期(今も?)流行してたと思います。
そういうことができるソフトがあるのでは、と検索してみましたが、既存のソフトにはそれぞれ一長一短あるようです。
管理対象のファイルそのものには何も手を加えずに、ファイルを移動しても対応できるタグ管理ソフトが欲しいと思い、作りました。
ローカルのファイルやフォルダも同じように分類できたら便利かも?と思いました。
タグで分類するEvernoteは一時期(今も?)流行してたと思います。
そういうことができるソフトがあるのでは、と検索してみましたが、既存のソフトにはそれぞれ一長一短あるようです。
管理対象のファイルそのものには何も手を加えずに、ファイルを移動しても対応できるタグ管理ソフトが欲しいと思い、作りました。
2016年7月27日水曜日
ExcelVBAでファイルの一覧を取得する方法の速度を比較
Excelでファイルの一覧を取得する方法はいくつかあります。ソースのシンプルさを考えるとDir関数一択ですが、速度的にはどうなのか、試してみました。
2016年7月26日火曜日
selectタグの選択肢の中から任意の文字列を含むoptionを探すブックマークレット
セレクトボックスの項目数が多すぎて、選択したい項目を見つけ出すのに苦労することがあります。
任意の項目の先頭文字列が分かっていればセレクトボックスを選択した状態でキーボードから先頭文字列を入力すれば良いのですが、そのテクニックは先頭文字列が分からない場合は使えません。
わりと困っているのでブックマークレットで解決することにしました。
2016年7月9日土曜日
ローレベル バックアップ.htaを作成した
世の中にはRAIDなど、色々な手段がありますが、利用するには事前に勉強や検証などが必要だったりします。
どうせ手間をかけるのなら、後で自分のやりたいように処理を変えられるやり方で、最低限のことが出来ればとりあえずOKかなと思い、今こんなの作ってます。
※2016/07/12追記:ちょっと色々と忙しくなってしまい、あまり進んでませんが、とりあえずバックアップの方はサブフォルダにも対応しました。テスト機能はまた後日。
※2016/07/20追記:テスト機能も作成しました。自動化するか悩んでます。しばらく使ってみてから必要なら改良します。
2016年6月30日木曜日
社内webにアップロードするファイルからネットワークドライブ上のファイルにリンクする
先日「ドラッグ&ドロップされたファイルからハイパーリンクを作成する」というサンプルを作成しましたが、このサンプルが出力したPathが使えるのは「コマンドを指定して実行」画面や

エクスプローラのアドレスバーなどです。

サンプルで作成したハイパーリンクをWordファイルなどに貼りつけることは可能ですが、そのWordファイルが「http://~」で始まるアドレスに移動した場合、そのリンクは無効になってしまいます。

「http://~」で始まるアドレスに移動する場合は、ハイパーリンクのリンク先アドレスを少し変える必要があります。

エクスプローラのアドレスバーなどです。

サンプルで作成したハイパーリンクをWordファイルなどに貼りつけることは可能ですが、そのWordファイルが「http://~」で始まるアドレスに移動した場合、そのリンクは無効になってしまいます。

「http://~」で始まるアドレスに移動する場合は、ハイパーリンクのリンク先アドレスを少し変える必要があります。
2016年6月29日水曜日
WebWorkerでナンプレを解くサンプルを作成しました
WebWorkerの利用例として適切なテーマを模索中。
そこそこの計算コストが必要でマルチスレッドにも向いている……と思いナンプレを選んでみましたが、作ってみたら25x25でもサブスレッド1つで2秒で解けちゃいました。
捨てるのも勿体ないので公開します。
そこそこの計算コストが必要でマルチスレッドにも向いている……と思いナンプレを選んでみましたが、作ってみたら25x25でもサブスレッド1つで2秒で解けちゃいました。
捨てるのも勿体ないので公開します。
2016年6月27日月曜日
2016年6月24日金曜日
WebWorker使用時のメインスレッドとサブスレッドの速度比較
WebWorkerを使うとJavaScriptでもマルチスレッドな処理ができます。
ただし、メインスレッドではdocumentエレメントなどのDOMにアクセスできますが、サブスレッド側からはDOMにはアクセスできません。アクセスしようとするとエラーになります。他にもActiveXObjectなどが使えないなど、サブスレッド側には色々な制約があります。
そのため、サブスレッド側でできることは非常に限られていて、使いどころがあまりないです。。
しかし、ふと思ったのですが「様々な機能をそぎ落として基本的なことしかできないようになっているスレッドは、メインスレッドより高速な処理が可能なのでは?」とデメリットがメリットに転じる可能性を検証したくなりました。
ただし、メインスレッドではdocumentエレメントなどのDOMにアクセスできますが、サブスレッド側からはDOMにはアクセスできません。アクセスしようとするとエラーになります。他にもActiveXObjectなどが使えないなど、サブスレッド側には色々な制約があります。
そのため、サブスレッド側でできることは非常に限られていて、使いどころがあまりないです。。
しかし、ふと思ったのですが「様々な機能をそぎ落として基本的なことしかできないようになっているスレッドは、メインスレッドより高速な処理が可能なのでは?」とデメリットがメリットに転じる可能性を検証したくなりました。
無効なPathの、有効な部分を調べるプログラムを作成した
2016年6月23日木曜日
ネットワークドライブ上で動作する簡易的な伝言板
テキストファイルを使った簡易的な伝言板を作成しました。
起動中は定期的にファイルが読み込まれて、常に最新の情報が表示されます。
伝言板の画面上でテキストを編集すると、即座にファイルに反映されます。(ファイルを選ぶ、開く、保存などの手間を省略しています)
プログラムも出力ファイルもすべてがメモ帳で表示・編集可能なので自由に改造できます。
起動中は定期的にファイルが読み込まれて、常に最新の情報が表示されます。
伝言板の画面上でテキストを編集すると、即座にファイルに反映されます。(ファイルを選ぶ、開く、保存などの手間を省略しています)
プログラムも出力ファイルもすべてがメモ帳で表示・編集可能なので自由に改造できます。
ラベル:
HTA,
ローカルネットワーク,
自動更新
2016年6月17日金曜日
cipherコマンドでドライブ内のデータを完全に削除する
ファイルやフォルダを削除しても運が良ければ復元できます。誤って削除してしまった場合には復元できた方が良いのですが、機密情報の入っているHDDを廃棄したい場合は復元できてしまっては困ります。HDDに入っていたものを復元できないようにするためにcipherというコマンドが利用できるのですが、これは使用する上で色々と注意が必要です。
今回はその注意点について解説します。(次の記事でそれを気にしなくて良いサンプルを公開します)
2016/06/17追記:ストレージの廃棄を目的としてcipherを実行する場合に必要な下準備からcipher実行までを自動化するサンプルを作成しました。
2016/07/04追記:記事末尾にも追記しましたが、cipherで処理したHDDからでも復元できるソフトがあるようです。。
2016/07/06追記:cipherに比べて非常に時間がかかりますが復元ソフトで元のファイルを取り出すことができない状態にすることができました。記事末尾に詳細を追記しました。
2016/07/07追記:アロケーションユニットサイズを大きくすることで、高速に埋め尽くすことが出来ることを確認しました。埋め尽くすためのプログラムを公開しました。
2016/07/13追記:埋め尽くす.htaのソースを修正しました。(処理中断ができるようにした。処理終了or中断時に、WSFファイルを削除するようにした。空き容量が0になったらHTA側も停止するようにした)
2016/06/17追記:ストレージの廃棄を目的としてcipherを実行する場合に必要な下準備からcipher実行までを自動化するサンプルを作成しました。
2016/07/04追記:記事末尾にも追記しましたが、cipherで処理したHDDからでも復元できるソフトがあるようです。。
2016/07/06追記:cipherに比べて非常に時間がかかりますが復元ソフトで元のファイルを取り出すことができない状態にすることができました。記事末尾に詳細を追記しました。
2016/07/07追記:アロケーションユニットサイズを大きくすることで、高速に埋め尽くすことが出来ることを確認しました。埋め尽くすためのプログラムを公開しました。
2016/07/13追記:埋め尽くす.htaのソースを修正しました。(処理中断ができるようにした。処理終了or中断時に、WSFファイルを削除するようにした。空き容量が0になったらHTA側も停止するようにした)
ラベル:
cipherコマンド,
DISKPARTコマンド,
HDD,
HTA,
NTFS,
SSD,
WSH,
アロケーションユニットサイズ,
データ復元,
データ抹消
2016年6月15日水曜日
ドラッグ&ドロップされたファイルからハイパーリンクを作成する
フォルダやファイルのPathをメールに添付する時に、単純な文字列ではなくハイパーリンク化すると、相手は「文字列をコピー → Win + R → 貼りつけ → Enter」などの手間なく、クリックするだけで開けるようになりますが、ハイパーリンクを作成する方法はメールソフトによっては少し面倒なやり方だったりします。その煩わしさを回避するためのサンプルを作成しました。Wordなどでもハイパーリンクの作成がラクになります。
※2016/06/17 21:00追記:ウィンドウサイズを内容に合わせて(6/17 1:00更新時よりも更に)適切なサイズになるように修正しました。あと、多重起動した場合は後始末のところでエラーが出てしまっていましたが、そちらも修正しました。
※2016/06/17 21:00追記:ウィンドウサイズを内容に合わせて(6/17 1:00更新時よりも更に)適切なサイズになるように修正しました。あと、多重起動した場合は後始末のところでエラーが出てしまっていましたが、そちらも修正しました。
2016年6月14日火曜日
フォルダやファイルの名前に含まれる特定の文字列を変換する.wsf
WSFファイルにドラッグ&ドロップされたアイテムの名前に特定の文字列が含まれていたらリネームするサンプルを作成しました。フォルダを指定した場合はフォルダ内のサブフォルダ、ファイルをシラミツブシに判別&変換していきます。
2016年6月13日月曜日
共有フォルダを追加、削除するサンプル
WSHのMSDNには共有フォルダを追加するサンプルがありますが、説明が難解でサンプルも長くて難しいです。VBScriptですし。
コマンドを使ってもっとシンプルに実行するサンプルを作成しました。
コマンドを使ってもっとシンプルに実行するサンプルを作成しました。
2016年6月11日土曜日
メロンとメロンパンみたいなもの
プログラミングをするのが本業ではない職場で私がJavaScriptを使っている時に、上司から「君が作っているJavaのファイルについて教えて欲しいんだけど」と言われたことがありました。
私はJavaは使ったことがありません。よく知らないです。
Javaと比べるとJavaScriptは変数の型が動的だとか引数は基本的に省略可能だとか色々違う点があるだろうと思い、そんな感じで上司には説明したのですが、理解を得ることができませんでした。
上記の出来事は数年前の出来事で、今は職場も上司も違いますが、当時の上司にはタイトルのように説明したら分かりやすかったかなと今さら思いました。
名前は少し似てますし見た目も若干共通するところがありますが、モノとしては全く別物です。と。
私はJavaは使ったことがありません。よく知らないです。
Javaと比べるとJavaScriptは変数の型が動的だとか引数は基本的に省略可能だとか色々違う点があるだろうと思い、そんな感じで上司には説明したのですが、理解を得ることができませんでした。
上記の出来事は数年前の出来事で、今は職場も上司も違いますが、当時の上司にはタイトルのように説明したら分かりやすかったかなと今さら思いました。
名前は少し似てますし見た目も若干共通するところがありますが、モノとしては全く別物です。と。
2016年6月10日金曜日
ADO警告画面が出ないスクリプトファイルのサンプル
HTAでMySQLなどを利用したい場合、ADODB.Connectionを使用しますが、これはOpenメソッドを実行するたびに以下のようなメッセージが表示されます。

このメッセージが表示されないようにするサンプルを作成しました。

このメッセージが表示されないようにするサンプルを作成しました。
ラベル:
ADO セキュリティ 警告,
ADODB.Connection,
HTA,
非表示化
タスクマネージャでwshの実行ファイルの名前を分かりやすくする
WSFファイルを普通に起動すると、タスクマネージャのプロセスタブに表示されるイメージ名は「wscript.exe」になります。
使用するファイルが一つ二つ程度なら問題ありませんが、さまざまな用途のファイルを使用してバックグラウンドでループ実行するようなものを使い始めるとタスクマネージャの表示がこんな感じになってきます。
使用するファイルが一つ二つ程度なら問題ありませんが、さまざまな用途のファイルを使用してバックグラウンドでループ実行するようなものを使い始めるとタスクマネージャの表示がこんな感じになってきます。
2016年6月9日木曜日
MSDNの「エクスポート」を使ってみた
scd56jp.exeがダウンロードできなくてショックだった、けどMSDNのページには「エクスポート」という機能が付いてるのに気が付いた。
コレを使えば同等の情報をオフラインで閲覧できるようになるのでは!と思って試した。
結論から言うと、頑張れば出来そう。でもめんどい。
コレを使えば同等の情報をオフラインで閲覧できるようになるのでは!と思って試した。
結論から言うと、頑張れば出来そう。でもめんどい。
script56.chmがダウンロードできない
私はWSHなどでスクリプトを利用する際、[Microsoft Windows スクリプト テクノロジ]のページを利用しています。
嘘です。上記サイトと同じ内容を持つヘルプファイルを使用してます。
よく使うのでデスクトップに保存してます。
ラベル:
HTA,
script56.chm,
WSH
iframeを使って任意のページをスクリプトから利用する
iframeに任意のページを表示して、ページ内の情報を利用したりエレメントを操作するサンプルを作成しました。
色々と問題が起きやすい手法ですが、一時的な対応としては使えます。
色々と問題が起きやすい手法ですが、一時的な対応としては使えます。
2016年6月8日水曜日
バイナリデータを読み書きするサンプル
バイナリ形式でファイルを読んだり書いたりできます。
このサンプルファイルに適当なファイルをドラッグ&ドロップすると、そのファイルと同じフォルダに「(ファイル名)_書き換え後」というファイルを作成します。
書き換えたい場合は一番下の実行結果の画像を参考にして、書き換えたい部分の特定&リプレイスして、改行コードを削除してからbin_write関数に渡してください。
このサンプルファイルに適当なファイルをドラッグ&ドロップすると、そのファイルと同じフォルダに「(ファイル名)_書き換え後」というファイルを作成します。
書き換えたい場合は一番下の実行結果の画像を参考にして、書き換えたい部分の特定&リプレイスして、改行コードを削除してからbin_write関数に渡してください。
2016年6月6日月曜日
ファイル名をもとにファイルをフォルダ分けするスクリプト
フォルダ内のファイルを一定のルールでフォルダ分けしたい場合があります。
ファイル数が多すぎるフォルダは取扱いが色々と面倒ですし。
エクスプローラの検索フィルターを併用して、手作業で何とかなる程度のファイル数ならプログラムは不要ですが、グループの数が多すぎる場合はプログラムを使った方がラクです。
dirコマンドによるファイルのリスト取得を使ってフォルダ分けするサンプルを作成しました。
ファイル数が多すぎるフォルダは取扱いが色々と面倒ですし。
エクスプローラの検索フィルターを併用して、手作業で何とかなる程度のファイル数ならプログラムは不要ですが、グループの数が多すぎる場合はプログラムを使った方がラクです。
dirコマンドによるファイルのリスト取得を使ってフォルダ分けするサンプルを作成しました。
[JSON形式?]オブジェクトをテキストに変換する[evalで復元可能]
数値や文字列、関数や配列など様々な型のプロパティを持つオブジェクトをテキストに変換するプログラムを作成しました。
作成したテキストをeval関数に渡すと元通りのオブジェクトが作成できます。
ただし以下のような、循環参照を含むオブジェクトを渡すと無限ループしてしまいます。
作成したテキストをeval関数に渡すと元通りのオブジェクトが作成できます。
ただし以下のような、循環参照を含むオブジェクトを渡すと無限ループしてしまいます。
[循環参照を含むオブジェクトの例] obj = {a:0, b:1} obj.c = obj
ブックマークレットと複数行テキストを双方向に変換するJavaScript
ブックマークレットは1行にまとめられていて、文字数にも制限があるため処理に無関係な空白は基本的にありません。
そのため編集の難易度は普通のプログラムよりも高いです。
少しでも見やすく、編集しやすい状態にするためのサンプルを作成しました。
また、複数行のテキストから余分なスペースや改行を取り除くサンプルも作成しました。
そのため編集の難易度は普通のプログラムよりも高いです。
少しでも見やすく、編集しやすい状態にするためのサンプルを作成しました。
また、複数行のテキストから余分なスペースや改行を取り除くサンプルも作成しました。
2016年6月3日金曜日
dirコマンドによるファイル(フォルダ)のリストを取得する
フォルダの中にあるフォルダやファイルのリストを使って何かの処理を行うプログラムを作る時があります。そういう時に使うサンプルを作成しました。
ラベル:
dirコマンド,
Enumerator,
WSH,
ドラッグアンドドロップ,
ファイル,
フォルダ,
リスト取得,
比較
FFmpegでムービーファイルをH265形式に変換するスクリプト
FFmpegをダウンロードして、コマンドラインで「ffmpeg.exe -i C:\movie\h264.mp4 -vcodec libx265 C:\movie\h265\h264_変換済み.mp4」などと入力すれば、手持ちのムービーファイルをh265形式に変換することができ、画質を維持してファイルサイズを半分以下にすることができます。
しかし1ファイルごとにコマンド入力するのは面倒です。
ドラッグ&ドロップで実行できるようにするスクリプトを作成しました。
しかし1ファイルごとにコマンド入力するのは面倒です。
ドラッグ&ドロップで実行できるようにするスクリプトを作成しました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
shell = new ActiveXObject('WScript.Shell') | |
ffmpeg = fs.GetParentFolderName(WScript.ScriptFullName)+'\\ffmpeg.exe' | |
// WScript.Echo(ffmpeg) | |
arg = WScript.Arguments | |
if(!arg.length){ | |
WScript.Echo('変換するファイルをD&Dしてください') | |
WScript.Quit() | |
} | |
fun = function(str){return str.indexOf(' ')>0 ? ('"'+str+'"') : str} | |
path_h265 = fs.GetParentFolderName(arg(0))+'\\h265' | |
if(!fs.FolderExists(path_h265)){ fs.createFolder(path_h265) } | |
for(i=0,L=arg.length;i<L;i++){ | |
path = arg(i) | |
pathOut = path_h265+'\\'+fs.GetBaseName(path)+'.mp4' | |
shell.run(ffmpeg+' -i '+fun(path)+' -vcodec libx265 '+fun(pathOut), 1, true) | |
} | |
</script> | |
</job> |
2016年6月2日木曜日
ExcelVBAでファイル選択画面(複数選択可)を表示する
ExcelVBAには「GetOpenFilename」というメソッドがあり、それの使用例がヘルプにも記載されています。しかしその使用例は単一ファイルを選択する場合に限って有効であり「MultiSelect」引数をtrueにしている場合はエラーが発生します。
「MultiSelect」をtrueにした場合でもエラーが出ないサンプルを作成しました。
「MultiSelect」をtrueにした場合でもエラーが出ないサンプルを作成しました。
ラベル:
Excel,
GetOpenFilename,
MultiSelect,
VBA
アドセンス側でページビューがカウントされ始めました
以前から、ブロガーの管理画面で「投稿」タブを見ると、各記事が数回程度表示されていることになっていましたが、昨日まではアドセンスの管理画面側では「ページビュー:0」になっていました。
2016年6月1日水曜日
WSHとは、Windowsでよく繰り返す作業の手間を減らすツール
使用するのに必要なものは基本的にはWindowsだけです。
メモ帳で作成、編集ができます。
例えば、Excelでファイルを読み取り専用で開きたい場合、以下の文字列を
メモ帳で作成、編集ができます。
例えば、Excelでファイルを読み取り専用で開きたい場合、以下の文字列を
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
excel = new ActiveXObject('Excel.Application') | |
excel.Visible = true | |
excel.Workbooks.Open(WScript.Arguments(0) , 1 , true) | |
</script> | |
</job> |
文字数を表示する
SEO的に「タイトルは32文字が最適」らしいです。
SEOで適切なページタイトルタグの付け方 Google検索結果の文字数(長さ)、キーワード数
タイトルタグ(title)のSEOに最適な文字数や記入方法
文字を数えるのが面倒なので入力中の文字列の長さを表示するサンプルを作成しました。
SEOで適切なページタイトルタグの付け方 Google検索結果の文字数(長さ)、キーワード数
タイトルタグ(title)のSEOに最適な文字数や記入方法
文字を数えるのが面倒なので入力中の文字列の長さを表示するサンプルを作成しました。
ラベル:
JavaScript,
カウント,
文字数
[アドセンス]Bloggerの同じアカウントで運用する別ブログへの広告貼りつけ
2016年5月31日火曜日
[WSH]Excelファイルを読み取り専用で開く
「読み取り専用」でExcelで開くサンプル。
起動中のExcelがあれば、それで開く。なければ新しいExcelを起動して、そのExcelで開く。
起動中のExcelがあれば、それで開く。なければ新しいExcelを起動して、そのExcelで開く。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script language=JScript> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
arg = WScript.Arguments | |
if(!arg.length){WScript.Quit()} | |
try{var excel = GetObject('','Excel.Application')}catch(e){var excel = new ActiveXObject('Excel.Application')} | |
excel.Visible = true | |
for(i=0,L=arg.length; i < L ;i++){ | |
excel.Workbooks.Open(arg(i) , 1 , true) | |
} | |
</script> | |
</job> |
[WSH]FTPコマンドファイルを作成・実行
FTPコマンドファイルを作成して、FTP起動オプションでそのファイルを指定して処理してもらうサンプル。
転送を自動化した場合、コマンドファイルをいくつか抜き取り確認して内容に問題が無いか見るときなどに使用する。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
Read = function(p){try{var r=fs.OpenTextFile(p),v=r.ReadAll();r.Close();return v}catch(e){alert('Read Err.\n'+p)}} | |
path = fs.GetSpecialFolder(2) + '/' + fs.GetTempName() + '.ftp' | |
cmd = [ | |
'open 192.168.1.1', | |
'USER', | |
'PASSWORD', | |
'binary', | |
'cd /var/www/doc', | |
'lcd "\\\\PC1\\ABC"', | |
'put ABCDE.csv', | |
'quote site chmod 755 ABCDE.csv', | |
'close', | |
'bye' | |
].join('\r\n') | |
ws = fs.CreateTextFile(path) | |
ws.Write(cmd) | |
ws.Close() | |
// ファイルの内容が出力内容と一致するまで待たないと、コマンドファイルが中途半端な状態で次の処理に進んでしまう場合があるので | |
// 内容が一致するまでループする。 | |
while(true){ | |
WScript.Sleep(1000) | |
if(Read(path)==cmd){break} | |
} | |
shell = new ActiveXObject('WScript.Shell') | |
shell.Run('%windir%/system32/ftp -s:"' + path + '"' , 0) | |
</script> | |
</job> |
2016年5月30日月曜日
アドセンスの有効化が完了した
2016年5月27日金曜日
FTPサーバからファイルをダウンロードするWSF
コマンドファイルを作成してftp.exeに渡すという手もあるけど、まずはWSHのみでダウンロードするサンプル。
列挙されるアイテムは全てファイルという前提になってます。フォルダがある場合は想定していません。
列挙されるアイテムは全てファイルという前提になってます。フォルダがある場合は想定していません。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
Write = function(path,v){with(fs.CreateTextFile(path)){Write(v);Close()}} | |
Write8 = function(path,v){with(fs.OpenTextFile(path,8,true)){Write(v);Close()}} | |
d = new Date() | |
二桁 = function(v){var t='0'+v, L=t.length; return t.slice(L-2,L)} | |
path = fs.GetAbsolutePathName([d.getFullYear(),二桁(d.getMonth()+1),二桁(d.getDate())].join('-')) | |
if(!fs.FolderExists(path)){fs.createFolder(path)} | |
// FTP接続でパラメータファイルをダウンロードする | |
shell = new ActiveXObject('Shell.Application') | |
remoteF = shell.NameSpace('ftp://USER:PASSWORD@192.168.250.1/home/parameter') | |
localF = shell.NameSpace(path) | |
for(i=0,L=remoteF.items().count; i<L ;i++){ | |
アイテム = remoteF.items().item(i) | |
名前 = アイテム.Name | |
サイズ = アイテム.Size | |
localF.copyHere(アイテム) | |
カウント = 0 | |
// localに「名前」のファイルが出来るまで待つループ | |
while(!fs.FileExists(path+'/'+名前)){ | |
WScript.Sleep(500) | |
if(++カウント>100){ | |
// 100回カウントしてもダメなら諦める | |
Write8(path+'/log.txt','timeout\t'+名前+'\r\n') | |
break | |
} | |
} | |
// ダメだった場合は次のファイルのトライに移る | |
if(!fs.FileExists(path+'/'+名前)){continue} | |
while(true){ | |
ファイル = fs.GetFile(path+'/'+名前) | |
if(ファイル.Size==サイズ){break} | |
if(++カウント>100){ | |
Write8(path+'/log.txt','timeout\t'+名前+'\tサイズ不足\r\n') | |
break | |
} | |
} | |
} | |
</script> | |
</job> |
2016年5月26日木曜日
各PC、各ユーザのログオン状況を確認する
誰がどのPCを利用中で、どのPCが空きなのか分かるようにしたい時に使用するプログラム。
以下のプログラムを、状態把握したいPCのグループポリシーに登録すると履歴が残るようになります。
以下のプログラムを、状態把握したいPCのグループポリシーに登録すると履歴が残るようになります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
net = new ActiveXObject('WScript.Network') | |
d = new Date() | |
path = fs.getParentFolderName(WScript.ScriptFullName) | |
ws = fs.OpenTextFile(path + '/履歴.txt', 8, true) | |
モード = WScript.Arguments(0) | |
二桁 = function(s){s='0'+s;return s.slice(s.length-2,s.length)} | |
ws.Write( | |
[ | |
[d.getFullYear(),二桁(d.getMonth()+1),二桁(d.getDate())].join('/')+' '+[二桁(d.getHours()),二桁(d.getMinutes()),二桁(d.getSeconds())].join(':'), | |
モード, | |
net.userName, | |
net.computerName | |
].join('\t')+'\r\n' | |
) | |
ws.Close() | |
pathPC = path+'/computerName/'+net.computerName+'/'+net.userName | |
pathUser = path+'/userName/' +net.userName +'/'+net.computerName | |
makeFolders = function(path){ | |
var arr=path.replace(/\\/g,'/').split('/'), i=1 | |
if(!arr[0] && !arr[1]){i=4} | |
for(var L=arr.length;i<L;i++){ | |
if(!fs.FolderExists(arr.slice(0,i).join('\\'))){ | |
fs.CreateFolder(arr.slice(0,i).join('\\')) | |
} | |
} | |
} | |
switch(モード){ | |
case 'ログオン': | |
makeFolders(pathPC +'/1') | |
makeFolders(pathUser+'/1') | |
break | |
case 'ログオフ': | |
fs.FolderExists(pathPC ) ? fs.DeleteFolder(pathPC ) : 0 | |
fs.FolderExists(pathUser) ? fs.DeleteFolder(pathUser) : 0 | |
break | |
} | |
</script> | |
</job> |
1.グループポリシーを開く

2.ユーザーの構成 → Windowsの設定 → スクリプト(ログオン/ログオフ)

3.「編集」ボタンをクリック

4.「スクリプト名」にスクリプトのUNCパスを入力する。パラメーターは「ログオン」の「スクリプトの編集」画面では「ログオン」を入力。「ログオフ」の方は「ログオフ」にする。

以上で、次回のログオン・ログオフ時から以下のような履歴が残ります。

2.ユーザーの構成 → Windowsの設定 → スクリプト(ログオン/ログオフ)

3.「編集」ボタンをクリック

4.「スクリプト名」にスクリプトのUNCパスを入力する。パラメーターは「ログオン」の「スクリプトの編集」画面では「ログオン」を入力。「ログオフ」の方は「ログオフ」にする。

以上で、次回のログオン・ログオフ時から以下のような履歴が残ります。
[履歴] スクリプトと同じフォルダ ├ computerName | ├ PC1 | | └ User1 | └ PC2 └ userName ├ User1 | └ PC1 ├ User2 └ User3
上記の場合、PC1はUser1がログオン中(「ユーザーの切り替え」でユーザー選択画面になっていてもこの状態)
PC2は誰もログオンしていない。
User1はPC1にログオン中。リモートデスクトップなどでPC2にログオンすれば、userName\User1の下にPC2のフォルダが作成される。
User2、User3はどのPCにもログオンしていない。
User1がPC1からログオフすると、computerName\PC1\User1は削除される。
PC2は誰もログオンしていない。
User1はPC1にログオン中。リモートデスクトップなどでPC2にログオンすれば、userName\User1の下にPC2のフォルダが作成される。
User2、User3はどのPCにもログオンしていない。
User1がPC1からログオフすると、computerName\PC1\User1は削除される。
2016年5月25日水曜日
[WSH]ZIPファイルを作成して、その中にファイルやフォルダを入れる[JScript]
ZIPファイルを作成して、その中にファイルやフォルダをコピーするプログラムのサンプル。
MS系のScriptingの神とも呼ばれる吉岡 照雄さんの作品を参考にさせていただきました。
なぜそのまま利用させてもらわないのかと言えば、私はVBScriptが苦手で、出来るだけJScriptを利用したいからです。。
最初にZIPファイルを作成してますが、何故コレでZIPファイルが出来るのか意味不明です。。
「アイテム数」はコピー完了確認用ループに入る前に毎回取得してますが、「for(i=0」のところでアイテム数=0にして、そのあとはインクリメントで完了確認ループ中のみ取得するようにした方が高速になるのでは?とか、
何かのトラブルでコピー完了確認のループが終わらない場合はフリーズしちゃう…とか、プログラムを見直して気になる点はありますが、今までコレを利用していて速度が気になったりフリーズしたりということが無かったので、そのままにしときます。
※右記のOSでのみ動作確認済み:Win7、XP
MS系のScriptingの神とも呼ばれる吉岡 照雄さんの作品を参考にさせていただきました。
なぜそのまま利用させてもらわないのかと言えば、私はVBScriptが苦手で、出来るだけJScriptを利用したいからです。。
最初にZIPファイルを作成してますが、何故コレでZIPファイルが出来るのか意味不明です。。
「アイテム数」はコピー完了確認用ループに入る前に毎回取得してますが、「for(i=0」のところでアイテム数=0にして、そのあとはインクリメントで完了確認ループ中のみ取得するようにした方が高速になるのでは?とか、
何かのトラブルでコピー完了確認のループが終わらない場合はフリーズしちゃう…とか、プログラムを見直して気になる点はありますが、今までコレを利用していて速度が気になったりフリーズしたりということが無かったので、そのままにしときます。
※右記のOSでのみ動作確認済み:Win7、XP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
arg = WScript.Arguments, L=arg.length | |
if(!L){WScript.Echo('引数を指定してください'); WScript.Quit()} | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
shell = new ActiveXObject('Shell.Application') | |
Write = function(path,v){try{with(fs.CreateTextFile(path)){Write(v);Close()}}catch(e){WScript.Echo('Write Err.\n'+path)}} | |
getNS = function(p){return shell.NameSpace(p)} // NameSpace = shellオブジェクトで扱う「Folder Object」を取得するメソッド | |
getPFN = function(p){return fs.GetParentFolderName(p)} | |
// ZIPファイル作成 | |
path0 = arg(0) | |
pathZIP = getPFN(path0).replace(/([^\\\/])$/,'$1/')+fs.GetBaseName(path0)+'.zip' | |
if(fs.FileExists(pathZIP)){ | |
WScript.Echo('下記PathにZIPファイルを作成しようとしましたが、同じPathのファイルが既に存在しているため、処理を中断します。\n\n'+pathZIP) | |
WScript.Quit() | |
} | |
Write(pathZIP,'PK'+String.fromCharCode.apply(null,'56000000000000000000'.split(''))) // ← ZIPファイルのヘッダー | |
// ZIPファイルのFolderObjectを取得する | |
zip = getNS(pathZIP) | |
// ZIPファイルの中にファイル(フォルダ)をコピー | |
for(i=0;i<L;i++){ | |
file = getNS(getPFN(arg(i))).ParseName(fs.GetFileName(arg(i))) | |
// ParseName = shellオブジェクトで扱う「Folder Item Object」を取得するメソッド。 | |
// fs.GetFileで取得できるものとは別物っぽい。 | |
// GetFileで取得したものをCopyHereに渡してもエラーにはならないが、ZIPファイルには何も入らなかった。 | |
// zipファイルにアイテムを追加する前のアイテム数を取得しておく。 | |
アイテム数 = zip.Items().Count + 1 | |
zip.CopyHere(file) | |
// ZIPファイル内のアイテム数が増えるまで待機してから次に進まないと、取りこぼしが生じる。(3つのファイルを入れたつもりが2つしか入ってないとか) | |
while(zip.Items().Count<アイテム数){WScript.Sleep(1)} | |
} | |
</script> | |
</job> |
2016年5月24日火曜日
[WSH]Administratorsグループのメンバーをリストアップ
使用中のPCでAdministratorsグループに登録されているメンバーを表示するサンプル。
これなんてJScriptの存在意義あるの?と思いそうなサンプルだけど、これに関してはJScriptで出来るのはコレだけだったという記録のために入れてあります。
VBScriptが苦手なのでできれば使いたくなくて、JScriptだけ使いたいのですがGetObjectもFor EachもVBScriptでなければ動作しなかったんです。。
JScriptではfor inとかEnumeratorとか使ってみたんですが、駄目でした。
VBScriptはWindowsに対して特権がある…けど好きになれません。
これなんてJScriptの存在意義あるの?と思いそうなサンプルだけど、これに関してはJScriptで出来るのはコレだけだったという記録のために入れてあります。
VBScriptが苦手なのでできれば使いたくなくて、JScriptだけ使いたいのですがGetObjectもFor EachもVBScriptでなければ動作しなかったんです。。
JScriptではfor inとかEnumeratorとか使ってみたんですが、駄目でした。
VBScriptはWindowsに対して特権がある…けど好きになれません。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script language=VBScript> | |
function a() | |
' JScriptとVBScriptではGetObjectで得られるものが違うっぽい。 | |
' JScriptでGetObjectしたのを引数で渡すとMembersが無いエラーになる。 | |
Set objGroup = GetObject("WinNT://" & objNet.computerName & "/Administrators") | |
For Each objUser in objGroup.Members | |
str = str & objUser.name & vbLF | |
Next | |
a = str | |
end function | |
</script> | |
<script language=JScript> | |
objNet = new ActiveXObject('WScript.Network') | |
WScript.Echo(a()) | |
</script> | |
</job> |
ラベル:
Administrator,
JScript,
VBScript,
WSH,
できないこと
WebWorkerをHTAで利用する
HTAでもマルチスレッドで処理できる。
WebWorkerを使ううえでの注意点(別スレッドからはDOMにアクセスできないなど)はブラウザで使用する場合と同じ。
「C:\app\WebWorker.hta」のようなローカルPathから起動された場合はtempフォルダ内に外部スクリプトを出力して、それがWorker用のスクリプトファイルとして利用される。
「\\PC名\共有フォルダ\WebWorker.hta」のようなPathから起動された場合はBlobが上記の代わり利用されます。
Blobは作成元のHTAファイルの文字コードに関係なく、(おそらく)UTF-16になるため、HTAファイルもUTF-16(メモ帳でいうところのUnicode・・・)で保存しておかないと、実行時に文字化けしてエラーが出ます。
ローカルPathから起動された場合はFileSystemObjectのCreateTextFileでスクリプトファイルを出力するので、そのファイルと作成元HTAの文字コードが一致していれば問題ないので何でも良いですが、Blobを使う状況になっても文字コードを変えなくても良いように、HTAファイルもUTF-16で保存してください。(下記サンプルソースではCreateTextFileの第3引数をtrueにしてスクリプトファイルもUTF-16で出力していますので、HTAファイルもUTF-16にしないとエラーになります)
WebWorkerを使ううえでの注意点(別スレッドからはDOMにアクセスできないなど)はブラウザで使用する場合と同じ。
「C:\app\WebWorker.hta」のようなローカルPathから起動された場合はtempフォルダ内に外部スクリプトを出力して、それがWorker用のスクリプトファイルとして利用される。
「\\PC名\共有フォルダ\WebWorker.hta」のようなPathから起動された場合はBlobが上記の代わり利用されます。
Blobは作成元のHTAファイルの文字コードに関係なく、(おそらく)UTF-16になるため、HTAファイルもUTF-16(メモ帳でいうところのUnicode・・・)で保存しておかないと、実行時に文字化けしてエラーが出ます。
ローカルPathから起動された場合はFileSystemObjectのCreateTextFileでスクリプトファイルを出力するので、そのファイルと作成元HTAの文字コードが一致していれば問題ないので何でも良いですが、Blobを使う状況になっても文字コードを変えなくても良いように、HTAファイルもUTF-16で保存してください。(下記サンプルソースではCreateTextFileの第3引数をtrueにしてスクリプトファイルもUTF-16で出力していますので、HTAファイルもUTF-16にしないとエラーになります)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
</head> | |
<title>web worker</title> | |
<body> | |
UNCパス上では動く。<br> | |
ローカルでは動かない(new Workerのところでsecurity errorになる)<br> | |
<a href="http://outofmem.tumblr.com/post/95984469624/html5javascriptweb-workers%E3%81%A8%E6%88%A6%E3%81%86">同一生成元ポリシーに違反してしまう?</a><br> | |
<br> | |
try~catchでBrobのがエラーになる場合はtempファイル作成して読ますようにしたらローカルでも動いた。 | |
<script type="text/jscript"> | |
function getFunctionBody(fun){ | |
return fun.toString().trim().match(/^function[\s\w]*\([\w\s,]*\)\s*{([\w\W]*?)}$/)[1] | |
} | |
function fun2Worker(fun){ | |
var str=getFunctionBody(fun), blob=new Blob([str], {type:'text/javascript'}), url=URL.createObjectURL(blob), worker | |
try{worker = new Worker(url)} | |
catch(e){ | |
// Workerに渡すアドレスは同一生成元ポリシーを守らなければいけない。 | |
// 変数urlの中身は「brob:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX」のランダムな文字列 | |
// 呼び出し元ファイルのアドレスがローカルのものなら、ローカルPathしか渡せない。 | |
var fs=new ActiveXObject('Scripting.FileSystemObject'), path=fs.getSpecialFolder(2)+'/'+fs.getTempName()+'.js', ws=fs.CreateTextFile(path, true, true) | |
ws.Write(str) | |
ws.Close() | |
worker = new Worker(path) | |
} | |
return worker | |
} | |
function abc(t){return t+'1'} | |
worker = fun2Worker(function(){ | |
// ワーカー側スコープ | |
onmessage = function(e){ postMessage(abc(e.data)) } | |
function abc(t){return t+'0'} | |
}) | |
worker.onmessage = function(e){ | |
confirm(abc(e.data)) | |
} | |
worker.postMessage('aaa') | |
</script> | |
</body> | |
</html> |
HTML5とHTA:Applicationタグの併用
HTML5モードだとHTA:Applicationタグが無効になる。
そのためiconなどが設定できなくなるが、ラッパーを使用すれば併用できるようになる。
※ただし画面偏移可能になってしまうのでhta内部でリンクをクリックしたり、HTML5のD&D機能を使うつもりで画面上にファイルを入れると画面偏移してしまう。
そのためiconなどが設定できなくなるが、ラッパーを使用すれば併用できるようになる。
※ただし画面偏移可能になってしまうのでhta内部でリンクをクリックしたり、HTML5のD&D機能を使うつもりで画面上にファイルを入れると画面偏移してしまう。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta http-equiv="refresh" content="0;URL=中身.hta"> | |
<HTA:APPLICATION | |
NAVIGABLE="yes" | |
/> | |
</head> | |
</html> |
ラベル:
HTA,
HTA:Application,
HTML5
ホスト専用のアカウントになりました。。
昨夜のうちにアドセンスでの審査が行われたらしく、本日AM1:00頃に審査完了連絡メールが届いていました。
「ホスト専用」については下記参照ください。
http://links-creations.com/monetize/hosted-account/
実際にどんな画面が表示されて、それになっていることを知ったのかを文章ではなく画像で説明したい…と思いますが、利用規約には以下の記載があります。
「ホスト専用」については下記参照ください。
http://links-creations.com/monetize/hosted-account/
実際にどんな画面が表示されて、それになっていることを知ったのかを文章ではなく画像で説明したい…と思いますが、利用規約には以下の記載があります。
9. 秘密保持お客様は、当社の事前の書面による承諾なく Google 機密情報を開示しないことに合意するものとします。「Google 機密情報」には、(a)本サービスに関連する一切の Google のソフトウェア、技術および文書、(b)本サービスとの関係において広告媒体の実績に関連したクリックスルー率その他の統計、(c)本サービスにおけるベータ版機能の存在およびそれに関する情報、ならびに(d)Google により提供されるその他の情報であって、機密であると指定されるか、それが提示される状況において通常機密とみなされるものが含まれます。Google 機密情報には、お客様による本サービスの利用より前にお客様にとって既知であった情報、お客様の責によらず公知となった情報、お客様が独自に開発した情報、または第三者によりお客様に適法に与えられた情報は、含まれないものとします。
サービス利用前から知りうる可能性がある情報であれば載せても問題ないと思いますが、その可能性を探すのが面倒です。それほど機密性の高い情報とも思えないですし、載せてはいけない情報なら連絡をいただいてから削除すれば問題ないと思います。
あと、冒頭で記載したアドレスの記事は「公開日:2016年01月30日」で、アカウント取得後の画面が部分的に公開されていますので、多分大丈夫なのだろうと思います。
というわけで、私が見たメッセージは以下。
※アドセンスのアカウントを有効化した直後だけ表示されていました。現在は表示されていません。
とりあえず…非ホスト型アカウントに変更する方法もあるようですし、今のところはそのままでも問題ないですが……。
2016年5月23日月曜日
AdSenseへの登録が可能になった
5/14にブロガーのアカウントを作成して5/23で「収益」タブの「AdSenseに登録」ボタンが押せるようになりました。半年ぐらいかかるのかと思っていたので驚きの速さです
ブロガーでアカウントを作成してから、ブロガーでのアドセンス利用についてググってみたら「ブロガーからアドセンスに登録するとサイト毎に審査が必要になるから駄目!」という情報を見つけました。
しかし「ブロガーから登録しても特殊なアカウントにはならなかった」という情報もあり、真偽不明です。
私はgoogleのサービスのいくつかを好んで利用していますし、できればブロガーを利用していきたいので、ブロガーからアドセンスのアカウントを作成して、このブログの審査を申し込みました。
どうなるでしょうか…?
ブロガーでアカウントを作成してから、ブロガーでのアドセンス利用についてググってみたら「ブロガーからアドセンスに登録するとサイト毎に審査が必要になるから駄目!」という情報を見つけました。
しかし「ブロガーから登録しても特殊なアカウントにはならなかった」という情報もあり、真偽不明です。
私はgoogleのサービスのいくつかを好んで利用していますし、できればブロガーを利用していきたいので、ブロガーからアドセンスのアカウントを作成して、このブログの審査を申し込みました。
どうなるでしょうか…?
ADODBでMDBファイルのテーブル名一覧を取得する
本当は任意のテーブル名の有無を判定する方法が知りたかったんだけど、分からなかったのでテーブル名一覧を取得する方法を選択した。
REFERENCEタグを使うと定数も利用できるらしい。
コチラを参考にさせていただきました。
REFERENCEタグを使うと定数も利用できるらしい。
コチラを参考にさせていただきました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<JOB> | |
<REFERENCE object="ADODB.Connection" /> | |
<SCRIPT> | |
fs = new ActiveXObject('Scripting.FileSystemObject') | |
pathMDB = fs.GetFile('Database.mdb').path | |
// ファイルを開く | |
cn = new ActiveXObject('ADODB.Connection') | |
cn.Open("provider=Microsoft.Jet.OLEDB.4.0;Data Source="+pathMDB) | |
// テーブル一覧のレコードセット | |
rs = cn.OpenSchema(adSchemaTables) | |
str = 'フィールド一覧\n' | |
for(i=0,L=rs.Fields.count; i<L ;i++){ | |
str += rs.Fields(i).Name + '\n' | |
} | |
str += '\n' | |
str += 'テーブル一覧\n' | |
for(; !rs.EOF ;rs.MoveNext()){ | |
str += rs.Fields('TABLE_NAME').Value + '\n' | |
} | |
str += '\n' | |
rs = cn.OpenSchema(adSchemaTables, [null, null, null, "VIEW"]) | |
str += 'ビューのみのテーブル一覧\n' | |
for(; !rs.EOF ;rs.MoveNext()){ | |
str += rs.Fields('TABLE_NAME').Value + '\n' | |
} | |
WScript.Echo(str) | |
rs.Close() | |
cn.Close() | |
</SCRIPT> | |
</JOB> |
FileAPIをHTAで利用するサンプル
FileAPIを使うと、画面上にドラッグ&ドロップされたファイルを扱える。
ただしフォルダは扱えない。下記サンプルにD&Dすると「typeを取得できませんでした」になる。
ファイルであってもPathは取得できないので、単一ファイルの入力に対して何かを返すアプリケーションを作る時だけ使える。
ちなみにHTML5以前のHTMLにiframeエレメントを入れて、その中にHTML5のページを表示してFileAPIを利用する…というのはブラウザでは可能。HTAでは不可。
ただしフォルダは扱えない。下記サンプルにD&Dすると「typeを取得できませんでした」になる。
ファイルであってもPathは取得できないので、単一ファイルの入力に対して何かを返すアプリケーションを作る時だけ使える。
ちなみにHTML5以前のHTMLにiframeエレメントを入れて、その中にHTML5のページを表示してFileAPIを利用する…というのはブラウザでは可能。HTAでは不可。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
</head> | |
<title>D&D</title> | |
<body> | |
<script type="text/jscript"> | |
if(!window.File){ | |
document.body.innerText = 'FileAPIが使用不能' | |
}else{ | |
doNothing = function(e){ | |
// e.stopPropagation() | |
e.preventDefault() | |
} | |
document.addEventListener("dragover", doNothing) | |
document.addEventListener("drop", function(e){ | |
doNothing(e) | |
var files = e.dataTransfer.files | |
if(!files){return} | |
try{document.title = files[0].type}catch(e){return document.body.innerText='typeを取得できませんでした'} | |
// if(!files[0].type.match('text.*')){return} // hta…application/hta | |
var R=new FileReader() | |
R.onload=function(ev){ document.body.innerText=R.result } | |
R.readAsText(files[0], 'shift-jis') | |
}) | |
} | |
// https://msdn.microsoft.com/ja-jp/library/hh673539(v=vs.85).aspx | |
</script> | |
</body> | |
</html> |
HTMLページ内にEval用テキストエリアとボタンを追加
動作テストしながらブックマークレットを作る時に使う。
文字列をコピーしてアドレスバーに貼りつけてエンター押せば実行される筈だけど、貼りつけた時点で「javascript:」の部分が削除されてうまくいかない時がある。そういう時は貼りつけた後に手書きで「javascript:」と入力してからエンター押す。
文字列をコピーしてアドレスバーに貼りつけてエンター押せば実行される筈だけど、貼りつけた時点で「javascript:」の部分が削除されてうまくいかない時がある。そういう時は貼りつけた後に手書きで「javascript:」と入力してからエンター押す。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
javascript:void (function(){var d=document,di;d.body.insertBefore(di=d.createElement('DIV'));di.innerHTML='<textarea wrap=off style="width:400px;height:200px;"></textarea><button onclick="eval(this.previousSibling.value)">eval</button>'})() |
2016年5月20日金曜日
コントロールパネルでシステムDSNなどを設定していないPCでもMySQLの通信をする
サーバとの接続に必要な情報をプログラム内部に持つタイプのサンプル。
ただしドライバがインストールされていなければいけない。
ドライバのダウンロード方法は下記参照。
ドライバのダウンロード方法は下記参照。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
;(function(){ | |
var con = new ActiveXObject('ADODB.Connection') | |
execSQL=function(str){ | |
try{ return con.execute(str) }catch(e){} | |
// conの中身がopen実行前だったり、 | |
// openしてから時間が経って接続が失われている場合は以下へ進む。 | |
// ただし「str」の中身が構文エラーでも下に進むことになる。 | |
// その場合、接続が有効な状態の時は「接続済みです」的なエラーが生じる。 | |
con.open( | |
'Provider=MSDASQL;'+ | |
'Driver={MySQL ODBC 5.1 Driver};'+ | |
'Server=192.168.1.100;'+ | |
'DATABASE=DBNAME;'+ // ケースセンシティブ | |
'UID=username;'+ | |
'PWD=password;' | |
) | |
return arguments.callee(str) | |
} | |
})(); | |
レコード = execSQL("select * from tbl_test where id=123") | |
str = '' | |
for(; !レコード.EOF ;レコード.moveNext()){ | |
str += レコード.Fields('password').value + '\n' | |
} | |
WScript.Echo(str) | |
</script> | |
</job> |
ラベル:
ADODB.Connection,
MySQL,
WSH,
ドライバ,
設定保持
2016年5月19日木曜日
ファイルやフォルダの絶対Pathを取得するWSH
ローカルエリアネットワーク内の、どのPCからでもアクセスできる形式のファイル(フォルダ)Pathをさくっと取得するためのWSH。
WSFっていうべき?
SendToフォルダに入れて使ってます。
引数が1つの場合はVBScriptによるinputboxでのPath表示。
引数が複数の場合はテキストファイルにしてメモ帳で開きます。
SendToフォルダに入れて使ってます。
引数が1つの場合はVBScriptによるinputboxでのPath表示。
引数が複数の場合はテキストファイルにしてメモ帳で開きます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script language="VBScript"> | |
function vbInputBox(prompt, title, def) | |
vbInputBox = inputbox(prompt, title, def) | |
end function | |
</script> | |
<script language="JScript"> | |
arg=WScript.Arguments | |
if(!arg.length){WScript.Quit()} | |
jsInputBox = function(p,t,d){ | |
return vbInputBox(p, t?t:WScript.ScriptName, d?d:'') | |
} | |
fs = new ActiveXObject('Scripting.fileSystemObject') | |
shell = new ActiveXObject('WScript.Shell') | |
gsf2 = fs.GetSpecialFolder(2) | |
Write = function(path,v){with(fs.CreateTextFile(path)){Write(v);Close()}} | |
WshNetwork = WScript.CreateObject("WScript.Network") | |
// ネットワークドライブのドライブ文字vsネットワークパスの組み合わせを取得する | |
drives = WshNetwork.EnumNetworkDrives() | |
objDrive={} | |
for(var i=0,L=drives.length;i<L;i+=2){ | |
objDrive[drives.Item(i)] = drives.Item(i+1) | |
} | |
getPathUNC = function(p){ | |
if(unc = objDrive[fs.GetDriveName(p)]){ | |
return unc + p.replace(/^[A-Z]:/,'') | |
}else{ | |
return 共有(p) | |
} | |
} | |
// 共有設定しているフォルダ内のファイルにも対応する | |
arr共有=[] | |
objEnum = new Enumerator(WScript.CreateObject("WbemScripting.SWbemLocator").ConnectServer().ExecQuery("Select * From Win32_Share")) | |
for(i=0; !objEnum.atEnd() ;objEnum.moveNext()){ | |
item = objEnum.item() | |
if(!item.path){continue} // IPC$はpath無いので何にでもマッチしてしまう | |
arr共有[i++] = {path:item.path, name:item.name} | |
} | |
arr共有len = arr共有.length | |
reg = /[\\\/]$/ | |
共有=function(path){ | |
for(var i=0;i<arr共有len;i++){ | |
// index=0以外は無視 | |
if(path.indexOf(arr共有[i].path)){continue} | |
var head='\\\\'+WshNetwork.computerName+'\\'+arr共有[i].name | |
return head+(head.match(reg)?'':'\\')+path.slice(arr共有[i].path.length, path.length) | |
} | |
return path | |
} | |
if(arg.length==1){ | |
jsInputBox('getPath',0,getPathUNC(arg(0))) | |
WScript.Quit() | |
} | |
str = '' | |
for(i=0,L=arg.length;i<L;i++){ str += getPathUNC(arg(i)) + '\r\n' } | |
path = gsf2+'\\'+fs.getTempName() | |
Write(path, str) | |
shell.run('notepad '+path, 1, true) | |
fs.DeleteFile(path) | |
</script> | |
</job> |
Gistで作成したソースコードをwebページ上で実行する
プログラムの動作テストを気軽に出来るようにしたい。
テストせずに「書いただけ」だとバグの含有率高いし。
ある程度使い慣れた言語ならバグがあってもエラーメッセージを読めば簡単なプログラムなら修正できるけれど、プログラミングを始めて間もない時期に「そういうこと」に遭遇するとお手上げです。
自分も他人も不幸にしないために「バグ無く動作すること」がすぐに確認できるようにしたい。
テストせずに「書いただけ」だとバグの含有率高いし。
ある程度使い慣れた言語ならバグがあってもエラーメッセージを読めば簡単なプログラムなら修正できるけれど、プログラミングを始めて間もない時期に「そういうこと」に遭遇するとお手上げです。
自分も他人も不幸にしないために「バグ無く動作すること」がすぐに確認できるようにしたい。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for(var str='',i=0,L=3;i<L;i++){ | |
str += i | |
} | |
confirm(str) |
2016年5月18日水曜日
画像ファイルと個人情報
記事作成時に画像を使いたい時がありますが
ファイル形式によっては「見えているもの以外」の情報を含んでいる場合があります。
Exifとか。
知らずにネットで公開すると作成者の使用しているPCのユーザー名や組織名などが漏れそうで怖いので確認しました。
余計な情報を公開していないか確認する方法はいくつかありますが
公開済みの画像について手軽に確認したい場合はネットサービスが良さそうです。
http://mgt.jp/t/exif
他にも以下のような情報が、記事に添付するためにアップロードすると消えるのか消えないのか気になります。
Exifはファイル形式をPNGにしておけばOK。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11105142341
Windowsでファイルのプロパティに表示される情報はNTFSの管理情報なのでアップロードしたファイル自体には情報は入ってない。
http://oshiete.goo.ne.jp/qa/7257700.html
出典についてはもう少し信頼度の高いところをもってきたかったのですが、すぐに見つからなかったので参考程度の情報です。
信頼度の高い情報を見つけたら追記します。
ファイル形式によっては「見えているもの以外」の情報を含んでいる場合があります。
Exifとか。
知らずにネットで公開すると作成者の使用しているPCのユーザー名や組織名などが漏れそうで怖いので確認しました。
余計な情報を公開していないか確認する方法はいくつかありますが
公開済みの画像について手軽に確認したい場合はネットサービスが良さそうです。
http://mgt.jp/t/exif
他にも以下のような情報が、記事に添付するためにアップロードすると消えるのか消えないのか気になります。
Exifはファイル形式をPNGにしておけばOK。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11105142341
Windowsでファイルのプロパティに表示される情報はNTFSの管理情報なのでアップロードしたファイル自体には情報は入ってない。
http://oshiete.goo.ne.jp/qa/7257700.html
出典についてはもう少し信頼度の高いところをもってきたかったのですが、すぐに見つからなかったので参考程度の情報です。
信頼度の高い情報を見つけたら追記します。
2016年5月16日月曜日
ソースコードを美しくブログで表示する
Gistというのを使うと簡単でした。
1.GitHubでアカウント作成
https://github.com/
2.「New gist」ボタンを押します。
3.ファイル名を入力します。拡張子に応じてハイライトが変化します。
4.「Create public gist」ボタンを押します。
5.「<script ~」をコピーして、ブログに貼りつける。
出来上がり。
残念ながらwshはハイライトの恩恵が受けられないようです。。まぁ複数の言語が利用できる拡張子ですし、仕方がないですよね。
1.GitHubでアカウント作成
https://github.com/
2.「New gist」ボタンを押します。
3.ファイル名を入力します。拡張子に応じてハイライトが変化します。
4.「Create public gist」ボタンを押します。
5.「<script ~」をコピーして、ブログに貼りつける。
出来上がり。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
for(var str='',i=0,L=3;i<L;i++){ | |
str += i | |
} | |
confirm(str) |
残念ながらwshはハイライトの恩恵が受けられないようです。。まぁ複数の言語が利用できる拡張子ですし、仕方がないですよね。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job> | |
<script> | |
var str = 'Hello' | |
WScript.Echo(str) | |
var fs = new ActiveXObject('Scripting.FileSystemObject') | |
WScript.Echo(fs.getTempName()) | |
</script> | |
</job> |
iframeを使ってソースコードを表示
iframeのonLoadイベントを利用して、ページが表示されたらiframeの後ろにPREエレメントを追加して、そのエレメントのinnerTextに関数の内容を表示する。というサンプル。
function(){
abc = 1
def = 2
}
編集画面でも閲覧画面でも同様の表示が得られるようにしたい欲求に対する、iframeを用いた回答。
「<」を使うとそこから後ろが消えちゃう問題には未対応。
……素直に通常の(HTMLでない)編集画面で書く方が良い?
どっちみち編集画面じゃ水平タブによる字下げなどが出来ないしエディタで書いたプログラムを動作テストしてから貼りつける、で良いのか。。
「<」を使うとそこから後ろが消えちゃう問題には未対応。
……素直に通常の(HTMLでない)編集画面で書く方が良い?
どっちみち編集画面じゃ水平タブによる字下げなどが出来ないしエディタで書いたプログラムを動作テストしてから貼りつける、で良いのか。。
2016年5月14日土曜日
投稿用HTMLソースを作成するページ
以下の入力欄に文章を入力して「変換」ボタンを押すと、投稿用HTMLソースを作成できます。
動作テスト用ボタンもついています。
<を含む文章でも問題無く表示されるように変換できます。
動作テスト用ボタンもついています。
<を含む文章でも問題無く表示されるように変換できます。
プログラムの公開方法
以下のようなテキストを、コメントや予約語などの部分だけ文字色を変えて表示したい
fs = new ActiveXObject('Scripting.FileSystemObject') shell = new ActiveXObject('WScript.Shell') // テキストファイル入出力 Read = function(path, swCreate, swUnicode){ if(!fs.FileExists(path) && !swCreate){return ''} var rs=fs.OpenTextFile(path,1,swCreate,swUnicode), str=rs.AtEndOfStream?'':rs.ReadAll() rs.Close() return str } Write = function(path,str,swUnicode,sw追記){ with(fs.OpenTextFile(path,sw追記?8:2,true,swUnicode)){Write(str); Close()} } RAS = function(path){return Read(path).split('\r\n')}
登録:
投稿 (Atom)