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

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

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

UWSCは、Windowsの作業を自動化するソフトです。マウスとキー入力を記録して代行することが可能。スクリプト形式により自由に編集することもできます。スケジュール機能を持ち、Excelとの連携も可能です。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

Q&A

解決済

3回答

2145閲覧

UWSCでファイルを開いているプロセスの情報を取得したい

akitasoran

総合スコア20

UWSC

UWSCは、Windowsの作業を自動化するソフトです。マウスとキー入力を記録して代行することが可能。スクリプト形式により自由に編集することもできます。スケジュール機能を持ち、Excelとの連携も可能です。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

0グッド

0クリップ

投稿2022/12/01 09:58

編集2022/12/01 10:00

UWSCでopenfilesコマンドを使いファイルを開いているプロセスの情報を取得したいです。

コマンドプロンプトで以下のプログラムを実行すると、エラーメッセージが表示されます。

UWSC

1PRINT DOSCMD("openfiles /query /fo csv")
エラー: 対象となるシステムは 32 ビットの OS を実行している必要があります。

ビットを確認するためコマンドプロンプトで以下のコマンドを実行すると「AMD64」と表示され、UWSCでDOSCMD関数を使い同じコマンドを実行すると「x86」と表示されました。

cmd

1C:\Users\username>echo %PROCESSOR_ARCHITECTURE% 2AMD64

UWSC

1PRINT DOSCMD("echo %PROCESSOR_ARCHITECTURE%") 2x86

UWSCで実行されるコマンドプロンプトはパスが通っているものかと思い、コマンドプロンプトでwhereコマンドを使いどのcmd.exeにパスが通っているのか確認したところ、以下のように32bit版だけでした。

cmd

1C:\Users\username>where cmd.exe 2C:\Windows\System32\cmd.exe

そこで64bit版があるディレクトリのパスを通し優先順位を32bit版より上にして「%PROCESSOR_ARCHITECTURE%」を取得してみても変化なく、openfilesコマンドを実行しても結果は同じでした。

cmd

1C:\Users\username>where cmd.exe 2C:\Windows\SysWOW64\cmd.exe 3C:\Windows\System32\cmd.exe

そこでPowerShellでできないかと思ったのですが、こちらは結果を取得できないしエラーすら表示されませんでした。

UWSC

1PRINT POWERSHELL("openfiles /query /fo CSV")

コマンドプロンプト、PowerShellともUWSCを使わずに本体で実行した場合は結果が取得されます。

UWSCに管理者権限を付与して実行しても結果は同じでした。

UWSC

1DEF_DLL IsUserAnAdmin(): BOOLEAN: shell32.dll 2 3IFB IsUserAnAdmin() <> FALSE THEN 4 PRINT DOSCMD("openfiles /query /fo csv") 5ENDIF

これ以上できることは思いつかないのですが、UWSCでopenfilesコマンドを実行することは不可能でしょうか?

回答よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

32ビットのプロセスからはsystem32→syswow32のリダイレクトがあるからですね。
同じくリダイレクトでsysnativeがsystem32を指すはずなので
c:\windows\sysnative\openfiles.exeを叩いてみては。

投稿2022/12/01 14:25

matukeso

総合スコア1681

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

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

0

UWSC

1CONST TemporaryFolder = 2 2 3DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject") 4 5WITH FSO 6 DIM Folder = .GetSpecialFolder(TemporaryFolder) 7 DIM folderspec = Folder.Path 8 DIM filename = .GetTempName 9 DIM path = .BuildPath(folderspec, filename) 10ENDWITH 11 12DIM Shell = CREATEOLEOBJ("Shell.Application") 13Shell.FileRun() 14 15DIM ID = GETID("ファイル名を指定して実行", "#32770") 16 17SENDSTR(ID, "cmd /c openfiles /query /fo CSV > " + path) 18CLKITEM(ID, "OK", CLK_BTN) 19SLEEP(0.500) 20 21REPEAT 22 SLEEP(0.100) 23UNTIL GETID("C:\WINDOWS\system32\cmd.exe", "ConsoleWindowClass") = -1 24 25DIM FID = FOPEN(path, F_READ) 26PRINT FGET(FID, F_ALLTEXT) 27FCLOSE(FID) 28FSO.DeleteFile(path)

投稿2022/12/05 09:31

akitasoran

総合スコア20

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

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

0

ベストアンサー

まず、64bitOSでは64bitのopenfiles.exeを実行する必要があります。
32bitのopenfiles.exeを実行するとお書きのエラーになります。

UWSCは使ったこと無いですが、32bitアプリなのでしょう。
32bitアプリから64bitアプリのC:\Windows\System32\openfiles.exeを起動しても、32bit環境下であることを検知して内部的に32bitアプリであるC:\Windows\SysWOW64\openfiles.exeに差し替わるようです。
cmd.exeについても同様。

以下のように32bit版だけでした。

C:\Windows\System32\cmd.exeは64bitアプリですよ。ディレクトリ名に32が付いているのは歴史的経緯です。

UWSCで出来るかどうかわかりませんが、例えば64bit Rubyを経由して、

PRINT DOSCMD("ruby -e <#DBL>system('openfiles /query /fo csv')<#DBL>")

UWSCでなく32bitVBAから、Ruby経由64bit openfiles起動は出来ました。
Rubyでなくても、PythonとかCでもJavaでもよくて、非Microsoftの64bitアプリで他のコマンド(この場合openfiles)を実行できるプログラムなら良いです。

投稿2022/12/01 14:35

otn

総合スコア85799

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

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

akitasoran

2022/12/05 09:31 編集

Ruby経由でも「エラー: 対象となるシステムは…」と表示され実行することはできませんでした。 でも回答を見て確かに他の言語を経由して取得すればできそうだなと思い、「ファイル名を指定して実行」で以下を実行することで結果を得ることができました。 cmd /c openfiles /query /fo CSV Markdownが使えるかわからなかったので、全体は解決方法のところに記載しておきます。 ありがとうございました。
otn

2022/12/05 10:19

> Ruby経由でも「エラー: 対象となるシステムは…」と表示され実行することはできませんでした。 32bit版Rubyを使ったんですかね。今は、64bit版Rubyを使っても問題は無いと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問