uwsc


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/

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

【UWSC】テキストファイルを作る

UWSCでテキストファイルを作るにはコマンドプロンプトを使うといい。

UWSCファイルと同じフォルダに出力する場合
---------------------------------------------
CMDSTR = "echo テキストファイルに保存する文字列>text.txt"

DOSCMD(CMDSTR,FALSE,TRUE)
---------------------------------------------
echo で標準出力(通常は画面)に出力されるものを「>(リダイレクト)」でテキストファイルに送っている。リダイレクト先に同名のファイルがあれば上書き、なければ新規作成される。

「>」の左横に半角スペースを入れるとテキスト保存する文字列にも半角スペースが入ってしまうので注意!

Cドライブに出力する場合
---------------------------------------------
CMDSTR = "echo テキストファイルに保存する文字列>C:¥text.txt"

DOSCMD(CMDSTR,FALSE,TRUE)
---------------------------------------------

テキストファイルに保存する文字列に半角スペースを含ませる場合も<#DBL>で囲む必要はなし。
---------------------------------------------
CMDSTR = "echo 半 角 ス ペ ー ス を 含 む 文 字 列>text.txt"

DOSCMD(CMDSTR,FALSE,TRUE)
---------------------------------------------

【UWSC】フォルダ内のファイル名を一括リネーム(一部削除)

任意のフォルダ内のファイルを一度にリネームするときの覚書。

リネーム前のファイル名
-------------------------------
abc_001.jpg
abc_002.jpg
abc_003.jpg
-------------------------------

リネーム後のファイル名
-------------------------------
001.jpg
002.jpg
003.jpg
-------------------------------

ようは_(アンダーバー)を含むそれより前の文字列を削除したい。
コマンドプロンプトだと、ファイルの先頭に文字列を付け足したり、拡張子の変更などは簡単に rename コマンドで出来る。けど、先頭の文字を一括削除は、少しスクリプトが複雑になるので、今回はパワーシェルを用いる。

//カレントディレクトリにあるファイルをリネームする場合
-------------------------------
ps = "Get-ChildItem * | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------
やっていることは、まず Get-ChildItem でファイルを取得して、その結果を|(パイプ)で一つずつ Rename-Item に送っている。"$_.Name" はパイプで送られてきたファイル名を表す。"-replace" でファイル名の一部を置換。今回の例では「abc_」を空文字に置き換えている。

//ディレクトリのパスを指定してリネーム(CドライブのUsersディレクトリを指定)
-------------------------------
ps = "Get-ChildItem C:¥Users¥* | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------

//コマンドプロンプトでやるとバッチファイルを作る必要がある
-------------------------------
for %%f in ( * ) do call :sub "%%f"
exit /b

:sub
set fname=%1
set fname=%fname:abc_=%
ren %1 %fname%
goto :EOF
-------------------------------
=の右側が置換後の文字列。

コマンドプロンプトの文字列置換の構文
-------------------------------
%[元の文字列]:[置き換え前の文字列]=[置き換え後の文字列]%
-------------------------------

なお、Get-ChildItem と Rename-Item はコマンドプロンプトでいえば dir と ren なので、それぞれ dir と ren がエイリアスとして使える。

もう少し細かな指定も出来る↓

//リネームする対象を.jpgファイルだけにすると
-------------------------------
ps = "Get-ChildItem *.jpg | Rename-Item -NewName { $_.Name -replace <#DBL>abc_<#DBL>, <#DBL><#DBL> }"

POWERSHELL(ps)
-------------------------------

//ファイル名が xyz から始まるファイルに対して xyz を789 に置換して、さらに拡張子を.jpg から .txt にする場合。
-------------------------------
Get-ChildItem xyz* | Rename-Item -NewName { ($_.Name -replace "xyz", "789") -replace "jpg", "txt" }
-------------------------------

UWSCでファイルの移動

UWSCで指定した場所にファイルを移動するサンプルスクリプト

指定したひとつのファイルを移動する場合
------------------------------------------------------
FROM_URL = "C:¥移動ファイル.txt" //移動させたいファイル

TO_URL = "C:¥Users¥移動先フォルダ" //移動先のフォルダ

CMDSTR = "move " + FROM_URL + " " + TO_URL

DOSCMD(CMDSTR,FALSE,TRUE) //実行
------------------------------------------------------

拡張子が同じファイルをすべて移動する場合
------------------------------------------------------
FROM_URL = "C:¥*.txt" //移動させたいファイル

TO_URL = "C:¥Users¥移動先フォルダ" //移動先のフォルダ

CMDSTR = "move " + FROM_URL + " " + TO_URL

DOSCMD(CMDSTR,FALSE,TRUE) //実行
------------------------------------------------------

UWSCで指定した場所にフォルダを作る

UWSCで指定した場所にフォルダを作るときのサンプルスクリプト

-----------------------------------------------------------
folder_name ="新しいフォルダ" //作りたいフォルダの名前

//作りたい場所を指定
Doscmd("mkdir C:¥" + folder)
-----------------------------------------------------------

