Skype4COM.dll COM API を介した Skype の制御
質問
私は一緒に働いています Skype4COM.dll COM API C# を使用しており、必要なすべての通信機能で非常にうまく機能します。私たちは、アプリケーションに組み込まれた Skype の上に、使いやすいインターフェイスを配置しようとしています。
私の問題は、どの Skype ウィンドウを使用するか使用しないかを制御または無効にすることにあります。必要になると思われる唯一の Skype ウィンドウは、Skype ビデオ電話/会議ウィンドウです。Skype が表示できる 1 つおきのウィンドウを非表示にして制御したいと考えています。独自の応答プロンプトを表示するので、着信時にポップアップする着信ダイアログ ウィンドウも無効にしたいと考えています。ウィンドウ管理以外の API には満足しています。
API を使用すると、Windows を有効にする方法はわかりますが、Windows メッセージをハッキングして Skype アプリに送信する以外に、Windows を非表示にする方法がわかりません。何かが足りないのでしょうか?
ご協力ありがとうございます、ケニー
解決
「Skypeコマンド」を次の方法で送信できることがわかりました
skypeobj.SendCommand ( Command cmd );
これは、私たちが必要としているもののほとんどでうまく機能します。 Skype開発者サイトのリファレンス:
一部のコード:
void _SendSkypeCommand ( string cmdToSend )
{
Command cmdSkype = new Command ();
cmdSkype.Blocking = true;
cmdSkype.Timeout = 2000;
cmdSkype.Command = cmdToSend;
Trace.WriteLineIf ( _TracingDetailed, string.Format ( "skype command sent '{0}'", cmdToSend ) );
_skype.SendCommand ( cmdSkype );
}
void _hideSkypeWindows ()
{
_SendSkypeCommand ( "SET SILENT_MODE ON" );
_SendSkypeCommand ( "SET WINDOWSTATE HIDDEN" );
}
他のヒント
残念ながら、インターフェースは実際のウィンドウを実際に制御するのではなく、それらを表示および変更する方法のみを(ラッパーを介して)提供します。
あなたが言ったように、どういうわけかウィンドウのハンドルを取得し、それを隠すためにメッセージを送信する必要があります。
私も同じ問題を抱えており、
_SendSkypeCommand ( "SET SILENT_MODE ON" );
この投稿で述べられているように、壊れています。 http://devforum.skype.com/t5/Desktop-API/How-to-keep-hidden-Skype-UI-using-Skype4COM/td-p/12338
私の解決策は、Skype UI のウィンドウを表示領域の外に移動して非表示にすることです。
コードを書きます:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
IntPtr hwnd = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "tSkMainForm", null);//find skype window
MoveWindow(hwnd, 2300, 2300, 300, 400, true);