秀丸エディタである文字列が入っていない行を削除する

秀丸エディタである文字列が入っていない行を削除するには、grep(グレップ)機能を使う。すると、ある文字が含まれる行だけを抽出できる。それにより、特定の文字列の入っていない行を削除したのと同じ結果になる。

grep は、「ファイル全体から (global) 正規表現 (regular expression) に一致する行を表示(print)する」機能。

使い方は、「検索」 → 「grepの実行」

「grepの実行」は、対象にするフォルダを指定できるので、指定フォルダの中に複数のファイルを入れれば、いくつものファイルから一度にデータを抽出できる。

画像ファイルを持っていかれないようにする方法

インターネットで公開している以上、絶対に画像を持っていかれない方法はない。

ここで紹介するのは、画像を持っていきにくくして、知識の乏しい人なら画像の持ち出しを諦めるだろう方法。そして簡単な実装できる方法を選んだ。

1.baseタグで基準となるURLを設定する

baseタグは、相対パスで書かれたURLの基準を指定するもの。

もしページのソースを見られたら画像の場所がわかってしまう。

絶対パス
----------------------------
<img src="http://example.com/image2001/image01.jpg">
----------------------------

相対パス
----------------------------
<img src="image2001/image01.jpg">
----------------------------

上の二つどちらも、画像ファイルは「http://example.com/image2001/」の中にあると読める。

そこでbeseタグを使うと画像ファイルの場所を少し分かりにくくできる。

headタグの間にbaseタグを記述する
----------------------------
<base href="http://example.com/image2001/">
----------------------------

すると「image2001フォルダ」までが基準になるのでimgタグへの記述は下記のようになる。

相対パスで
----------------------------
<img src="image01.jpg">
----------------------------

「image2001」の記述を省略できるのでimgタグ内だけを見ても画像の場所が分からなくなる。

2.baseタグはjavascriptで隠す。

imgタグだけを見ても画像ファイルの場所は分からないが、headタグ間に記述したbaseタグを見ると分かってしまう。
そこでbaseタグはheadタグ間に書かずに、外部ファイルとしてjavascriptで書くとよりいい。

外部ファイルとして読み込む
----------------------------
document.write('<base href="http://example.com/image2001/">');
----------------------------

参考

http://www.broadband-xp.com/hidesource/base.html

3.右クリックを無効にする

これまでの実装でソースを見ても画像ファイルの場所をわかりにくくすることは出来るが、画像自体を右クリックすれば画像のURLも分かるし、保存も出来てしまう。

そこで右クリックを禁止する。

bodyタグ内に記述
----------------------------
<body onContextmenu="return false">
----------------------------

これだと右クリックは防げるがデスクトップへドラッグすれば保存できてしまう。
そこでjquery.dwImageProtector.jsというjqueryのプラグインを使う。

使い方はこちらこちらが分かりやすい。

http://www.css-lecture.com/log/javascript/dwimageprotector.html

jquery.dwImageProtector.jsのソースはこんな感じ
---------------------------------------------------------
jQuery.fn.protectImage = function(settings) {
settings = jQuery.extend({
image: 'blank.gif',
zIndex: 10
}, settings);
return this.each(function() {
var position = $(this).position();
var height = $(this).height();
var width = $(this).width();
$('<img />').attr({
width: width,
height: height,
src: settings.image
}).css({
border: '1px solid #f00',
top: position.top,
left: position.left,
position: 'absolute',
zIndex: settings.zIndex
}).appendTo('#content')
});
};
---------------------------------------------------------

head内のソースはこう
---------------------------------------------------------
<script src="http://example.com/js/jquery-1.9.1.min.js" type="text/javascript"></script>
<script src="http://example.com/js/jquery.dwImageProtector.js" type="text/javascript"></script>
<script type="text/javascript">
$(window).bind('load', function() {
$('img.protect').protectImage();
});
</script>
---------------------------------------------------------

保護するイメージには class を設定する
---------------------------------------------------------
<img src="image01.jpg" alt="" width="500" height="500" class="protect" />
---------------------------------------------------------

画像を囲む枠がずれる場合は「.appendTo('body')」の部分をbodyでなく任意の場所に変更すればうまくいく。

IEオブジェクトからUWSC用のIDを取得する

IEオブジェクトからUWSC用のIDを求めるためのスクリプト
-----------------------------------------------------
IE = CreateOLEObj("InternetExplorer.Application")
IE_ID = HNDtoID(IE.hwnd)
-----------------------------------------------------

1.IE.hwnd で ウインドウハンドルが取得できる。
2.HNDtoID でウインドウハンドルをUWSC用のIDに変換している。

【UWSC】IEでCLKITEMの箇所でエラーが出る

UWSC で IE を操作していると CLKITEM の箇所でエラーが出た。

ie_error1
↓↓↓↓↓
ie_error2

リンクが出来ている文字列にマウスカーソルを移動するスクリプト(クリックはせずに)のところ。

エラー箇所
------------------------------------------------------------
CLKITEM(IE_ID, "詳しくはこちら", CLK_MUSMOVE, FALSE)
------------------------------------------------------------

次のように書き直したらエラーは出なくなった
------------------------------------------------------------
CLKITEM(IE_ID, "詳しくはこちら", CLK_ACC or CLK_MUSMOVE, FALSE, FALSE)
------------------------------------------------------------

ヘルプを改めて見ると「CLK_MUSMOVE」は追加オプションになっている。これを単品で書いてたのが問題だったのかなぁ・・・

【コマンドプロンプト】dirコマンドで正規表現を使う

dirコマンドで正規表現を使うには |(パイプ)と findstr を用いる。

//例:数字だけのディレクトリ名だけ抽出
------------------------------------------
dir /ad | findstr "¥<[0-9]*¥>"
------------------------------------------

