カテゴリ:テクノロジ( 201 )
-
[ 2018-04 -09 22:45 ]
-
[ 2018-02 -21 23:32 ]
-
[ 2017-12 -12 20:30 ]
-
[ 2017-05 -17 18:29 ]
-
[ 2017-02 -08 21:07 ]
-
[ 2016-07 -02 21:53 ]
-
[ 2016-02 -11 20:00 ]
-
[ 2016-02 -09 20:00 ]
-
[ 2016-02 -05 18:50 ]
-
[ 2015-11 -24 21:39 ]
AHK_Lで、OnTopReplicaを少し便利に。ver.1.0.1
高解像度モニタやマルチモニタが便利なのは「視線移動だけで数多のウィンドウを確認できる」からだけど、文章でもない限りサムネで十分というか、むしろサムネの方が同時表示ウィンドウ数増えてよくね?と思ったので、それっぽいソフトを探したけどなかったから、既存のソフトを組み合わせてなんとかするの巻。
というわけで、ウィンドウの縮小クローンを作成するソフト「OnTopReplica」が便利なのだけど、大抵の操作は縮小クローンより元ウィンドウでした方がよいので、OTRをクリックしたら元ウィンドウをアクティブにするAHK書いた。
;--------------------------------------------------------------------------------------
; OnTopReplica
;--------------------------------------------------------------------------------------
#IfWinActive ahk_exe OnTopReplica.exe
~LButton::return
LButton Up::
if (400 < A_TimeSincePriorHotkey)
return
WHwnd := WinExist()
BlockInput, On
Send, {RButton}{Up}{Down 2}{Enter}
WinWaitNotActive, ahk_id %WHwnd%, , 0.5
WinActivate, ahk_id %WHwnd%
BlockInput, Off
return
メインの作業をしている裏で、入力に間のある作業(重い対話型ソフトとか、チャットやゲーム)をしている状況で、モニタの隅やセカンダリモニタあたりに縮小クローンを配置して、横目で見て変化があったらクリックするだけで操作可能になる。便利。
なお、「元ウィンドウなどいらん、縮小ウィンドウを左クリックできれば十分!」という場合は「窓の化身」を使う。
AutoHotKey_Lで、Stellarisのカーソル移動による自動スクロールを防止した。
Stellarisやってて、ウィンドウ端にカーソル移動するとスクロールする仕様がウザったいのだが、設定でOFFにできないっぽいので、力業で封じてみた。
まあ単に、監視して、カーソルがウィンドウ端に行ったらウィンドウ非アクティブにするだけなんで、ちょっと書き換えれば他でも使える。フルスクリーンとか知らぬ。
;------------------------------------------------------------
; Stellaris
;------------------------------------------------------------
#IfWinActive Stellaris ahk_class SDL_app ahk_exe stellaris.exe
F12:: ; マウスカーソルでスクロールしないようにする
StlrsMargin := 2
StellarisHwnd := WinExist()
VarSetCapacity(CR, 16)
DllCall("GetClientRect", Ptr, StellarisHwnd, Ptr, &CR)
CW := NumGet(CR, 8, "Int")
CH := NumGet(CR, 12, "Int")
WinGetPos, , , WW, WH
BW := (WW - CW) // 2
StlrsX := BW + StlrsMargin
StlrsY := WH - CH - BW + StlrsMargin
StlrsX2 := BW + CW - StlrsMargin
StlrsY2 := WH - BW - StlrsMargin
SetTimer, StlrsChk, 250
return
StlrsChk:
IfWinNotExist, ahk_id %StellarisHwnd%
{
SetTimer, StlrsChk, Off
return
}
IfWinNotActive
WinWaitActive
MouseGetPos, MX, MY
if (StlrsX >= MX) || (StlrsY >= MY) || (StlrsX2 < MX) || (StlrsY2 < MY)
WinActivate, Program Manager ahk_class Progman ahk_exe explorer.exe
return
AHKってクライアント領域の取得できないんか……。
Web版ハングアウトのフレンドリストをコンパクトにするUserCSS書いた。
Web版ハングアウトのUIが無駄に広大で、ウィンドウ幅を縮めるとスクロールバーがウザいので、フレンドリスト以外の無駄な要素を消すCSS書いた。これで、せいせいChromeでアプリ化("デスクトップに追加")できる。
.gb_yg.gb_X.gb_T {
min-width: 0px !important;
}
.g-Ue-Ja-t {
min-width: 0px;
}
.kFx1Ae-xdwExf-eb.kFx1Ae-xdwExf-eb-wr {
display: none;
}
.g-Ue-v0h5Oe {
display: none;
}
.g-Qx-r4m2rf-wZVHld.Id-qy-By.r4m2rf-wZVHld-wr {
display: none;
}
まあ、XMPP対応が縮小されたものの、基本的なテキストチャットは問題なくできるので、Web版は画像送信時くらいしか使わないけども。
余談だが、Web版はCtrl+vでクリップボードの画像データを送信できるので、Vivaldiのキャプチャー機能を「選択範囲」「クリップボード出力」で使うと、あらゆる画像をスタンプめいて使えて面白い。
AutoHotKey_Lで、AviUtlのバッチ登録を自動化した。
AviUtlで複数ファイルをエンコードする場合「バッチ登録」を使うのだけど、手作業で出力ファイル名入力するのが面倒すぎたので自動化した。
変換したい動画のパスリスト(\n区切り)をクリップボードに入れて、AviUtlメインウィンドウでF12打鍵すれば登録開始。
出力ファイルは"元ファイル名.設定した拡張子"で、重複してれば接尾辞"_[n]"で回避。
使用前に"OutputPluginNum"と"SaveFileExt"を設定すべし。
;--------------------------------------------------------------------------------------
; AviUtl
;--------------------------------------------------------------------------------------
#IfWinActive ahk_class AviUtl ahk_exe Aviutl.exe
F12:: ; クリップボードのパスをバッチ登録
OutputPluginNum := 1 ; "プラグイン出力"で選択するプラグインの番号。1番上は1。
SaveFileExt := "mp4" ; 出力ファイルの拡張子。
PathList := Clipboard
WinGet, WHwnd, ID
WinGet, ExePath, ProcessPath
SplitPath, ExePath, , ExeDir
IfExist, %ExeDir%\batch*.aup
{
MsgBox, 262691, , バッチ登録されたプロジェクトが存在します`n既存のプロジェクトを削除しますか?
IfMsgBox, Cancel
return
IfMsgBox, Yes
FileRecycle, %ExeDir%\batch*.aup
}
StringReplace, PathList, PathList, `n, `n, UseErrorLevel
MaxNum := ErrorLevel
Loop, Parse, PathList, `n, `"
{
TipView(A_Index "/" MaxNum)
FilePath := A_LoopField
IfNotExist, %FilePath%
continue
SplitPath, FilePath, , FileDir, , FileNoExt
SaveFilePath := FileDir "\" FileNoExt "." SaveFileExt
while FileExist(SaveFilePath)
SaveFilePath := FileDir "\" FileNoExt "_[" A_Index "]." SaveFileExt
WinMenuSelectItem, ahk_id %WHwnd%, , ファイル, 1& ; "開く"
WinWait, ファイルを開く ahk_class #32770 ahk_exe Aviutl.exe
ControlSetText, Edit1, %FilePath% ; "ファイル名"
Sleep, 100
ControlClick, Button2, , , L, 2 ; "開く"
WinWaitClose
WinMenuSelectItem, ahk_id %WHwnd%, , ファイル, プラグイン出力, %OutputPluginNum%&
WinWait, ahk_class #32770 ahk_exe Aviutl.exe
ControlSetText, Edit1, %SaveFilePath% ; "ファイル名"
Sleep, 100
ControlClick, Button5, , , L, 2 ; "バッチ登録"
WinWaitClose
}
TipView("FIN")
return
;--------------------------------------------------------------------------------------
; TipView.ahk
;--------------------------------------------------------------------------------------
TipView(TextBuf = "", Timer = 3000, X = "", Y = "", SW = 0) {
if SW
CoordMode, ToolTip
ToolTip, %TextBuf%, X, Y
if !Timer
Timer := "Off"
SetTimer, TipClose, %Timer%
}
TipClose:
SetTimer, TipClose, Off
ToolTip
return
エキブロにログインできない場合の対処。
エキサイトブログはサードパーティCookieをブロックしているとログインできないので、許可リストにhttps://idcaccounts.exblog.jpを登録する。
Vivaldiはサイト別許可リストが標準の設定画面になく、Blink由来の設定画面にしかないので、chrome://settings/contentExceptions#cookiesに飛んで[*.]idcaccounts.exblog.jpを登録すればよい。
なお、アドレス中の「chrome://」を「vivaldi://」に置換する雑な仕様があるので、アンカー書いたりブックマークする時は注意。
Win10で自作実行ファイルが「既定のプログラム」に表示されなくなったので直した。
拙作「S2WA」を、レジストリを弄って「既定のプログラム」に登録してブラウザに振り分けするとめちゃ便利なのだが、Win7ではできてたのにWin10にアップグレードしたら「既定のプログラム」に表示されなくなった。PC設定>既定のアプリだと、表示はされるけど選択できなかったり。
レジストリが間違ってる or Win10で変わった?EXEの権限?アンチウィルスによるブロック?等々あれやこれや、本当に何っっっ時間も悩んだ挙句、「Win10でコンパイルし直したら認識された」とか徒労感ハンパない。
AHKで作ったEXEだけでなく、古いHSP版もダメだった。スクリプト系がブロックされてる? でも認識されないだけで動作は問題ないしなあ? あとコンパイル時の文字コードとか32bitと64bitとかUPXやMPRESSとか、気にならなくもないが検証する気力は残ってない。とりあえず認識されたからよし。
TabJugglerでスクロールできない問題を解決した。
TabJugglerというタブ管理用のChrome拡張があって、すべての互換ブラウザに入れてるくらい便利なのだが、操作できなくなる問題があるので対処した。
そもTabJugglerは、すべてのタブを対象とした「ひとつのウィンドウにまとめる」「ウィンドウを分離する」「タブの配置をソートする」という機能と、検索でリストアップした、あるいはしなかったタブを対象とした「閉じる」「分離する」という機能がある。この後者の検索で大量のタブをリストアップすると、操作ボタンが押し出されて操作不能になってしまう。大量のタブがあるからこそ使いたいのに!
で、調べてみたら操作不能の原因はスクロールを禁じたスタイルにあったので、CSSをたった1行いじるだけで解決したという……。
問題のCSSはExtensions\jgiplclhploodgnkcljjgddajfbmafmp\バージョン番号\assets\styles\popup.css。ExtensionsフォルダはOperaならProfile、ChromeとVivaldiならUser Data以下にあるが、識別子jgiplc(以下略)を検索した方が手っ取り早い。
そのpopup.cssの11行目にあるoverflow: hidden;を、hiddenからscrollにすれば完了。
AutoHotKey_Lで、標準出力を得たい……。
以前見つけた関数だと上手く動かないことがあったのでフォーラム検索したら、もっと新しいやつを見つけた。見つけたんだが、標準出力が多いと文字化けすることが発覚。ReadFileでバイト単位で取得したデータをそのままデコードしてるせいだと思うが、AHKで文字列でないデータを操作とか苦行の予感がするので、Fileオブジェクトで文字単位で取得してごまかした。
文字化けはなくなったが、本当にこれで問題ないのかは解らん。
; https://autohotkey.com/board/topic/54559-stdin/#entry687172
MsgBox % sOutput := StdoutToVar_CreateProcess("tasklist /s " A_ComputerName)
StdoutToVar_CreateProcess(psCmd, psInput="", psEncoding:="CP0", psDir:="", ByRef pnExitCode:=0) {
DllCall("CreatePipe", PtrP, hStdInRd, PtrP, hStdInWr, Ptr, 0, UInt, 0)
DllCall("CreatePipe", PtrP, hStdOutRd, PtrP, hStdOutWr, Ptr, 0, UInt, 0)
DllCall("SetHandleInformation", Ptr, hStdInRd, Uint, 1, Uint, 1)
DllCall("SetHandleInformation", Ptr, hStdOutWr, UInt, 1, UInt, 1)
VarSetCapacity(pi, (A_PtrSize == 4) ? 16 : 24, 0)
siSz := VarSetCapacity(si, (A_PtrSize == 4) ? 68 : 104, 0)
NumPut(siSz, si, 0, "UInt")
NumPut(0x100, si, (A_PtrSize == 4) ? 44 : 60, "UInt")
NumPut(hStdInRd, si, (A_PtrSize == 4) ? 56 : 80, "Ptr")
NumPut(hStdOutWr, si, (A_PtrSize == 4) ? 60 : 88, "Ptr")
NumPut(hStdOutWr, si, (A_PtrSize == 4) ? 64 : 96, "Ptr")
If (!DllCall("CreateProcess", Ptr, 0, Ptr, &psCmd, Ptr, 0, Ptr, 0, Int, True, UInt, 0x08000000
, Ptr, 0, Ptr, psDir ? &psDir : 0, Ptr, &si, Ptr, &pi))
return
, DllCall("CloseHandle", Ptr, hStdOutWr)
, DllCall("CloseHandle", Ptr, hStdOutRd)
, DllCall("CloseHandle", Ptr, hStdInRd)
DllCall("CloseHandle", Ptr, hStdOutWr ) ; The write pipe must be closed before reading the stdout.
if (psInput != "")
FileOpen(hStdInWr, "h", psEncoding).Write(psInput)
DllCall("CloseHandle", "Ptr", hStdInWr)
; ################################################################################
StdOutBuf := FileOpen(hStdOutRd, "h", psEncoding)
StrBuf := 1
while StrLen(StrBuf) {
StrBuf := StdOutBuf.Read(2047)
sOutPut .= StrBuf
}
; ################################################################################
DllCall("GetExitCodeProcess", Ptr, NumGet(pi, 0), UIntP, pnExitCode)
DllCall("CloseHandle", Ptr, NumGet(pi, 0) )
DllCall("CloseHandle", Ptr, NumGet(pi, A_PtrSize) )
DllCall("CloseHandle", Ptr, hStdOutRd )
return sOutput
}
AutoHotKey_Lで、Opera12の起動を便利にしてみた。 ver.2.3.1
セッション変換に失敗することがあったので1行だけ修正。今更使う人もいないと思うが。
; --------- --------- --------- --------- ---------
; RunOpera.ahk ver.2.3.1
; --------- --------- --------- --------- ---------
#WinActivateForce
OperaPath := "R:\Opera" ; Opera.exeの存在するパス。末尾"\"は不可。
if %0% ; 引数があった場合、Operaのパスと見なす
OperaPath = %1%
SessionsPath := OperaPath "\profile\sessions" ; セッションフォルダのフルパスを指定。末尾"\"は不可。
BookmarksPath := OperaPath "\profile\bookmarks.adr" ; bookmarks.adrのフルパスを指定。
TimeLimit := 30 ; 最終セッション退避確認ダイアログを自動でスキップするまでの秒数。
AutoConvSW := 1 ; 最終セッションを退避させる場合、自動でブックマークに変換する設定。 0:変換しない。 1:変換する。
ACMoveSW := 1 ; 自動変換(↑)したセッションを隔離する設定。 0:隔離しない。 1:隔離する。
StackSW := 1 ; スタックの設定。 0:無視する。 1:スタックごとにフォルダを分ける。
HisReadSW := 0 ; タブ履歴(タブで表示したページの履歴)の設定。 0:最新のみ読み込む。 1:すべて読み込む。
His0PrefixSW := 0 ; タブ履歴がなかった場合のプレフィックスの設定。 0:なし。 1:0を明示する。
WriteTrgSW := 1 ; ブックマーク情報を書き込む場所の設定。 0:セッションフォルダにテキストで保存。 1:bookmarks.adrに書き込む。
; --------- --------- --------- --------- ---------
IfNotExist, %SessionsPath%\
{
MsgBox, 16, , セッションフォルダが見つかりません。`n%SessionsPath%
ExitApp
}
If WriteTrgSW {
IfNotExist, %BookmarksPath%
{
MsgBox, 16, , bookmarks.adrが見つかりません。`n%BookmarksPath%
ExitApp
}
}
IfNotExist, %SessionsPath%\autosave.win
{
IfExist, %SessionsPath%\autosave.win.bak
FileMove, %SessionsPath%\autosave.win.bak, %SessionsPath%\autosave.win
}
IfExist, %SessionsPath%\autosave.win
{
FileCopy, %SessionsPath%\autosave_RunOpBak.win, %SessionsPath%\autosave_RunOpBak2.win, 1 ; ↓セッション退避etc.を実行しない時も念のため2世代バックアップ。
FileCopy, %SessionsPath%\autosave.win, %SessionsPath%\autosave_RunOpBak.win, 1
GoSub, SessionAnalyze
}
FileCopy, %OperaPath%\ui\fastforward_backup.ini, %OperaPath%\ui\fastforward.ini, 1 ; アップデートのたびにFastForward.iniが初期化される問題の対策。
Run, %OperaPath%\opera.exe, , , OpPid
WinWait, ahk_pid %OpPid%, , 60
if !ErrorLevel {
ifWinExist, Opera へようこそ ahk_pid %OpPid%
{
WinActivate
WinWaitClose
}
} else {
return
}
WinWait, マスターパスワードを入力してください ahk_pid %OpPid%, , 5
If ErrorLevel
return
WinSet, Topmost, ON
WinActivate
Sleep, 300
ExitApp
; --------- --------- --------- --------- ---------
SessionAnalyze:
FileRead, OSession, *P65001 *t %SessionsPath%\autosave.win
If ErrorLevel {
MsgBox, 48, , Sessionの読み込みに失敗しました。`n%SessionsPath%\autosave.win
return
}
Idx := 0
WinTitles := ""
Loop {
Idx := RegExMatch(OSession, "\[(\d+)history url\][\s\S]+?count=(\d+)", $, Idx + 1)
If !Idx
Break
WinNum := $1
HisNum := $2 - 1
HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
WinTitles .= " " HisTitle "`n"
}
If !WinTitles
return
SetTimer, RenewCount, 1000
MsgBox, 259, 退避確認(30秒後に通常起動), 起動時に最終セッションを退避しますか?`n`n◆最終セッションの内容◆`n%WinTitles%, %TimeLimit%
SetTimer, RenewCount, Off
IfMsgBox, Yes
{
TimeNum := A_Now
BackupName := TimeNum ".win"
Loop {
FileMove, %SessionsPath%\autosave.win, %SessionsPath%\%BackupName%
If !ErrorLevel ; 最終セッションのリネームに成功なら
Break
BackupName := TimeNum "_" A_Index ".win"
}
FileDelete, %SessionsPath%\autosave.win.bak
If AutoConvSW
GoSub, SessionConvert
}
IfMsgBox, Cancel
ExitApp
return
; --------- --------- --------- --------- ---------
RenewCount:
IfWinExist, 退避確認( ahk_class #32770
{
TimeLimit--
WinSetTitle, 退避確認(%TimeLimit%秒後に通常起動)
if !TimeLimit
SetTimer, RenewCount, Off
}
return
; --------- --------- --------- --------- ---------
SessionConvert:
If WriteTrgSW
FileCopy, %BookmarksPath%, %BookmarksPath%_%A_Now% ; bookmarks.adrのバックアップは無制限なので注意
CmdLine := SessionsPath "\" BackupName
SplitPath, CmdLine, , , , SessionName
Result := "#FOLDER`n NAME=[Session] " SessionName "`n`n"
ResultBuf := Result
Idx := 0
BefGroupNum := 0
His0Prefix :=
Loop {
Idx := RegExMatch(OSession, "\[(\d+)\][^\[]+group=(\d+)[^\[]+\[\1history url\][^\[]+count=(\d+)", $, Idx + 1)
If !Idx
Break
WinNum := $1
GroupNum := $2
HisNum := $3 - 1
HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
HisUrl := GetHisUrl(OSession, WinNum, HisNum, Idx)
if StackSW
if (BefGroupNum != GroupNum) {
if BefGroupNum
Result .= "-`n`n"
if GroupNum
Result .= "#FOLDER`n NAME=[Stack] " GroupNum "`n`n"
BefGroupNum := GroupNum
}
If !HisReadSW { ; タブ履歴を無視する場合
Result .= "#URL`n NAME=" HisTitle "`n URL=" HisUrl "`n`n"
Continue
}
StringLen, HisNumLen, HisNum
If !HisNum {
if His0PrefixSW
His0Prefix := "[" ZeroSupply(HisNum, HisNumLen) "] "
Result .= "#URL`n NAME=" HisPrefix HisTitle "`n URL=" HisUrl "`n`n"
Continue
}
Result .= "#FOLDER`n NAME=" HisTitle "`n`n#URL`n NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n URL=" HisUrl "`n`n"
Loop, %HisNum% {
HisNum--
HisTitle := GetHisTitle(OSession, WinNum, HisNum, Idx)
HisUrl := GetHisUrl(OSession, WinNum, HisNum, Idx)
Result .= "#URL`n NAME=[" ZeroSupply(HisNum, HisNumLen) "] " HisTitle "`n URL=" HisUrl "`n`n"
}
Result .= "-`n`n"
}
If (ResultBuf == Result)
return
Result .= "-`n`n"
If WriteTrgSW {
FileRead, BMBuf, *t *P65001 %BookmarksPath%
StringGetPos, Idx, BMBuf, #DELETED
if !Idx {
StringMid, BMBufP, BMBuf, 1, Idx
StringMid, BMBufS, BMBuf, Idx + 1
Result := BMBufP Result BMBufS
FileDelete, %BookmarksPath%
}
FileAppend, %Result%, %BookmarksPath%, CP65001
} Else {
FileDelete, %CmdLine%.txt
FileAppend, %Result%, %CmdLine%.txt, CP65001
}
If ACMoveSW {
IfNotExist, %SessionsPath%\AutoConv\
FileCreateDir, %SessionsPath%\AutoConv\
FileMove, %CmdLine%, %SessionsPath%\AutoConv\%BackupName%
If ErrorLevel
MsgBox, 48, , 変換済みセッションの移動に失敗しました。`n%SessionsPath%\AutoConv\
}
return
; --------- --------- --------- --------- ---------
GetHisTitle(OSession, WinNum, HisNum, Idx){
RegExMatch(OSession, "\[" WinNum "history title\][\s\S]+?" HisNum "=(.*?)\r?\n", $)
return $1
}
GetHisUrl(OSession, WinNum, HisNum, Idx){
RegExMatch(OSession, "\[" WinNum "history url\][\s\S]+?" HisNum "=(.*?)\r?\n", $)
return $1
}
ZeroSupply(Num, NumDigit){
StringLen, NumLen, Num
LoopNum := NumDigit - NumLen
Loop, %LoopNum%
Num := 0 Num
return, Num
}
Windowsを遠隔操作するAndroidアプリをいくつか試してみた。
外出先から自宅のWindows7機を遠隔操作したくて、有名処のAndroidアプリをいくつか試したメモ。
Chromeリモートデスクトップ -- 接続が簡単だが機能は貧弱。
RD Client -- Windowsのリモートデスクトップクライアントほぼそのまま。
VNC Viewer -- 普通のVNCクライアント。
TeamViewer -- 接続が簡単で一通りのことはできる。
Chromeリモートデスクトップ
Google製。あらかじめPC側にChromeリモートデスクトップをインストールしておく必要がある(サーバーはサービスプロセス)。利用にはGoogleアカウントが必要だが、それによって一覧から対象PCを選択するだけで接続できる。WAN越えに特別な操作を必要としない。
接続中は画面下にポップアップが出現し続ける。
マウス入力はスワイプでポインタを動かして行う。ミドルクリック不可。ホイール(トリプルスワイプ)は敏感でちょっと使いにくい。
キー入力はAndroidの入力そのままで補助がないため、ファンクションキー等を入力するにはBluetoothキーボードが必要。
映像の更新頻度はまずまず。マルチモニタ対応(巨大なデスクトップとして表示)。
音声転送には非対応。
気軽に接続して、文字入力とマウスだけで完結する作業に向いてる。ログオンするとか、他の遠隔操作サーバー起動するとか。
RD Client
Microsoft製。PC側でリモートデスクトップ接続を許可しておく必要がある(サーバーはサービスプロセス)。WAN越えには接続先のIPアドレスとポート解放が必要。利用ポートの変更はレジストリをいじる必要があるので、ルータで変換できないと面倒。諸々考慮するとVPN経由が楽かも。
接続するとPC側はログオフした状態になる。
マウス入力はスワイプでポインタを動かすモードと、タッチで直接操作するモードがある。ミドルクリック不可。
キー入力はAndroidの入力に加え、ファンクション等が用意されたソフトウェアキーボードがある。
映像の更新頻度は低い。マルチモニタ非対応。Aeroは解除される。
音声転送は架空のオーディオデバイス経由。音質はまずまず。
Windowsのリモートデスクトップクライアントほぼそのまま。AndroidでWindowsにログオンする(PC側はログオフする)のをどう考えるか。
VNC Viewer
RealVNC製。PC側でVNCサーバーを起動しておく必要がある(今回はUltraVNCを使っている。サービス起動も可)。WAN越えには接続先のIPアドレスとポート解放が必要。通信の暗号化には有償版RealVNCが必要なので、無償でWAN越えするならVPN必須。
サーバー側で、接続前に可否ダイアログを表示したり、接続数を制限することもできる。
マウス入力はスワイプでポインタを動かして行う。マウス用ソフトウェアキーボードもある。
キー入力はAndroidの入力に加え、ファンクション等が用意されたソフトウェアキーボードがある。ちゃんとAHKが入力に反応する。
映像はサーバー設定による。更新間隔はまずまず。設定によってはGUI更新を検出できないことも。マルチモニタ非対応。
音声転送非対応。
普通のVNCクライアント。速度や映像関連の性質はサーバーにもよる。色数落とせば軽快だが、VPN必須なのをどう考えるか。
TeamViewer
TeamViewer製。PC側でTeamViewerを起動しておく必要がある。利用にはアカウント登録か、接続先TeamViewerに表示されるIDとパスワードが必要。WAN越えに特別な操作を必要としない。
接続中は画面右下にポップアップが表示され続ける。
マウス入力はスワイプでポインタを動かして行う。ミドルクリック不可。Windows8以降ではマルチタッチ対応らしい。タブレット端末だとRDClientのようなタッチ操作もできるらしい。
キー入力はAndroidの入力に加え、ファンクション等が用意されたソフトウェアキーボードがある。ちゃんとAHKが入力に反応する。
映像は設定による。更新間隔はいまひとつで、GUI更新を検出できないことも(動画は問題ないっぽい)。マルチモニタ対応(モニタ切り替え)。
音声転送に特別な操作は不用だが、音質は荒い。
接続が簡単で、特殊キーにも対応し、音声転送も可能なので、迷ったらこれか? PC側で再生してる動画を見れなくもない。
使い込んでないので、リモートデスクトップ以外の機能はわからん。
総評は、うーん。簡易作業はChromeリモートデスクトップで、それ以外はVNCかなぁ。VPN構築済みでなければ、速度優先設定のTeamViewer。とにかくキビキビ動作し更新されるのが好きなんで。
RDClientはタッチモードが便利なんだけど、Aeroやウィンドウ配置に影響あるのがなぁ。