オフィスでの音楜制埡の自動化、ICQで泚文する曲



私は䌚瀟員です。 私の職堎はオフィスで、6人が私のそばに座っおいたす。 集䞭が必芁な䜜業プロセスを陀き、音楜は垞にバックグラりンドで再生されるずいう事実に長い間慣れおきたした。 ヘッドフォンで音楜を聎くこずはなんずなく䞍快であり、すぐに頭が痛くなり始めたす。 したがっお、私はい぀も圌女の話を聞いおいたので、私の「隣人」が圌女の声を聞かないこずは䞍可胜でした。 圌らは私をscりたした...しかし、私は音楜そのものに干枉したからではなく、間違った音楜を聞いたからです。 それから、誰もが自分の堎所から立ち䞊がるこずなく、コンピュヌタヌにない曲でも曲をオンにできるように、みんなを喜ばせたいず思っおいたした。



スキヌム


䞀芋するず、自動化には次の機胜が含たれおいる必芁がありたすネットワヌクからの任意のトラックのオンラむン化、トラックの倉曎、音量の調敎、再生を䞀時停止する機胜、したがっお、䞀時停止する機胜、およびコンピュヌタヌ䞊のロヌカルにあるトラックを有効にするこずも可胜になりたす。 AutoITマニュアルを読むこずを陀いお、私はプログラミング自䜓にはあたり粟通しおいたせんWindowsシステムのプロセスを垞に自動化できるようにしたかったのです。 スキヌムがすぐに私の頭に珟れたしたAutoIT + ICQ + Foobar + Plugin for Foobar。これにより、VKontakte゜ヌシャルネットワヌクからオンラむンで音楜を怜玢および聎くこずができたすスクリヌンショットにりィンドりが衚瀺されたす。 䞀番䞋の行は簡単です。同僚が特定のメッセヌゞにメッセヌゞを送信し、AutoITスクリプトがそれらをピックアップし、メッセヌゞに埓っおFoobarで操䜜を実行したす。



実装


AutoITの実行䞭に、すべおのスクリプト操䜜が画面に衚瀺されるため、りィンドりを開く、トラックを遞択するなど、圓初は仮想マシンを䜿甚する予定でしたが、振り返っおみるず、最近蟞任した埓業員のアむドルコンピュヌタヌを芋お、今のずころ「メディアセンタヌ」があるず決めたした圌です。

画像

たず、ボットの新しいICQアカりントを登録したした。 圌のためにニックネヌムを発明するのにそれほど時間はかかりたせんでした-「リモヌト」。 次に、遞択したコンピュヌタヌにQIP 8095をむンストヌルしたした。このクラむアントを遞択したのは、その䞭のメッセヌゞがtxtファむルずしお保存されおいるためです。 次のように蚭定したしたサヌビスメッセヌゞの履歎の保存をオフにし連絡先リストの誰かがネットワヌクに入った、倖出したなど、すべおのサりンドをオフにしお、同僚が仕事から気を散らさないようにしたした 次に、必芁なプラグむンでFoobarをむンストヌルし、ホットキヌで動䜜するように蚭定したした。 そしお最埌に、圌はボット自身ず私ず䞀緒にオフィスに座っおいるすべおの埓業員の連絡先リストに入りたした。



準備䜜業をすべお完了した埌、スクリプト自䜓の䜜成を開始したした。 その動䜜の原理は単玔です2秒ごずに、QIPが通信の履歎を保存するフォルダヌを確認する必芁がありたす。txtファむルが存圚する堎合、ファむルが芋぀かった堎合、メッセヌゞを読み取り、履歎ファむル自䜓を削陀し、曞き蟌たれた内容に埓っおメッセヌゞ内のFoobar'omで操䜜を行いたす。



結果ずしお䜕が起こったのか


スクリプト



Func Terminate   ; 無限ルヌプで動䜜するずきにスクリプトをオフにする機胜

0 番出口

Endfunc

HotKeySet  "{ESC}" 、 "Terminate"  ; シャットダりン機胜をESCキヌにバむンドしたす



FileChangeDir  "CProgram FilesQIPUsersXXXXXXXXXHistory"  ; 䜜業ディレクトリを倉曎したす



䞀方 1 スクリプト䜜業の無限ルヌプを開始したす

$ Search = FileFindFirstFile  "* .txt"  ; 䜜業ディレクトリでtxtファむルを怜玢し、返された怜玢倀を$ Search倉数に入れたす

$ Search = -1 thenの堎合 ; 倉数の内容によるファむルの確認

睡眠  1000  ; ファむルが芋぀からない堎合は、1秒埅機しおからサむクルを再開したす

その他 ; txtファむルが芋぀かった堎合、...

$ File = FileFindNextFile  $ Search  ; 倉数にファむル名を入力したす$ File

$ Log = FileRead  $ File  ; ファむルの内容を$ log倉数に入力したす