//フォルダ名に半角スペースが含まれる場合は<#DBL>で囲む
-----------------------------------------------------------
folder_name ="新しいフォルダ" //作りたいフォルダの名前

//作りたい場所を指定
Doscmd("mkdir C:¥<#DBL>" + folder + "<#DBL>")
-----------------------------------------------------------

windows7でのOLE/COM Object viewのインストール方法

OLE/COM Object viewは、システムに現在インストールされている全てのオブジェクトを調べることができるツール。

2015/03現在ダウンロード場所
-----------------------------------------------------------------

http://jp.downv.com/install-OLE-COM%83I%83u%83W%83F%83N%83g%83r%83%85%81%5B%83A-10555289.htm

http://download.cnet.com/Windows-2000-Resource-Kit-Tool-OLE-COM-Object-Viewer-oleview-exe/3000-10250_4-10732958.html

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

自分のwindowsでは C:\Program Files (x86)\Resource Kit にインストールされた。

oleview.exeを実行すると、システムによっては「iviewers.dllというファイルがない」というメッセージが出る。

dllのダウンロード場所
-----------------------------------------------------------------

http://download.microsoft.com/download/2/f/1/2f15a59b-6cd7-467b-8ff2-f162c3932235/ovi386.exe

古いバージョンのoleview.exeから取得することができる。デフォルトではファイルはC:\MSTOOLS\BINディレクトリにインストールされる。

https://www.microsoft.com/en-us/download/details.aspx?id=8279

Windows SDKをインストールしてもOK。

https://msdn.microsoft.com/ja-jp/windows/desktop/bg162891.aspx

Widnows8.1用だが7もOK。
-----------------------------------------------------------------

必要なのはiviewer.dllだけ。oleview.exeと同じディレクトリにコピーした後、下記のコマンドラインを実行して、dllを登録する。(コマンドラインを管理者権限で開くには、Ctrl + Shiftを押しながら起動)

--------------------------------------------------------
Regsvr32 "(iviewers.dllのパス)"
例:例: Regsvr32 "C:\Program Files (x86)\Resource Kit\iviewers.dll"
--------------------------------------------------------

参考サイト

http://open-shelf.appspot.com/AutoIt3.3.6.1j/html/intro/ComRef.htm

http://qiita.com/zakuroishikuro/items/d9530f6feb5467fc318b

【uwsc】windows media playerで動画ファイルを再生

uwscを使って、windows media playerで動画ファイルを再生するスクリプト。

windows media playerで動画ファイル(wmv)を再生
-----------------------------------------------------
exec("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe ¥play C:¥目的のファイル.wmv")
-----------------------------------------------------
¥
オプションの解説

http://support.microsoft.com/kb/241422/ja

ファイル名に半角スペースを含む場合は<#DBL>で囲む。
-----------------------------------------------------
exec("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe /play <#DBL>C:¥半角 スペース.wmv<#DBL>")
-----------------------------------------------------

ただ media player を起動するだけならこちらでもOK
-----------------------------------------------------
doscmd("C:¥Program Files (x86)¥Windows Media Player¥wmplayer.exe")
-----------------------------------------------------

動画ファイルを直接しているするならこちら。この場合動画ファイルが関連付けされている動画プレイヤーが起動。
-----------------------------------------------------
doscmd("C:/Users/目的のファイル.wmv")
-----------------------------------------------------

【UWSC】動画ファイルの再生時間を取得

wmvファイルなどの動画ファイルから再生時間を取得するUWSCスクリプト。
動画ファイルのプロパティの詳細タグから見える動画の長さを参照する。

UWSCスクリプト
--------------------------------------------------
//エクスプローラの詳細情報を得る
dim o_Shell = CreateOleObj("Shell.Application")
dim s_dir   = get_cur_dir

//このファイルと同じフォルダにあるものとする
dim s_fileName = "目的のファイル.wmv"

//NameSpace(名前空間)でフォルダオブジェクトを作る
dim o_folder = o_Shell.NameSpace(s_dir)

//ParseNameで指定されたアイテムの FolderItem オブジェクトを作成し返す。
//FolderItem とは、フォルダに含まれる個々のファイルやフォルダのこと。
dim o_item  = o_folder.ParseName(s_fileName)

dim i = 27 //長さを参照するための番号 XPなら21

//GetDetailsOfメソッドでフォルダ内のアイテムについて詳細を取得。
dim s_columName = o_folder.GetDetailsOf(emptyparam, i)
dim s_value   = o_folder.GetDetailsOf(o_item, i)
s = i +" : "+ s_columName +" = "+ s_value
print s

sleep(50) //表示時間
--------------------------------------------------

もっと他の詳細情報を得たい場合

--------------------------------------------------
//エクスプローラの詳細情報を得る
dim o_Shell = CreateOleObj("Shell.Application")
dim s_dir   = get_cur_dir

//このファイルと同じフォルダにあるものとする
dim s_fileName = "目的のファイル.wmv"

//NameSpace(名前空間)でフォルダオブジェクトを作る
dim o_folder = o_Shell.NameSpace(s_dir)

