Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11全般 : Microsoft 365)
VBAorバッチファイルでのカメラを使った画面ロックのやり方
投稿日時: 23/06/12 15:26:29
投稿者: joegillian

VBAかバッチファイルにてWindowsカメラを使用して、カメラ外に出た場合画面をロックして画面の前に人がいる場合は起動し続けるツールを作成したいのですが、コードが思いつきません。
どのように組めばよろしいでしょうか?
また、参考になるコード等もあれば教えてください。

回答
投稿日時: 23/06/12 16:45:33
投稿者: simple

えー、という感じの質問でした。
ネット検索しましたら、
「VBAでWEBカメラ操作する」
https://excel-ubara.com/excelvba4/EXCEL_VBA_432.html
などという記事があるようです。
 
さて、
> カメラ外に出た場合画面をロックして
> 画面の前に人がいる場合は起動し続けるツールを作成したいのですが
ということは、いわゆる「物体認識」をさせようということでしょうか。
ExcelVBAの質問掲示板で扱う話題ではないと思います。
別の掲示板をあたってください。

投稿日時: 23/06/12 16:48:48
投稿者: joegillian

VBAでも作れるのかの意図も含んでの質問なのでカテゴリは合ってると思います。
他のカテゴリでも同じ内容出してみたいと思います、ありがとうございます!

投稿日時: 23/06/12 16:49:37
投稿者: joegillian

あと別の掲示板と言う具体的な案内があるならカテゴリも教えていただけると幸いです。

回答
投稿日時: 23/06/12 19:21:00
投稿者: simple

「物体検知」とかでネットで調べてください。
こうした機械学習系の話はVBAなどではなく、もっぱらPythonが使われます。
それは既存のライブラリが使えるからではないですか?
Pythonもそう早いわけではないですが、VBAはもっと遅く使い物にならない気がします。
少なくともExcelVBAの板で機械学習の話が扱われたことは未だかつてありません。
 
あなたはそうした経験が長いのなら自作されたらよいと思いますが、
そうでなければ外注することも視野に入れたらどうでしょう。
ネットで「ソフト作成依頼」とかで探してみてください。
 
Windows板で議論が進んでいるようですから、そちらでお願いします。
わたしからは以上です。

投稿日時: 23/06/13 14:18:15
投稿者: joegillian

@echo off
 
REM 画面ロックフラグ
set "lockFlag=0"
 
REM タイムアウト値(秒)
set "timeout=15"
 
REM キーボード入力およびマウス入力を監視するVBSファイルを作成
(
    echo Set objShell = CreateObject("WScript.Shell")
    echo strInitialIdleTime = objShell.AppActivate("Batch File")
    echo Do
    echo intIdleTime = objShell.AppActivate("Batch File")
    echo If intIdleTime - strInitialIdleTime >= %timeout%000 Then
    echo objShell.Run "rundll32.exe user32.dll,LockWorkStation"
    echo set lockFlag=1
    echo End If
    echo WScript.Sleep 1000
    echo Loop While True
) > CheckIdle.vbs
 
REM VBSファイルをバックグラウンドで実行
start /B wscript //nologo CheckIdle.vbs
 
REM alt+enterキーの入力を監視するVBSファイルを作成
(
    echo Set objShell = CreateObject("WScript.Shell")
    echo Do
    echo If objShell.AppActivate("Batch File") And objShell.AppActivate("Batch File").Document.Title = "Batch File" Then
    echo If objShell.CapsLock And objShell.ScrollLock And objShell.NumLock Then
    echo WScript.Sleep 100
    echo If objShell.CapsLock And objShell.ScrollLock And objShell.NumLock Then
    echo objShell.Popup "OKを押すとバッチファイルを終了します。", 0, "終了の確認", 1
    echo If Err.Number = 0 Then
    echo exit
    echo End If
    echo End If
    echo End If
    echo End If
    echo WScript.Sleep 100
    echo Loop While True
) > CheckAltEnter.vbs
 
REM VBSファイルをバックグラウンドで実行
start /B wscript //nologo CheckAltEnter.vbs
 
REM 画面ロック解除監視のタイマーを開始
timeout /T %timeout% /NOBREAK > nul
 
REM 画面ロック解除
if %lockFlag% equ 1 (
    rundll32.exe user32.dll,LockWorkStation
)
 
REM バッチファイルの終了メッセージ
echo バッチファイルを終了します。