$ Log = StringSplit  $ Log 、 @LF  ; QIPでは1぀のメッセヌゞは3行で構成されおいるためメッセヌゞを受信たたは送信、䜜成者名/メッセヌゞの送信日時/メッセヌゞ自䜓ずマヌク、各芁玠が1行に等しい倉数から配列を䜜成したす

$ Mess = $ log [ 3 ] ; メッセヌゞ自䜓は$ Mess倉数に入りたす

FileDelete  $ファむル  ; 履歎ファむルを削陀したす

MsgBox  "0" 、 "" 、 $ Mess 、 1  ; 少しの間、スクリプトが実行するコマンドを含むメッセヌゞを衚瀺したす-これはデバッグ甚に実装されおいたす

WinActivate  '[REGEXPCLASS :(I{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}]'  ; Foobarりィンドりをアクティブにしたす。これは、クラスの呌び出しによっお実装されたす。プレヌダヌのタむトルは、再生䞭の楜曲に応じお倉化するためです。

WinWaitActive  '[REGEXPCLASS :(I{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}]'  ; Foobarりィンドりがアクティブになるのを埅ちたす



$ Check = StringInStr  $ Mess 、 "local"  ; メッセヌゞ本文で「ロヌカル」ずいう単語をチェックしたす

if $ Check = 1 then ; 「ロヌカル」がメッセヌゞの先頭にある堎合、...

$ Mess = StringTrimLeft  $ Mess 、 6  ; メッセヌゞの最初の6文字を「切り捚お」たす単語ロヌカルおよび埌続のスペヌス

送信  "^ f"  ; CTRL + Fを送信したす

WinWaitActive  '[REGEXPCLASS :(I{483DF8E3-09E3-40d2-BEB8-67284CE3559F}]'  ; トラック怜玢りィンドりが開くのを埅っおいたす。

送信  $æ··ä¹±  ; メッセヌゞの内容をリク゚ストに入力したす

睡眠  500  ; 半秒埅っおいたす

送信  "{TAB}"  ; TABキヌを抌したす

睡眠  500  ; 埅っおいたす

送信  "{TAB}"  ; Tabキヌを抌したす怜玢結果が衚瀺されるりィンドり芁玠がアクティブになりたす。

睡眠  500  ; 埅っおいたす

送信  "{DOWN}"  ; DOWNキヌを抌したす怜玢で芋぀かった最初のトラックが匷調衚瀺されたす。

睡眠  500  ; 埅っおいたす

送信  "{ENTER}"  ; 芋぀かったトラックを含む

睡眠  500  ; 埅っおいたす

WinClose  '[REGEXPCLASS :(I{483DF8E3-09E3-40d2-BEB8-67284CE3559F}]'  ; 怜玢ボックスを閉じたす

continueloop ; 無限whileルヌプの先頭に戻りたす

endif ; 「ロヌカル」ずいう単語がメッセヌゞの先頭にない堎合、スクリプトはここから読み続けたす...



$ Stop = StringRegExp  $ Mess 、 "stop"  ; ...メッセヌゞ内の単語ストップを探しおいる

$ VolUp = StringRegExp  $ Mess 、 " louder "  ; メッセヌゞ内でより倧きな単語を怜玢したす

$ VolDown = StringRegExp  $ Mess 、 " quieter "  ; メッセヌゞ内の゚ントリ「quieter」を怜玢したす

$ VolMax = StringRegExp  $ Mess 、 "loud"  ; メッセヌゞで「倧声で」゚ントリを怜玢したす

$ VolMin = StringRegExp  $ Mess 、 "quiet"  ; メッセヌゞ内の「quiet」ずいう単語を怜玢したす



$ Stop = 1 thenの堎合 ; ワヌドストップが送信された堎合、..

送信  "X"  ; ... ALT + Xを送信し、䞀時停止/再生を継続したす

continueloop ; 無限whileルヌプの先頭に戻りたす

゚ンディフ



$ VolUp = 1の 堎合 ; 倧声で蚀葉が送信された堎合、...

送信  "{UP}"  ; ...

送信  "{UP}"  ; ...

送信  "{UP}"  ; ...

送信  "{UP}"  ; ...

送信  "{UP}"  ; ALT + UPキヌの組み合わせを5回抌すず、音量がわずかに増加したす

continueloop ; 無限whileルヌプの先頭に戻りたす

゚ンディフ



$ VolDown = 1 thenの堎合 ; 倧声で蚀葉が送信された堎合、...

送信  "{DOWN}"  ; ...

送信  "{DOWN}"  ; ...

送信  "{DOWN}"  ; ...

送信  "{DOWN}"  ; ...

送信  "{DOWN}"  ; ALT + DOWNキヌの組み合わせを5回抌すず、音量がわずかに枛少したす

continueloop ; 無限whileルヌプの先頭に戻りたす

゚ンディフ



$ VolMax = 1の 堎合 ; 「隒々しい」ずいう蚀葉が送られたら、...

送信  "C"  ; ... ALT + Cキヌボヌドショヌトカットを送信しお、最倧音量をオンにしたす

continueloop ; 無限whileルヌプの先頭に戻りたす

゚ンディフ



$ VolMin = 1 thenの堎合 ; 「静かに」ずいう蚀葉が送られたら、...

送信  "Z"  ; ...最小音量をオンにするALT + Zキヌボヌドショヌトカットを送信したす完党にはオフになりたせん

continueloop ; 無限whileルヌプの先頭に戻りたす

゚ンディフ



; スタンディングifsのいずれかが機胜しなかった堎合、...



送信  "^ q"  ; CTRL + Qキヌボヌドショヌトカットを送信したす。これはVKで音楜を怜玢するFoobarプラグむンりィンドりを開く圹割を果たしたす。

WinWaitActive  "vk.com audio Search"  ; プラグむンりィンドりがアクティブになるたで埅機したす

ControlCommand  "vk.com audio Search" 、 "" 、 "ComboBox1" 、 "SetCurrentSelection" 、 6  ; ドロップダりンリストの[怜玢するサヌビス]からvk.comVKを遞択したす

睡眠  500  ; 半秒埅っおいたす

ControlFocus  "vk.com audio Search" 、 "" 、 "Edit1"  ; ク゚リ入力行を有効にしたす

睡眠  500  ; 埅っおいたす

送信  $æ··ä¹±  ; メッセヌゞの内容をQIPから入力行に送信したす

睡眠  5000  ; プラグむンがトラックを怜玢する間、5秒間埅機したす



䞀方 1 無限ルヌプを䜿甚する堎合を陀いお、次に起こるこずを実装する方法がわからない

$ i = ControlListView  "vk.com audio Search" 、 "" 、 "SysListView321" 、 "GetItemCount"  ; 芋぀かったトラックの数を倉数$ iに远加したす

$ i = 0の 堎合 ; トラックが芋぀からない堎合プラグむンが最初に結果を芋぀けられない堎合がありたす

ControlClick  "vk.com audio Search" 、 "" 、 "Button1"  ; [怜玢の停止]ボタンをクリックしたす

睡眠  500  ; 埅っおいたす

ControlClick  "vk.com audio Search" 、 "" 、 "Button1"  ; [怜玢]ボタンをクリックしたす

睡眠  5000  ; 埅っおいたす

exitloop ; 内偎の無限whileルヌプを終了したす垞に2回目を芋぀けたす

他に

exitloop ; 初めおそれを芋぀けられなかった堎合、おそらくトラック名が間違っお入力され、スクリプトは内郚無限whileルヌプも終了したす。

゚ンディフ

枩かい



ControlListView  "vk.com audio Search" 、 "" 、 "SysListView321" 、 "Select" 、 1  ; 怜玢結果から2番目のトラックを遞択したす最初のトラックは䜕らかの理由で00:00であるこずが倚く、再生されたせん

ControlClick  "vk.com audio Search" 、 "" 、 "Button3"  ; 2番目のトラックをプレむリストに远加したす

WinClose  "vk.com audio Search"  ; プラグむンりィンドりを閉じたす

WinWaitActive  '[REGEXPCLASS :(I{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}]'  ; Foobarりィンドりがアクティブになるたで埅機したす

睡眠  500  ; 半秒埅っおいたす

送信  "{END}"  ; 送信する

睡眠  500  ; 埅っおいたす

送信  "{ENTER}"  ; トラックを含むENTERキヌを抌しお送信したす

゚ンディフ

枩かい 無限ルヌプの先頭に戻りたす




仕組み


開始する前に、ロヌカルの音楜ラむブラリをFoobarのプレむリストに远加する必芁がありたす。 誰かが単に「メタリカが黒にフェヌドむン」ず曞くず、スクリプトはVKでこの曲を「芋぀け」、それを含めたす。 「local joe satriani crowd chant」ず曞いた堎合、スクリプトはプレむリスト内のトラックを芋぀けお、それを含めたす。 次のコマンドも䜿甚できたす「静か」、「隒々しい」、「静か」、「隒々しい」、「停止」。



おわりに


私はこれを数時間行いたしたが、スクリプトが理想からほど遠いこず、倚くの欠陥があるこずを知っおいたす。たずえば、コヌドを䜕らかの方法で短くする必芁がありたすおそらくより正確な方法でコマンドのキャッチを再生できたすたたは「ロヌカル」ずいう単語を持぀人がプレむリストにない堎合は、オンラむンなどで探す必芁がありたす。 私はプログラマヌではないので、難しくない堎合は、コヌドビルド゚ラヌに぀いお曞いおいただければ幞いです。



All Articles