私のプログラムが出力として与えることを彼女に言わせるために、仮想アシスタントに接続しようとしています。
msdn: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx
sendmessage の使用は機能しますが、彼女が話している間、私のプログラムの残りの部分をブロックします。
ポストメッセージが機能せず、メッセージが仮想アシスタントに届きません。
それで、SendMessageTimeout を見つけました。
コード内:
[DllImport("User32.dll")]
public static extern int SendMessageTimeout(IntPtr hWnd, uint Msg, IntPtr wParam, ref COPYDATASTRUCT lParam, uint fuFlags, uint timeout);
public void Speak(string s)
{
string json = @"{
""debug"" : ""on"",
""version"" : ""1.0"",
""priority"": ""2"",
""type"" : ""interaction"",
""interaction"" : {
""interactionID"" : ""Agenda"",
""actionID"" : ""Agenda"",
""string"" : """ + s + @"""
}
}";
IntPtr hWnd = FindWindow(null, windowAnne);
byte[] sarr = Encoding.Default.GetBytes(json);
COPYDATASTRUCT cds;
cds.dwData = (IntPtr) 100;
cds.lpData = json;
cds.cbData = sarr.Length + 1;
SendMessageTimeout(hWnd, WM_COPYDATA, IntPtr.Zero, ref cds, 0x0000, 500);
}
ここでの結果は、仮想アシスタントが話すということですが、プログラムはタイムアウトの間ブロックされたままで、私のデバッガーはスタックの不均衡の問題を引き起こします。
仮想アシスタントが話している間、プログラムを実行し続ける方法について誰か提案がありますか?
プログラムは、あなたが何をしているかについて文章を返しますが、特定のアラームやリマインダーを返すことができるスレッドも実行しています. したがって、仮想アシスタントが話すたびにブロックされるプログラムは役に立ちません。