dir /ad → ディレクトリだけ抽出
|(パイプ) → dir の結果を findstr に渡す
findstr → 正規表現が利用できる
¥< → 単語の先頭
¥> → 単語の末尾

findstr の正規表現について詳しくはこちら

http://www.atmarkit.co.jp/ait/articles/0412/18/news018.html

【UWSC】tokenで改行を区切り文字にする

UWSCにおいて、tokenで改行を区切り文字にするスクリプトの覚書

----------------------------
token(chr(10),文字列)
----------------------------

もしくは

----------------------------
token(chr(13),文字列)
----------------------------

chr(10) → ラインフィード(Lf)

chr(13) → キャリッジリターン(Cr)

UWSCで目的のフォルダがあるか確認する

UWSCで目的のフォルダがあるかを確認するスクリプト

---------------------------------------------------
FSO = CreateOLEObj("Scripting.FileSystemObject")

IFB FSO.FolderExists("存在を確認するフォルダの名前")

print "探してたフォルダがあります"

ELSE

print "探してたフォルダはありません"

ENDIF
---------------------------------------------------

uwscでprintを使ったときの表示用ウインドウの大きさを変える

uwscでprintを使ったときに出てくる表示用のウインドウの大きさを変えるスクリプト

//ウインドウが出たあとで実効
---------------------------------------------
acw(getid(GET_LOGPRINT_WIN), 100, 200, 600, 400)
---------------------------------------------

UWSCでスクロールバーを操作する

UWSCでスクロールバーを操作するには SETSLIDER 関数 および GETKEYSTATE 関数 を使う。

//ALTキーが押されたらスクロールバーを下へ
/////////////////////////////////////
IFB GETKEYSTATE(VK_ALT)

slider_val = GETSLIDER(XV_ID,3) //3はスクロールバーの位置。適宜変更。

slider_val = val(slider_val + 600) //600下へ

SETSLIDER(XV_ID,slider_val,3)

ENDIF
/////////////////////////////////////

//Zキーが押されたらスクロールバーを上へ
/////////////////////////////////////
IFB GETKEYSTATE(VK_Z)

slider_val = GETSLIDER(XV_ID,3)

slider_val = val(slider_val - 600) //600上へ

IF (slider_val < 0) THEN slider_val = 0 SETSLIDER(XV_ID,slider_val,3) ENDIF ///////////////////////////////////// 単純に次のようにしてもスクロールバーを操ることは可能 //ホイールを操作して下スクロール ///////////////////////////////////// BTN(WHEEL, -1) /////////////////////////////////////

【UWSC】Windows7でLOCKHARDを有効にする

LOCKHARD は、キーボードやマウスからの入力を禁止する関数。
LOCKHARD関数は、管理者権限がなければ、きちんと動かない。

テストスクリプト1
-----------------------------------
LOCKHARD(TRUE)

FOR A = 10 TO 1 STEP -1

FUKIDASI("入力禁止中(あと" + A + "秒)。強制解除はCtrl + Alt + Delete",100,100,0,40)

SLEEP(1)

NEXT
-----------------------------------

テストスクリプト2
-----------------------------------
LOCKHARD(TRUE)

//100秒キー入力無効!強制解除はCtrl + Alt + Delete
SLEEP(100)

LOCKHARD(FALSE)
-----------------------------------

LOCKHARD関数がきちんと動かないのなら、管理者権限がないということ。

管理者権限があるかどうかはいかのスクリプトでわかる
-----------------------------------
DEF_DLL IsUserAnAdmin(): BOOL: shell32
IFB IsUserAnAdmin() THEN
  MSGBOX("管理者権限あり")
ELSE
  MSGBOX("管理者権限なし")
ENDIF
-----------------------------------

管理者権限を有効にするには、uwsc.exe か そのショートカットのコンテキストメニューを開き、「管理者として実行」でプログラムを起動させる。

しかしこの方法だと、拡張子が「.uws」のファイルから実行するとコンテキストメニューの「管理者として実行」の項目が無くてできなかった。それに毎回右クリックするのが面倒。

UWSCを常に管理者権限でプログラムを走らせるために、互換性タグ下の 特権レベル「管理者としてこのプログラムを実行する」 にチェックを入れる、という方法もあるがプログラムを開始するたびに「権限の昇格を確認するダイアログ」が出てこれも面倒。

結局、管理者権限が必要な関数(LOCKHARD 等)を使う場合だけ、管理者権限へ昇格するダイアログを出すことにした。

-----------------------------------
//管理者権限が無ければ、管理者権限のダイアログを出す
DEF_DLL IsUserAnAdmin(): BOOL: shell32
if ! IsUserAnAdmin() then
  UacElevate()
  exit
endif

LOCKHARD(TRUE)
FOR A = 10 TO 1 STEP -1

FUKIDASI("入力禁止中(あと" + A + "秒)。強制解除はCtrl + Alt + Delete",100,100,0,40)

SLEEP(1)
NEXT

procedure UacElevate(arg = "")
if pos(".exe", GET_UWSC_NAME) then
exe = GET_UWSC_NAME
dir = GET_CUR_DIR
else
exe = "UWSC.exe"
dir = GET_UWSC_DIR
arg = "<#DBL>" + GET_CUR_DIR + "\" + GET_UWSC_NAME + "<#DBL> " + arg
endif
sh = CreateOleObj("Shell.Application")
sh.ShellExecute(exe, arg, dir, "runas", 1)
fend
-----------------------------------

参考ページ
-----------------------------------

https://stuncloud.wordpress.com/2012/09/07/uwsc_uac_elevation/

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

10 / 26« 先頭...89101112...20...最後 »