我正在尝试连接到一个虚拟助手,让她说出我的程序作为输出提供的内容。
msdn: http: //msdn.microsoft.com/en-us/library/windows/desktop/ms644952 (v=vs.85).aspx
使用 sendmessage 有效,但在她说话时会阻止我的程序的其余部分。
Postmessage 不起作用,消息没有到达虚拟助手。
所以我找到了 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);
}
这里的结果是虚拟助手会说话,但程序在超时期间仍然阻塞,我的调试器给了我一个 stackimbalance 问题。
有没有人有关于如何在虚拟助手说话时保持程序运行的建议?
该程序会返回有关您正在做什么的句子,但也有一个正在运行的线程可以返回某些警报和提醒。因此,每次虚拟助手说话时都被阻止的程序是没有用的。