pusuke0418’s diary

異常にマルチタスクな社内SEのブログ

PowerShellで開始・終了ページ指定して印刷

やりたいことは、下記。

  • あるアプリケーションが、とある状態で立ち上がっている状態
  • それを、あるページから、あるページまで(xxページから始まってそこから何ページ)を印刷する
  • それを繰り返すので、ちょっと楽したい
  • 難しいこと勉強するのはきついので、UI操作自動化みたいのがいい

何かいい方法はないかと、調べていたら、下記のような情報が。
WindowsアプリのUI自動操作をUI Automation PowerShell Extensionで行う | d.sunnyone.org

あとは、おおよそ下記を参考にしながらできそうな気配。
UI Automation PowerShell Extensions - Documentation
はじめはpythonがいいなと思っていたけれども、pywinautoはなぜかすぐ落ちるしWindowsはやはりWindowsであろう、と。

下記スクリプトプロトタイプ、すでにUIAutomationは読み込まれている状態から。ここでの、UI要素名とか諸々の記載は適当だが、このあたりはリンクにもあるように、UIAutomationSpy.exeを使えば簡単に判明することがわかった。

#印刷するアプリケーションを指定
#ウインドウの名前"hogedoc - Desktop"から取得
$window = "hogedoc - Desktop"
$wnd = Get-UiaWindow -name $window

#開始ページと終了ページを指定する。1ページから10ページめまで
$startp = 1
$endp = 1 + 9

#Ctrl+pにて印刷ダイアログ呼び出し
#keydownは押しっぱなし(多分),keypressは押す,keyupは押したキーを離す???
$wnd.keyboard.keydown([windowsinput.native.virtualkeycode]::control);
$wnd.keyboard.keypress([windowsinput.native.virtualkeycode]::VK_P);
$wnd.keyboard.keyup([windowsinput.native.virtualkeycode]::control)

#"印刷プレビュー"ウインドウが立ち上がる
#このウインドウで印刷するページを入力することになっている
#印刷の開始ページを指定する
#単純にtypetextで文字を送り込むとデフォルトで入っていた文字列に追記されてしまったため、
#ctrl + aを送り込んでからページ数を入力する
$pre_start = Get-UiaWindow -name "hogedoc - 印刷プレビュー" |`
 Get-UiaSpinner -AutomationId 'Page' -Class 'DomainUpDown' -Name 'start:' | `
 Get-UiaEdit -AutomationId 'Text' -Class 'TextBox'
$pre_start.keyboard.keydown([windowsinput.native.virtualkeycode]::control);
$pre_start.keyboard.keypress([windowsinput.native.virtualkeycode]::VK_A);
$pre_start.keyboard.keyup([windowsinput.native.virtualkeycode]::control)
$pre_start.keyboard.typetext($startp)

#印刷の終了ページを指定する
$pre_end = Get-UiaWindow -name "hogedoc - 印刷プレビュー" |`
 Get-UiaSpinner -AutomationId 'Page' -Class 'DomainUpDown' -Name 'end:' | `
 Get-UiaEdit -AutomationId 'Text' -Class 'TextBox'
$pre_end.keyboard.keydown([windowsinput.native.virtualkeycode]::control);
$pre_end.keyboard.keypress([windowsinput.native.virtualkeycode]::VK_A);
$pre_end.keyboard.keyup([windowsinput.native.virtualkeycode]::control)
$pre_end.keyboard.typetext($endp)

#続行ボタンを押して画面を進めるイメージ
Get-UiaWindow -name "hogedoc - 印刷プレビュー" | `
 Get-UiaButton -Class "Button" -Name "Continue" | Invoke-UiaButtonClick

#そして印刷画面。OKボタンを押して印刷するイメージ
Get-UiaWindow -name "印刷" | ` 
 Get-UiaButton -Class "Button" -Name "OK" | Invoke-UiaButtonClick


一行ずつ対話的にやっていたところでは、Ctrlキーを送り込んだ時点でシステム全体がCtrl押しっぱなし状態になって、困ったから再起動した。これ注意。

raspberry pi でUSBスピーカから音出す

調べればいくらでも出てくる話ではございますが、Raspberry Piで音出したいときにUSBスピーカつないでそっから電気とってかつ音を出すと手軽。

はじめに、やることはぐぐったりして動作実績のあるものや、その後継とかを調べること。たいてい大丈夫だが、ハードウェアは相性問題もあるため。ちなみに手元ではMS-P05UWHを使っている。

つぎに、調達したUSBスピーカをRaspberry Piにつなぐ。そして、認識していることを確認する。ここはコマンドを入力したりする。まず、つながない状態で"lsusb"と打つ。そして、つないでもう一度"lsusb"と打つ。

ここで出力がなんか行数増えてれば認識していそうだと考えられる。例えば

$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0410:0112 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter
Bus 001 Device 007: ID 0c76:160c JMTek, LLC. ←増えた

因みに、"-v"オプションをつけると詳細な出力がされる。詳細で意味わかんないけど出力中何となくAudioとか文字が見え隠れするとちょっと安心する。"-t"表示でツリー表示。audioとか文字が見えたりするとまたちょっと安心したりする

lsusbというのは、USBデバイスの情報を確認するコマンド。

そして、設定らしきことをするのだけれども、alsaというものが関係している。これは、Advanced Linux Sound Architectureの略なので、まぁそこは推して知るべし。まず、下のコマンド。そして例えば下記のように表示される

$ cat /proc/asound/modules 
 0 snd_bcm2835
 1 snd_usb_audio

これは、alsaサウンドカードドライバのリスト表示なので、snd_usb_audioとあるので、動作しそうであることがわかる。

最後に、alsaの設定ファイルを書き換える。対象は、/etc/modprobe.d/alsa-base.conf。そして、ファイル中に、先ほど確認した"snd_usb_audio"というものを見つける。そして、このindex値を書き換える。

/etc/modprobe.d/alsa-base.conf内

#options snd-usb-audio index=-2    ←書き換え前
options snd-usb-audio index=0   ←書き換え後

なぜindexを0にしているか、それは0を与えて先に読み込ませ、デフォルトの使用としたいから(コメントアウトするだけでも良いらしいけど手元ではなぜかうまく動かなかった)。-2は「ALSA にカードを優先的に使わせないようにする」とのこと(raspbianとは別ディストリビューションだが、arch linuxwikiAdvanced Linux Sound Architecture - ArchWikiより)。

上記までやったら、ちゃっと再起動させてみましょう。

他参考、alsa.opensrc.org

貧乏環境でのvCenter 6.0

vCenter Server 6.0(Windows版)を少しテストしてみようとしてインストールしようとしたところ、メモリが足りないとのこと。メモリ8GB以上ないとインストールさせてくれない。ちなみに、ドキュメント上は「最小規模環境(最大ホスト10台、仮想マシン100台」で最小ハードウェア推奨要件が8GB RAMとなっている。

環境は、いわゆる"Nested VM"で、VMware Player上にすべてつっこもうとしている。使ったのは全体でメモリが12GBのマシンなので、vCenterだけで8GBも使われたら手も足も出ない。

まず対象Windowsのメモリ設定を8GBにしてインストールだけさせた。そのあと、メモリを5GBほどにして立ち上げる。管理対象のホストは1台というほぼ何もない環境。インストールを通過すれば、メモリの量を減らして立ち上げても立ち上がる。おおむね4.3GBほどが利用されている。

ただし、この環境ではvCenterが立ち上がりきるまではCPU(2.6GHzほど?×4つ)相当使い続けあげく10分くらいかかった。。。こいつぁまともな検証環境にのせる必要があり。