SQLの窓

2017年09月01日


VBScript を『管理者として実行する』には、Shell の runas ( 右クリックメニューの実行と同等 ) で実現します

UAC によるセキュリティの影響で VBScript を使う場合、管理者権限で実行しないとレジストリの一部には書き込めるのに重要なフォルダには書き込めないというような OS が決めたルールがあります。

それに対する対処方法は、もっとも簡単な記述では以下のようになります
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if



Shell.ShellExecute method

これは、VBScript から利用可能な Shell の機能を使って、右クリックメニューにある『管理者として実行』を実行する方法です。ここでは日本語では無く runas と言う文字列を使って管理者として実行させています。

但し、注意するのは引数なしで実行された場合に、引数をダミーで一つセットして( この場合一つめの runas がそうです )自分自身を再度呼び出して、引数がなかった場合の処理としては処理終了します。

つまり、二度目の実行が管理者としての実行になります。

この場合は、スクリプトに引数を渡す事ができません。もし渡したいしたい場合は、違ったトリックを使う必要があるのに注意して下さい。(その場合は、外部ファイルから入力するのがもっとも簡単で確実だと思います)




posted by lightbox at 2017-09-01 13:10 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

管理者権限でコマンドプロンプトを開く VBScript

第一引数にフォルダのパスを指定するようにしています。指定しなければ、カレントフォルダで開きます。

管理者で実行するのは、ShellExecute に、"runas" を渡して実行しているからです。これは、右クリックで表示されるメニューにある『管理者として実行』に相当します
acmd.vbs
Set obj = CreateObject("Shell.Application")
Set WshShell = CreateObject( "WScript.Shell" )
if WScript.Arguments.Count <> 0 then
	obj.ShellExecute "cmd.exe", "/s /k pushd """ & WScript.Arguments(0) & """", "", "runas", 1
else
	obj.ShellExecute "cmd.exe", "/s /k pushd """ & WshShell.CurrentDirectory & """", "", "runas", 1
end if





このスクリプトを Windows の system32 フォルダへコピーして、以下のようにレジストリ登録すると、フォルダを右クリックしてその場所で実行可能になります
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\acmd]
@="管理者コマンドプロンプト"
"NoWorkingDirectory"=""

[HKEY_CLASSES_ROOT\Directory\shell\acmd\command]
@="wscript.exe acmd.vbs \"%V\""


※ system32 フォルダへコピーしたスクリプトを編集するには、エディタの実行時に『管理者として実行』する必要があります。

Windows 7 では、単に管理者としてコマンドプロンプトを開きたい場合は、スタートメニューの『プログラムとファイルの検索』内に cmd と入力して CTRL + SHIFT + ENTER すればいいでしょう




関連する外部の記事

windows - How to run vbs as administrator from vbs? - Stack Overflow




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

2016年12月18日


シャットダウンダイアログを表示する / ログオフ・リブート・シャットダウン / VBScript

※ Windows10 でも動作確認しました



Set objShell = CreateObject("Shell.Application")
objShell.ShutdownWindows()


▼ 右クリックから保存して下さい。
ブラウザでダウンロード
※ クリックすると、新しいウインドウで『プレーンテキスト(text/plain)』として開きます
ログオフ
シャットダウン
リブート
パワーオフ(こちらの環境では未確認)

logoff.vbs
Set colOperatingSystems = _
GetObject("winmgmts:{(Shutdown)}").ExecQuery( _
"Select * from Win32_OperatingSystem") 
For Each objOperatingSystem in colOperatingSystems 
	ObjOperatingSystem.Win32Shutdown(0) 
Next


関連するスクリプト

ログオフ・リブート・シャットダウン



posted by lightbox at 2016-12-18 17:04 | VBS + Shell | このブログの読者になる | 更新情報をチェックする

2014年08月30日


Windows のファイルの『更新日付』のみ VBScript + Shell.Application で変更

更新日付のみです。作成日とアクセス日付は変更できません。

FolderItem.ModifyDate property
Dim objShell

Set objShell = CreateObject("Shell.Application")

Set objFolder = objShell.NameSpace("C:\Users\lightbox\Documents")
if (not objFolder is nothing) then

	Dim objFolderItem
				
	Set objFolderItem = objFolder.ParseName("test.zip")
	if (not objFolderItem is nothing) then
		objFolderItem.ModifyDate = "01/01/2010 0:00:00 AM"
	end if
end if



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

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 : キーストロークをウインドウに送信して、キー操作をした事にする( 例:リモート デスクトップ接続ダイアログ )



リモート デスクトップ接続は開いた後、詳細画面が表示されないので、ALT+O を送り、その後 SHIFT+TAB でタブを選択して、右矢印で次のタブに移動させます。

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run( "mstsc.exe" )

WScript.Sleep(500)
WshShell.AppActivate("リモート デスクトップ接続")
WScript.Sleep(500)

' キーストロークを送信
WshShell.SendKeys ("%O")
WScript.Sleep(500)
WshShell.SendKeys ("+{TAB}")
WScript.Sleep(500)
WshShell.SendKeys ("{RIGHT}")

※ キーストロークの送信は環境や状況によっては、うまく動作しないかもしれません。その場合は適宜変更して下さい(キーストローク詳細)

環境変数ダイアログは 『rundll32.exe sysdm.cpl,EditEnvironmentVariables』で実行できます


タグ:VBScript
posted by lightbox at 2014-03-12 17:56 | 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 ドロップシャドウの参考デモ
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり