HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0831
DoubleQuoteskypeのメッセージ書き換え13未解決


DoubleQuote

リンク

2010/8/31(Tue) 01:04:51|NO.34725

スカイプには表示メッセージ機能があります。
スカイプ画面で、アイコンの横にある噴出しのようなものです。
その自分のメッセージを書き換える方法は何かありますか?
その方法をご存知の方いらっしゃいましたら教えてください。
よろしくお願いいたします。



この記事に返信する


sinh

リンク

2010/8/31(Tue) 07:58:40|NO.34726

Skypeの操作をしたければskype4comを使えばいいと思いますよ。
http://developer.skype.com/accessories

マニュアルにあるProfile.vbsが参考になるかもしれません。



DoubleQuote

リンク

2010/8/31(Tue) 19:32:37|NO.34750

sinh様

レスありがとうございます。
このskype4comはfunc等を使って命令を使えるようにしていく形ではなくcomオブジェクトの
要領で提供されているようですね?
とりあえずムードテキストを取得するようにスクリプトを組んでみました。
このようなやり方であっているのでしょうか?


newcom oskype,"SKYPE4COM.dll" oskype->"Attach" sdim a comres a oskype->"Profile.CurrentUserProfile.MoodText" dialog a

HSPで書かれている参考ページは見つかりませんでしたが、Googleで「skype4com ムードテキスト」
と検索すると参考になりそうなページは結構ありそうですね。



sinh

リンク

2010/9/1(Wed) 11:47:15|NO.34777

skype4comを使って書いてみました。
このサンプルを実行する前に
 1. http://developer.skype.com/accessoriesからSkype4COM-1.0.33.zipをダウンロード
2. 中に入っているSkype4COM.dllをsystem32などに置く。
3. コマンドプロンプトやファイル名を指定して実行などで
"regsvr32 Skype4COM.dll" をする。
という操作が必要です。

#define VARIANT_FALSE	(0)
newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if (skypeIsRunning == VARIANT_FALSE) { mes "Error: skype is not running." stop } // oSkype->"Attach" しなくてもMoodTextを操作できるらしい currentUser = oSkype("CurrentUserProfile") mes "Current Mood Text: " + currentUser("MoodText") mes "Try to change mood text" currentUser("Moodtext") = "こんにちは世界" // ここを適当に変更する mes "Current Mood Text: " + currentUser("MoodText") /* // こんなこともできるらしい currentUser("RichMoodText") = "こんにちは<i>世界</i>" */

# http://developer.skype.com/accessoriesを見ていたらskype4comを使うのではなく
# Windowsのウインドウメッセージを使ってSkypeとやり取りする方法もあるみたいでした。
# (Skype Public API Referenceの方)
# こちらを使ったほうがskype4com.dllのインストールも必要ないし、
# お手軽だったかもしれません;;



DoubleQuote

リンク

2010/9/5(Sun) 14:21:02|NO.34857

sinh様

レスありがとうございます。また遅くなってしまいすみません
こちらのスクリプトでムードテキスト書き替えが可能となりました。
ありがとうございます。
テストスクリプトとして以下のようなスクリプトを考えました。

#define VARIANT_FALSE (0) newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if (skypeIsRunning == VARIANT_FALSE) { mes "Error: skype is not running." stop } // oSkype->"Attach" しなくてもMoodTextを操作できるらしい currentUser = oSkype("CurrentUserProfile") mes "Current Mood Text: " + currentUser("MoodText") repeat // こんなこともできるらしい if (skypeIsRunning != VARIANT_FALSE) { currentUser("RichMoodText") = "こんにちは<i>世界</i>"+rnd(256) } wait 25 loop
こちらのスクリプトをskypeが起動している状態で実行してみて下さい。
きちんとムードメッセージが書き替えられると思うのですが
このプログラム起動中に(何らかの理由で)スカイプを終了したとき
外部オブジェクトの呼び出しに失敗とエラーが出てしまいます。
これを回避するにはプロセスを確認してskypeが起動しているか見るしかないので
しょうか?
何か良い方法有りましたら教えて下さい。よろしくお願いいたします。


ドキュメントが読みにくくて大変ですね。どうやって命令類確認していますか?



sinh

リンク

2010/9/5(Sun) 16:36:26|NO.34861

