SQLの窓

2014年06月14日


VBScript : プロパティダイアログを表示する

プロパティを表示する為には、呼び出し元が終了していない必要があるので、スクリプトを終了させない方法を二通り用意しています( .HTA からであれば必要ありません。)

※ スクリプトは prop.vbs としています

MsgBox を使う方法
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set objShell = CreateObject("Shell.Application")
strTarget = Wscript.Arguments(0)
strPath = Fso.GetParentFolderName(strTarget)
strFile = Fso.GetFileName(strTarget)

Set objFolder = objShell.NameSpace(strPath)
Set objFile = objFolder.ParseName(strFile)
objFile.InvokeVerb("properties")

MsgBox("プロパティダイアログを表示する為にプロセスを維持します")



WMI を使う方法
' このセクションは、cscript.exe で処理を強制させるものです
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = CreateObject( "WScript.Shell" )
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """ """ & Wscript.Arguments(0) & """", 3 )
	WScript.Quit
end if

strTarget = Wscript.Arguments(0)
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set objShell = CreateObject("Shell.Application")
strPath = Fso.GetParentFolderName(strTarget)
strFile = Fso.GetFileName(strTarget)

Set objFolder = objShell.NameSpace(strPath)
Set objFile = objFolder.ParseName(strFile)
objFile.InvokeVerb("properties")

' WMI の処理の為のオブジェクトを取得
' スクリプトを終了しないようにしています
Set obj = GetObject("winmgmts:\\.\root\cimv2")
' イベントの定義
Set objMonitor = obj.ExecNotificationQuery( _
	"select * from __InstanceModificationEvent " & _
	"where TargetInstance isa 'Win32_LocalTime' " & _
	" and TargetInstance.Year = 0" _
)

Wscript.Echo "プロパティ表示後は、このコマンドプロンプトは閉じて下さい"
Set objLatestEvent = objMonitor.NextEvent 

コマンドラインで以下のように実行します
>prop.vbs "対象ファイルのフルパス"

関連する記事

VBScript : ファイルやフォルダを右クリックすると表示されるコマンド文字列の一覧を取得して、それを使ってコマンドを実行する


タグ:SHELL VBScript WMI
posted by lightbox at 2014-06-14 17:02 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

2014年03月12日


VBScript : ファイルやフォルダを右クリックすると表示されるコマンド文字列の一覧を取得して、それを使ってコマンドを実行する


Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set objShell = CreateObject("Shell.Application")
strTarget = Wscript.Arguments(0)
strPath = Fso.GetParentFolderName(strTarget)
strFile = Fso.GetFileName(strTarget)

Set objFolder = objShell.NameSpace(strPath)
Set objFile = objFolder.ParseName(strFile)

Set obj = objFile.Verbs
For i = 0 To obj.Count - 1
	Wscript.Echo obj.item(i).Name
Next

※ 何故か空白のエントリも表示されます。

開く(&O)
編集(&E)
コマンド プロンプトで開く(&W)
印刷(&P)


ウイルススキャン...





切り取り(&T)
コピー(&C)
ショートカットの作成(&S)
削除(&D)
名前の変更(&M)
プロパティ(&R)
Wscript.Echo で出力しているので、コマンドラインでは以下のようにします >cscript ListVerb.vbs "対象ファイルのフルパス" 以下は実行用のスクリプトで以下のようにして実行します InvokeVerb.vbs "対象ファイルのフルパス" "開く(&O)" ※ プロパティの表示は、以下を参照して下さい VBScript : プロパティダイアログを表示する
Set Fso = CreateObject( "Scripting.FileSystemObject" )
Set objShell = CreateObject("Shell.Application")
strTarget = Wscript.Arguments(0)
strPath = Fso.GetParentFolderName(strTarget)
strFile = Fso.GetFileName(strTarget)

Set objFolder = objShell.NameSpace(strPath)
Set objFile = objFolder.ParseName(strFile)

For Each objItem In objFile.Verbs

	if objItem.Name = Wscript.Arguments(1) then
		objItem.DoIt()
		Exit For
	end if

Next

objFile.InvokeVerb( "コマンド名" ) は現在動作しないようです



タグ:SHELL
posted by lightbox at 2014-03-12 09:29 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

2014年03月11日


VBScript : Shell.Application で開くWindows ツール



なんでもかんでも実行できるわけではありませんが、使えるものもたくさんあります。ソースを一つで表現する為に、HTA で記述していますが、それぞれ単独で使うほうが現実的だとは思います。

コントロールパネル内は全て実行可能なはずです。デスクトップは、objShell.NameSpace(0) で取得されており、そこからフォルダオブジェクトや、フォルダアイテムオブジェクトを取得して使用しています。

▼ shell_space.hta
<SCRIPT language="VBScript">
Dim objShell : Set objShell = CreateObject("Shell.Application")
Dim objFolder : Set objFolder = objShell.NameSpace(0)
</SCRIPT>
<html>
<head>
<title>Shell で開く Windows ツール</title>
<meta http-equiv="content-type" content="text/html; charset=SHIFT_JIS">
<HTA:APPLICATION ID="Sqlwin"
	BORDERSTYLE="sunken"
	INNERBORDER="yes"
	SCROLL="no"
	ICON="http://winofsql.jp/WinOfSql.ico"
>

<style type="text/css">
* {
	font-size:26px;
	font-family: "メイリオ", Meiryo, "MS Pゴシック", sans-serif;
}
</style>

<SCRIPT language=VBScript>
Function OpenDesktopFile( strTarget )

	Dim objFile

	Set objFile = objFolder.ParseName(strTarget)
	Call objFile.InvokeVerb()

End Function
Function OpenProp( strTarget )

	Dim objFile

	Set objFile = objFolder.ParseName(strTarget)
	objFile.InvokeVerb("properties")

End Function
Function ControlItemb( strName, strTarget )

	Dim ControlPanel,objFolder,objFolderItems

	ControlPanel = "::{26EE0668-A00A-44D7-9371-BEB064C98683}"
	Set objFolder = objShell.NameSpace(ControlPanel)

	Set objFolderItems = objFolder.Items
	For I = 0 to objFolderItems.Count - 1
		if objFolderItems.item(I).Name = strName then
			For J = 0 to objFolderItems.item(I).GetFolder.Items.Count - 1
				if objFolderItems.item(I).GetFolder.Items.item(J).Name = strTarget then
					objFolderItems.item(I).GetFolder.Items.item(J).InvokeVerb()
					Exit For
				end if
			Next
		end if
	Next

End Function
</SCRIPT>

</head>
<body>

<input type=button value="コンピュータ" onClick='Call OpenDesktopFile("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")'>
<input type=button value="コンピュータのプロパティ" onClick='Call OpenProp("::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")'>
<br>

<input type=button value="ネットワーク" onClick='Call OpenDesktopFile("::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}")'>
<input type=button value="ネットワークのプロパティ" onClick='Call OpenProp("::{F02C1A0D-BE21-4350-88B0-7367FC96EF3C}")'>
<br>

<input type=button value="ごみ箱" onClick='Call OpenDesktopFile("::{645FF040-5081-101B-9F08-00AA002F954E}")'>
<input type=button value="ごみ箱のプロパティ" onClick='Call OpenProp("::{645FF040-5081-101B-9F08-00AA002F954E}")'>
<br>

<input type=button value="コントロールパネル" onClick='Call OpenDesktopFile("::{26EE0668-A00A-44D7-9371-BEB064C98683}")'>
<input type=button value="日付と時刻" onClick='Call ControlItemb("時計、言語、および地域", "日付と時刻")'>
<input type=button value="個人設定" onClick='Call ControlItemb("デスクトップのカスタマイズ", "個人設定")'>

</BODY>
</html>




posted by lightbox at 2014-03-11 23:37 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

2013年02月05日


Windows7 : VBScriptで、コントロールパネル内のエントリの実行

Windows7 で実行して確認しました。Windows XP 以前では少し違っていたのですが、当時のコードを Windows7 で実行すると動かなかったので再度テストしました。
' Windows7 での実行サンプル

Set objShell = CreateObject("Shell.Application")

' All Control Panel Items
ControlPanel = "::{21EC2020-3AEA-1069-A2DD-08002B30309D}"

' コントロールパネルをあらわすフォルダ
Set objFolder = objShell.NameSpace(ControlPanel)

' オブジェクトが正常に取得できた場合
if not objFolder is nothing then
	' フォルダの中のアイテムコレクションを取得
	Set objFolderItems = objFolder.Items
	For I = 0 to objFolderItems.Count - 1
		' 一覧の中から特定のエントリを対象とする
		if objFolderItems.item(I).Name = "日付と時刻" then
			' 実行は以下で確認しています
			objFolderItems.item(I).InvokeVerb()
			Exit For
		end if
	Next
end if


'電源オプション
'通知領域アイコン
'NVIDIA コントロール パネル
'タスク バーと [スタート] メニュー
'資格情報マネージャー
'既定のプログラム
'RemoteApp とデスクトップ接続
'Windows Update
'デスクトップ ガジェット
'Windows ファイアウォール
'電話とモデム
'Java
'音声認識
'ユーザー アカウント
'地域と言語
'ホームグループ
'マウス
'フォルダー オプション
'キーボード
'デバイス マネージャー
'Windows CardSpace
'パフォーマンスの情報とツール
'プログラムと機能
'インデックスのオプション
'ネットワークと共有センター
'保護者による制限
'自動再生
'同期センター
'回復
'インターネット オプション
'デバイスとプリンター
'色の管理
'バックアップと復元
'システム
'アクション センター
'フォント
'Windows Anytime Upgrade
'ディスプレイ
'トラブルシューティング
'はじめに
'管理ツール
'コンピューターの簡単操作センター
'Windows Defender
'日付と時刻
'位置センサーとその他のセンサー
'個人設定
'サウンド
'Realtek HD オーディオマネージャ
'DirectX
'メール
'Adobe Gamma
'Flash Player

Shell Objects for Scripting and Microsoft Visual Basic (Windows)


タグ:VBScript SHELL
posted by lightbox at 2013-02-05 14:54 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

2010年08月12日


シャットダウンダイアログを開くスクリプトと、シャットダウンするスクリプト

シャットダウンダイアログを開くスクリプトが二つ、シャットダウンするスクリプトが二つです。

スクリプトと言っても、それぞれひとつづつはコマンドラインで実行するアプリケーションです。 shutdown は、リモートデスクトップで接続している PC をシャットダウンする場合に使用可能です。
これはもともとシャットダウンダイアログを開く為のメソッドを実行しているものです。この後、実際にシャットダウンするには、キーストロークを送る事によって可能です。
Set Shell = Wscript.CreateObject( "Shell.Application" )
Shell.ShutdownWindows()


タスクの強制終了のはずなのですが、エクスプローラは終了する前に確認ダイアログを表示する仕様になっているようで、結果的にひとつ前のコードと同じ動作をしてしまいました。エクスプローラの再起動は こちらのスクリプト で可能ですが、Windows が再起動するのでは無く、エクスプローラのみ再起動します
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
Call WshShell.Run("taskkill /im explorer.exe", 0 )


コマンドプロンプトから実行可能なシャットダウン方法です
Set WshShell = Wscript.CreateObject( "WScript.Shell" )
Call WshShell.Run("shutdown -s -t 0", 0 )


スクリプトを用いた最も汎用的なサンプルです。他の定数を使用して、ログオフやリプートも可能です
Const LOGOFF = 0
Const SHUTDOWN = 1
Const REBOOT = 2
Const FORCED_LOGOFF = 4
Const FORCED_SHUTDOWN = 5
Const FORCED_REBOOT = 6
Const POWEROFF = 8
Const FORCED_POWEROFF = 12

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & _
	"{impersonationLevel=impersonate,(Shutdown)}!\\" & _
	strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
	ObjOperatingSystem.Win32Shutdown(SHUTDOWN)
Next



posted by lightbox at 2010-08-12 17:51 | VBS + Shell | このブログの読者になる | 更新情報をチェックする
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 終わり