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

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

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

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

PowerShell

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

コマンドプロンプト

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

Q&A

解決済

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

akitasoran
akitasoran

総合スコア20

UWSC

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

PowerShell

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

コマンドプロンプト

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

3回答

0グッド

0クリップ

328閲覧

投稿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コマンドを実行することは不可能でしょうか?

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

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答3

1

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

投稿2022/12/01 14:25

matukeso

総合スコア1427

cx20👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

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

総合スコア80498

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

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を使っても問題は無いと思います。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

UWSC

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

PowerShell

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

コマンドプロンプト

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