> 外部オブジェクトの呼び出しに失敗とエラーが出てしまいます。
確かになってしまいますね。
ループの中で
if (skypeClient("IsRunning") != VARIANT_FALSE) {
currentUser("RichMoodText") = ...
とかやってskypeが起動しているか確認して回避するしか無い気がします。
> ドキュメントが読みにくくて大変ですね。どうやって命令類確認していますか?
頑張ってマニュアルの"Class List"のあたりを読んでます(笑
とりあえずスクリプトのcurrentUser("RichMoodText") = ...に
辿りつくまでの私のマニュアルの読み方を書いてみます。

google先生に聞いたらあのメッセージはムードメッセージと言うらしいという事が分かりました。
次にマニュアルを開いて"mood"で検索してみました。
そうしたらムードメッセージをいじれそうなインターフェースとしてIProfileとIUserが見つかります。
IProfileとIUserのページを見てみると、それぞれのページの"Properties"の中に
[IProfile]
BSTR MoodText [get, set] This command queries/sets the mood text in the current user profile. [IUser] BSTR MoodText [get] This command queries the mood text of a user.
で、今回使えるのはIProfileの方です。
IProfileのMoodTextの方には[get, set]と書いてあるのでメッセージの取得・設定の両方ができますが
IUserの方は[get]しかないので取得しかできません。

あとは
newcom oSkype, "Skype4COM.Skype"
するとoSkypeを使ってISkypeインターフェースを操作できるようになるので、
ISkypeのページを見てIProfileを返しているようなメソッド・プロパティを探します。 すると
IProfile  CurrentUserProfile [get] 
This command queries the user profile object.
が見つかります。
あとはこれを素直にHSPのスクリプトに変換してあげます。



DoubleQuote

リンク

2010/9/5(Sun) 23:28:54|NO.34875

sinh様
早急なレス、ありがとうございます。

if ( skypeClient("IsRunning") != 0 ) { if ( tmp == 1 ) : tmp = 0 : wait 100 status = oSkype("CurrentUserStatus") if ( status != -1 ) && ( status != 0 ) && ( status != 3 ) && ( status != 5 ) { currentUser("RichMoodText") = p1 } } else { tmp = 1 }
こんな形でスカイプの終了に対して対応することができました。
オンライン、オフラインの調査も含めるとうまくいくようです。
ただこういうやり方だとスカイプがアップグレードされた際には対応できなくなる
かもしれないですね・・・
ちなみに私は5.0のβバージョン使っています。
wait 100ですがパラメータの量、もう少し検討する必要がありそうです。


あと、タイトルと少し違ってしまうのですが、任意のコンタクトユーザ(echo123など)の
ログイン状態などを取得する方法をドキュメント読んでいるのですが
まだ理解できません。以下で何か間違っているでしょうか?


#define VARIANT_FALSE (0) newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if (skypeIsRunning == VARIANT_FALSE) { mes "Error: skype is not running." stop } // -1 : 不明 // 0 : オフライン // 1 : オンライン // 2 : 退席中 // 3 : 使用不可 // 4 : 取り込み中 // 5 : ログイン状態を隠す // 6 : Skype Me // // oSkype->"Attach" しなくてもMoodTextを操作できるらしい user = oSkype->user("echo123") mes user("onlineStatus")
あとオンラインオフラインの解釈はこれでいいのでしょうか?



DoubleQuote

リンク

2010/9/6(Mon) 13:52:52|NO.34882

一つ前のレスに書いた

if ( skypeClient("IsRunning") != 0 ) { if ( tmp == 1 ) : tmp = 0 : wait 100 status = oSkype("CurrentUserStatus") if ( status != -1 ) && ( status != 0 ) && ( status != 3 ) && ( status != 5 ) { currentUser("RichMoodText") = p1 } } else { tmp = 1 }
これですが、電源投入時の場合、skypeがセットアップされていない為エラーが出てしまう
ようです。

// PC電源投入して2分以内なら10秒待たせる tick = GetTickCount() if ( tick/(1000*60) <= 2 ) && ( tick != 0 ) : wait 1000


こんな感じで初期起動時は待たせるという形にしないと駄目のようですね・・・



sinh

リンク

2010/9/6(Mon) 16:27:33|NO.34884

> ログイン状態などを取得する方法
こんな感じでうまくいくみたいです。
user = oSkype("User", "echo123")
mes user("OnlineStatus")

> あとオンラインオフラインの解釈はこれでいいのでしょうか?
マニュアルのModules->Skype4COMとClassList->IUserあたりを読むと
6: ログアウト
7: SkypeMe
その他は同じでした。
# もしかしたら私がダウンロードしたライブラリのバージョンが違っているのかもしれません



DoubleQuote

リンク

2010/9/7(Tue) 03:28:19|NO.34901

sinh様
教えて頂き誠にありがとうございます。
6: ログアウト
7: SkypeMe
とのことですが以下のような検証プログラムを組んでみました。

#define VARIANT_FALSE (0) newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if (skypeIsRunning == VARIANT_FALSE) { mes "Error: skype is not running." stop } // oSkype->"Attach" しなくてもMoodTextを操作できるらしい user = oSkype("User", "echo123") status = user("OnlineStatus") convert = oSkype("Convert") for i,-1,8 mes ""+i+" : "+convert("onlineStatusToText",i) next
ここまでは書けるようになりました(笑)
これによると私の環境では
5 : skypeout
7 : unknown
となるようですね。実際はどっちになるのでしょうね。バージョンが違うのかな。
私はskype4comは1.0.33ですね。



また違う話となるのですが、チャット文字列を送信したい場合、以下のようなスクリプトを
考えてみました。
内容としてはecho123にtestという文字列をチャットで送信する物となります。

#define VARIANT_FALSE (0) newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if (skypeIsRunning == VARIANT_FALSE) { mes "Error: skype is not running." stop } // oSkype->"Attach" しなくてもMoodTextを操作できるらしい msgdlg = skypeClient("OpenMessageDialog","echo123","test") msgdlg = skypeClient("ButtonPressed","YES") msgdlg = skypeClient("ButtonReleased","YES")
これをそのまま実行すると変数型の変換に失敗しましたとエラーが出てしまいますが
チャット用ウィンドウは表示されます。ただ発言までは行かないようですね。
どこが違っているのか教えて頂けるとありがたいです。
よろしくお願いいたします。


自分で出来るようになりたいけどなかなかそう簡単にはできなそうですね。すみませんです



sinh

リンク

2010/9/7(Tue) 11:32:59|NO.34902

どうもこんにちは。

> 以下のような検証プログラムを組んでみました。
私の環境で動かしてみたらDoubleQuoteさんと同じ結果になりました。
(7は日本語で不明と出ましたが)
skypeは4.2.0.169、skype4comは1.0.33でした。

> チャット文字列を送信したい場合
マニュアルで "Public Member Functions"の下に書かれているもの、
例えばISkype::Atatchは
oSkype -> "Attach" パラメータ

のように、"Properties"の下に書かれているもの、 例えばISkype::CurrentUserは
oSkype("CurentUser", パラメータ)
のように呼び出します。

チャットで文字列を送信するにはこんな感じでしょうか?
	skypeClient -> "OpenMessageDialog" "echo123"
oSkype -> "SendMessage" "echo123", "test"
どうやったら送信ボタンを押せるのかわからなかったので残念な実装になってます(汗



sinh

リンク

2010/9/7(Tue) 11:38:19|NO.34903

書き忘れてしまいましたが、

hoge = oSkype("CurrentUser") // OK huga = oSkype -> "Attach" // NG
プロパティの方は戻り値を変数に代入できますが、関数の方はHSPでは無理らしいです。
comresなどを使うんでしょう。
(そこら辺についてはよく知らないので詳しい方、フォローを願います。)



DoubleQuote

リンク

2010/9/7(Tue) 18:40:45|NO.34905

sinh様

いつもありがとうございます。
ある程度まとまってきたのでサンプル的な物を投下してみます。

newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if ( skypeIsRunning == 0 /*VARIANT_FALSE*/ ) { dialog "Error: skype is not running.",1,"ERROR!!" goto *exit } onexit *exit //dialog oSkype("Version"),,"スカイプのバージョン情報" convert = oSkype("Convert") mes "callStatusToText" repeat 23,-1 mes ""+cnt+" : "+convert("callStatusToText",cnt) loop pos 300,000 mes "onlineStatusToText" repeat 9,-1 mes ""+cnt+" : "+convert("onlineStatusToText",cnt) loop // 通話ウィンドウ表示 skypeClient->"OpenMessageDialog" "echo123" // チャット文字列送信 oSkype->"SendMessage" "echo123", "☆テスト☆\ntest strings!!\nnow I'll call you soon!!" ocall = oSkype("PlaceCall","echo123") // コール先 oSkype("Mute") = 1 // マイクをミュートに設定 repeat 150 wait 10 // ステータス表示 call_status = ocall("status") title convert("callStatusToText",call_status)+"("+call_status+")" loop // 通話終了 ocall->"Finish" repeat 10 wait 10 call_status = ocall("status") title convert("callStatusToText",call_status)+"("+call_status+")" loop stop *exit // 通話終了 ocall->"Finish" delcom oSkype end


あと実現したいことなのですがコンタクト内に入っている人のリストを取得してみたい
です。
おそらくFriendsとかUser使うんだと思うのですがなかなかうまく行かないですね。

friend = oSkype("Friends") dialog friend("user","Handle",1) //sdim a comres a oSkype->"Friends","1" dialog a stop
こんな形で進めていっています。Friendsの使い方違うのでしょうか?



DoubleQuote

リンク

2010/9/11(Sat) 01:00:00|NO.34943

スカイプ内コンタクト一覧の取得、うまくやることが出来ました。
今後、このコンポーネントを使う方の為に簡単なサンプル作ってみました。
バージョンが違うと動かないかも知れませんが何らかの参考になればと思います。

// // Skype4COM サンプル // sinh様、はりー(DoubleQuote) // // ・Skypeのコンタクト一覧、ステータス一覧、チャット、通話サンプル // // ・動作確認したバージョン // Skype本体 : 5.0.0.105 // Skype4COM : 1.0.33.0 DLL(Skype for COM API) // // newcom oSkype, "Skype4COM.Skype" skypeClient = oSkype("Client") skypeIsRunning = skypeClient("IsRunning") if ( skypeIsRunning == 0/*VARIANT_FALSE*/ ) { // Skypeが起動していない時の処理 dialog "Error: skype is not running.",1,"ERROR!!" goto *exit } onexit *exit convert = oSkype("Convert") friend = oSkype("Friends") ////////////////////////////////////////////////////////////////////////////////////// // [ Skypeコンタクト一覧取得 ] ////////////////////////////////////////////////////////////////////////////////////// screen 0,700,1000 title "Skypeコンタクト一覧  スカイプ(本体)のバージョン情報:"+oSkype("Version") font "MS 明朝",20,21 mes "ID : FullName(Network) | Handle(SkypeID)\n" repeat friend("count"),1 item = friend("Item",cnt) fullname = item("FullName") // コンタクトに登録されているハンドルネームを取得 handle = item("Handle") // コンタクトに登録されているハンドル(SkypeID)を取得 // オンライン情報の取得 user = oSkype("User",handle) status = user("OnlineStatus") status_s = convert("OnlineStatusToText",status) // 取得結果表示 mes strf("%02d",cnt)+" : \""+fullname+"\"("+status_s+")"+" | "+handle loop width ,20*(friend("count")+3) // ウィンドウサイズの実効幅へ調整 ////////////////////////////////////////////////////////////////////////////////////// // [ コールステータス一覧 & オンラインステータス一覧 ] ////////////////////////////////////////////////////////////////////////////////////// screen 1,640,480 title "スカイプ(本体)のバージョン情報:"+oSkype("Version") mes "callStatusToText" repeat 23,-1 mes ""+cnt+" : "+convert("callStatusToText",cnt) loop pos 300,000 mes "onlineStatusToText" repeat 9,-1 mes ""+cnt+" : "+convert("onlineStatusToText",cnt) loop ////////////////////////////////////////////////////////////////////////////////////// // [ テストID"echo123"へチャットメッセージ送信 & 通話開始 & 通話切断 ] ////////////////////////////////////////////////////////////////////////////////////// // 通話ウィンドウ表示 skypeClient->"OpenMessageDialog" "echo123" // チャット文字列送信 oSkype->"SendMessage" "echo123","☆テスト☆\ntest strings!!\nnow I'll call you soon!!" ocall = oSkype("PlaceCall","echo123") // コール先設定 oSkype("Mute") = 1 // マイクをミュートに設定[MuteOn:1 ; MuteOff:0] repeat 150 wait 10 call_status = ocall("status") title convert("callStatusToText",call_status)+"("+call_status+")" // 通話ステータスをタイトルへ表示 loop ocall->"Finish" // 通話終了 repeat 10 wait 10 call_status = ocall("status") title convert("callStatusToText",call_status)+"("+call_status+")" // 通話ステータスをタイトルへ表示 loop stop *exit // 通話終了 ocall->"Finish" delcom oSkype end


長い間いろいろと教えて頂き誠にありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.