//ParseNameで指定されたアイテムの FolderItem オブジェクトを作成し返す。
//FolderItem とは、フォルダに含まれる個々のファイルやフォルダのこと。
dim o_item  = o_folder.ParseName(s_fileName)

dim i
for i=-1 to 50
  //GetDetailsOfメソッドでフォルダ内のアイテムについて詳細を取得。
  dim s_columName = o_folder.GetDetailsOf(emptyparam, i)
  dim s_value   = o_folder.GetDetailsOf(o_item, i)
  s = i +" : "+ s_columName +" = "+ s_value
  print s
next

sleep(50) //表示時間
--------------------------------------------------

【vbs】windows7でmp3ファイルの再生時間を取得

windows7でmp3ファイルの再生時間を取得するためのメモ

//このスクリプトをvbsファイルとして保存
--------------------------------------------------------------
'Explicit(エクスプリシット)はっきりと述べられた、明白な、の意。
'変数の宣言を強制する
Option Explicit

Dim itm

With CreateObject("Shell.Application").Namespace("C:\Users\Public\Music\Sample Music")
For Each itm In .Items

'InStr は文字列の中に指定の言葉があるか
'LCase は小文字に変換
If InStr(LCase(itm.Type), "mp3") Then
WScript.Echo itm.Name & " , 長さ:" & .GetDetailsOf(itm, 27)
'XPの場合は21
End If
Next
End With
--------------------------------------------------------------

ちなみに他の主な項目は次のとおり。

-----------------------------------------------------------------------------
WScript.Echo itm.Name & " , ファイルサイズ:" & .GetDetailsOf(itm, 1)
WScript.Echo itm.Name & " , ファイルの種類:" & .GetDetailsOf(itm, 2)
WScript.Echo itm.Name & " , 更新日時:" & .GetDetailsOf(itm, 3)
WScript.Echo itm.Name & " , 作成日時:" & .GetDetailsOf(itm, 4)
WScript.Echo itm.Name & " , アクセス日時:" & .GetDetailsOf(itm, 5)
WScript.Echo itm.Name & " , 属性:" & .GetDetailsOf(itm, 6)
WScript.Echo itm.Name & " , 所有者:" & .GetDetailsOf(itm, 10)
WScript.Echo itm.Name & " , 参加アーティスト:" & .GetDetailsOf(itm, 13)
WScript.Echo itm.Name & " , アルバム:" & .GetDetailsOf(itm, 14)
WScript.Echo itm.Name & " , 年:" & .GetDetailsOf(itm, 15)
WScript.Echo itm.Name & " , ジャンル:" & .GetDetailsOf(itm, 16)
WScript.Echo itm.Name & " , 指揮者:" & .GetDetailsOf(itm, 17)
WScript.Echo itm.Name & " , 評価:" & .GetDetailsOf(itm, 19)
WScript.Echo itm.Name & " , 参加アーティスト:" & .GetDetailsOf(itm, 20)
WScript.Echo itm.Name & " , タイトル:" & .GetDetailsOf(itm, 21)
WScript.Echo itm.Name & " , コメント:" & .GetDetailsOf(itm, 24)
WScript.Echo itm.Name & " , トラック番号:" & .GetDetailsOf(itm, 26)
WScript.Echo itm.Name & " , 長さ:" & .GetDetailsOf(itm, 27)
WScript.Echo itm.Name & " , ビット レート:" & .GetDetailsOf(itm, 28)
WScript.Echo itm.Name & " , コンピューター:" & .GetDetailsOf(itm, 53)
WScript.Echo itm.Name & " , 名前:" & .GetDetailsOf(itm, 155)
WScript.Echo itm.Name & " , フォルダーのパス:" & .GetDetailsOf(itm, 177)
WScript.Echo itm.Name & " , 項目の種類:" & .GetDetailsOf(itm, 182)
WScript.Echo itm.Name & " , エンコード方式:" & .GetDetailsOf(itm, 193)
WScript.Echo itm.Name & " , 発行元:" & .GetDetailsOf(itm, 195)
WScript.Echo itm.Name & " , サブタイトル:" & .GetDetailsOf(itm, 196)
WScript.Echo itm.Name & " , アルバムのアーティスト:" & .GetDetailsOf(itm, 217)
WScript.Echo itm.Name & " , ビート数/分:" & .GetDetailsOf(itm, 219)
WScript.Echo itm.Name & " , 作曲者:" & .GetDetailsOf(itm, 220)
WScript.Echo itm.Name & " , イニシャル キー:" & .GetDetailsOf(itm, 221)
WScript.Echo itm.Name & " , コンパイルの一部:" & .GetDetailsOf(itm, 222)
WScript.Echo itm.Name & " , 雰囲気:" & .GetDetailsOf(itm, 223)
WScript.Echo itm.Name & " , セットのパート:" & .GetDetailsOf(itm, 224)
WScript.Echo itm.Name & " , サブタイトル:" & .GetDetailsOf(itm, 254)
WScript.Echo itm.Name & " , 共有ユーザー:" & .GetDetailsOf(itm, 268)
-----------------------------------------------------------------------------

2 / 41234