質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

42303閲覧

VBSのAppActivate()でアプリケーションがアクティブになりません

juam

総合スコア26

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

1クリップ

投稿2015/10/30 02:13

「コード1」のようなコードでコントロールパネルの「ユーザー アカウント」を起動して「ユーザーがこのコンピューターを使うには...」のチェックを外したいのですが AppActivate() からは false が返るだけで意図した動作ができません。

以下は試したこと、わかったことです
・Wscript.Quit しないで Sendkeys() を実行させるようなコードに変更してもチェックは外れませんでした
・「コード2」の状態でキーボードで直接 Alt+E を行うとチェックは外れるのでアクティブになっているように見えるのですがコード上ではうまくいっていません

AppActivate() に渡す引数が間違っている可能性もありそうです。
環境はwindows8.1です。

どなたかご存知の方、ご教授頂けないでしょうか。

vbs

1' コード1 2Option Explicit 3Dim shell, i 4Set shell = CreateObject("WScript.Shell") 5shell.Run("control userpasswords2") 6Do Until shell.AppActivate("アカウント") 7 Wscript.Sleep 1000 8 If i > 10 Then Wscript.Quit 9 i = i + 1 10Loop 11 12shell.Sendkeys("%E{-}") 13shell.Sendkeys("{ENTER}")

vbs

1' コード2 2Option Explicit 3Dim shell, i 4Set shell = CreateObject("WScript.Shell") 5shell.Run("control userpasswords2") 6shell.AppActivate("アカウント")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

理由はわかりませんが
以下のように Run() の引数を変えることでうまくいきました。

VBScript

1Option Explicit 2Dim shell, i 3Set shell = CreateObject("WScript.Shell") 4'shell.Run("control userpasswords2") ' AppActivate()でtrueが返らない 5'shell.Run("Netplwiz.exe") ' AppActivate()でtrueが返らない 6shell.Run("rundll32.exe netplwiz.dll,UsersRunDll") ' AppActivate()でtrueが返る 7 8Do Until shell.AppActivate("ユーザー アカウント") 9 Wscript.Sleep 100 10 If i > 10 Then Wscript.Quit 11 i = i + 1 12Loop 13 14shell.Sendkeys("%E{-}") 15shell.Sendkeys("{ENTER}")

以下でもうまくいきました。
Run()は関数呼び出し、Exec()は実行ファイル呼び出し、
でないとうまくいかない場合があるということなのかもしれません。

VBScript

1Option Explicit 2Dim shell, i 3Set shell = CreateObject("WScript.Shell") 4'shell.Run("rundll32.exe netplwiz.dll,UsersRunDll") 5shell.Exec "Netplwiz.exe" 6 7Do Until shell.AppActivate("ユーザー アカウント") 8 Wscript.Sleep 100 9 If i > 10 Then Wscript.Quit 10 i = i + 1 11Loop 12 13shell.Sendkeys("%E{-}") 14shell.Sendkeys("{ENTER}")

投稿2015/10/30 04:53

編集2015/10/30 05:24
juam

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コントロールパネルの「ユーザー アカウント」を起動

これは

shell.Run("control userpasswords2")

だけで呼び出せていると思いますので、素直に次のようにしたらうまくいきませんか?

vbscript

1Dim shell, i 2Set shell = CreateObject("WScript.Shell") 3shell.Run("control userpasswords2") 4Wscript.Sleep 1000 'ダイアログの出現を待つための1秒 5shell.Sendkeys("%E{-}") 6shell.Sendkeys("{ENTER}")

ダイアログの出現をもっとしっかり確認するならこんな感じで

vbscript

1Dim shell, i, onActive, ProcessList, Process 2Set shell = CreateObject("WScript.Shell") 3shell.Run("control userpasswords2") '"Netplwiz.exe"でもOK 4i = 1 5Set ProcessList = GetObject("winmgmts:").ExecQuery("select * from Win32_Process where Name='Netplwiz.exe'") 6 for each Process in ProcessList 7 onActive = true 8 exit for 9 if i > 10 then Wscript.Quit 10 i = i +1 11 Wscript.Sleep 100 12next 13 14shell.Sendkeys("%E{-}") 15shell.Sendkeys("{ENTER}")

投稿2015/10/30 03:48

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juam

2015/10/30 04:21

takitoさん ご回答ありがとうございます。 ご提案頂いた2通りのコードで試してみましたがうまくいきませんでした。 ※上のコードはsleepを5秒に増やしてもダメでした
takito

2015/10/30 05:10

すみません、Win8.1が手元に無くWin7で試していたことを書くべきでした。 うまくいって何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問