2013年6月14日金曜日

スクリプトでスカイプを操作♪そして・・・64bit版の罠。

最初をたどるとスカイプを見るのが面倒になりまして東北ずん子もあるので読み上げとかさせればいいんじゃないかというところからスタートしました。
もともとはログが設定されているようなのでログサイズが変更されたら処理みたいなのを考えていたんですがどうやらログはDBで保存されているようなのでちょっと簡単には文字列を抜けないようなので諦めました。
(C:\Users\username\AppData\Roaming\Skype\skypeusername\main.db)
(adodbオブジェからDB接続できないかなぁとか考えて面倒になったので・・・)

それでちょっと調べたら別にスカイプ操作用のdllを公式が公開してるじゃないですか
http://dev.skype.com/accessories
http://dev.skype.com/accessories/skype4com


サンプルとかもねっとにぽんぽんあったのでこれは余裕とか思っていたらまず登録からこけました。
扱うためにはレジストリの登録が必要で
regsvr32 Skype4COM.dll
とコマンドラインでも指定実行でもよいのですが
「モジュール "Skeype4COM.dll" は、実行しているWindowsのバージョンと互換性がない可能性があります。モジュールがx86(32ビット)バージョンまたはx64(64ビット)バージョンのregsvr32.exeと互換性があることを確認してください。」

10分ぐらいネットでうろうろしていたところ私が使っているのがwindows7の64bit版でしてそれが原因だったようです。
登録先は64bitではなければならないということでコマンドは
C:\Windows\SysWOW64\regsvr32 Skype4COM.dll
となります。


よしこれでなんか作るぞーと
ためしに「set s4c=createobject("Skype4COM.Skype")」
でオブジェクトを作るだけのテストでいきなり

エラー: ActiveX コンポーネントはオブジェクトを作成できません。: 'Skype4COM.Skype'
コード: '800a01ad'
ソース: Microsoft VBScript 実行時エラー


あれ?おかしいなぁ何か間違っているか?と小一時間ぐだぐだーっとしていたら、どうやら起動も64bit版でなければいけないって事らしいです。

いつもは気にしてなかったんですがデフォルトでは32bitで動作なんですよね。
ためしに「msgbox wsh.fullname」を投げたら
「C:\Windows\System32\Wscript.exe」
って事で納得しました。

ただまぁつど手動で64bit側で起動し直したり、batファイル作ったりするのは馬鹿過ぎるで
「c:\windows\system32\」なら起動元はwscriptでもcscriptでも問答無用で上げ直しましょうかね。

if left(lcase(wsh.fullname),20)="c:\windows\system32\" then createobject("wscript.shell").run "c:\windows\syswow64\"& mid(wsh.fullname,21)&" """ & wscript.scriptfullname &"""":wsh.quit

こんな感じで多分良いでしょうね。必ず一行目で指定してください。
また、このままでは引数はもてませんので持たしたい方は工夫してください。

さて、じゃぁ何を作ろうかなぁっと。


0 件のコメント:

コメントを投稿