VOICEROID+ 結月ゆかり を使用してHSPからしゃべらせるサンプル。(作り途中) VOICEROID+ 結月ゆかり が別途必要。 http://www.amazon.co.jp/gp/product/B006GGRTZ6?ie=UTF8&tag=inovia2004-22&linkCode=shr&camp=1207&creative=8411&creativeASIN=B006GGRTZ6&redirect=true&ref_=s9_simh_gw_p65_d0_g65_i2
VOICEROID+ 結月ゆかり を使用してHSPからしゃべらせるサンプル。(作り途中) VOICEROID+ 結月ゆかり が別途必要。 http://www.amazon.co.jp/gp/product/B006GGRTZ6?ie=UTF8&tag=inovia2004-22&linkCode=shr&camp=1207&creative=8411&creativeASIN=B006GGRTZ6&redirect=true&ref_=s9_simh_gw_p65_d0_g65_i2
#include "user32.as" #include "kernel32.as" // ↓をダウンロードして使用 // http://lldev.jp/hsp/module/clipboard_text.html #include "modClipboardText.hsp" #module __AttachThread__ // 別スレッド(プロセス)のウィンドウのフォーカスを取得 #defcfunc GetFocus2 GetForegroundWindow GetWindowThreadProcessId stat, 0 ttid = stat GetCurrentThreadId ctid = stat AttachThreadInput ctid, ttid, 1 GetFocus h = stat AttachThreadInput ctid, ttid, 0 return h // 別スレッド(プロセス)のウィンドウにフォーカスを当てる #deffunc SetFocus2 int _h GetWindowThreadProcessId _h, 0 ttid = stat GetCurrentThreadId ctid = stat AttachThreadInput ctid, ttid, 1 SetFocus _h AttachThreadInput ctid, ttid, 0 return /* #deffunc ShowWindow2 int h, int f ShowWindow h, f return #deffunc IsWindow2 int _h IsWindow h return stat */ #global #module __VOICEROID__ // ボイスロイドの起動数を調べる #defcfunc GetRunningNumV h = 0 : c = 0 repeat FindWindowExA 0, h, "TkTopLevel", "VOICEROID+ 結月ゆかり" h = stat if h == 0 : c = cnt : break // 0 になるまでループ loop return c // ボイスロイドのトップのウィンドウを取得 #defcfunc GetTopWindowV FindWindowA "TkTopLevel", "VOICEROID+ 結月ゆかり" return stat // ボイスロイドのテキストボックスを取得 #deffunc GetTextBoxV FindWindowExA GetTopWindowV(), 0, "TkChild", 0 hChild = stat FindWindowExA hChild, 0, "TkChild", 0 // その子を取得(長男) FindWindowExA hChild, stat, "TkChild", 0 // 2番目(次男) FindWindowExA hChild, stat, "TkChild", 0 // その子の3番目の兄弟を取得(三男)といった感じ hGrandchild = stat return // ボイスロイドのテキストボックスを全選択する #deffunc TextAllSelectV sendmsg GetTopWindowV(), 0x0111/*WM_COMMAND*/, 60, 0 return // ボイスロイドのテキストボックスにクリップボード経由で貼り付け #deffunc TextPasteV sendmsg GetTopWindowV(), 0x0111/*WM_COMMAND*/, 56, 0 return // ボイスロイドのテキストボックスの中身を消す #deffunc TextDeleteV keybd_event 46, 0, 0, 0 // DEL 押し // バックスペースなら 8 keybd_event 46, 0, 2, 0 // DEL 離し return // テキストボックスに代入します(クリップボード経由) #deffunc SetText2V str _s s = _s // 現在のフォーカスのハンドルを取得 nowHwnd = GetFocus2() // フォーカスをボイスロイドに当てる SetFocus2 GetTopWindowV() // テキストをクリアします。 TextAllSelectV TextDeleteV wait 1 // ウェイトがないと反映されない // クリップボードに転送 setcbtext s // 貼り付け TextPasteV // フォーカスを元に戻す SetFocus2 nowHwnd return // テキストを再生します。 #deffunc PlayTextV FindWindowExA GetTopWindowV(), 0, "TkChild", 0 hChild = stat FindWindowExA hChild, 0, "TkChild", 0 // その子を取得 FindWindowExA hChild, stat, "TkChild", 0 // その子の2番目の兄弟を取得 hGrandchild = stat FindWindowExA hGrandchild, 0, "Button", 0 // 2番目の兄弟の孫(長男)を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の2番目を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の3番目を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の4番目を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の5番目を取得 hTarget = stat /* mes strf("0x%08X", hTarget) SetFocus2 hTarget SetForegroundWindow hTarget mes stat */ ;PostMessageA hTarget, 0x0006/*WM_ACTIVATE*/, 1, 0 //SendMessageA hTarget, 0x00F5/*BM_CLICK */, 0, 0 ;PostMessageA hTarget, 0x0201/*WM_LBUTTONDOWN */, 0x0001, 0x0017003D ;PostMessageA hTarget, 0x0200/*WM_MOUSEMOVE*/, 0x0001, 0x0017003D ;PostMessageA hTarget, 0x0203/*WM_LBUTTONUP */, 0x0000, 0x0017003D PostMessageA hTarget, 0x0000/*WM_NULL*/, 0x0000, 0x00000000 // これだけでも鳴るみたい。 return #deffunc StopTextV FindWindowExA GetTopWindowV(), 0, "TkChild", 0 hChild = stat FindWindowExA hChild, 0, "TkChild", 0 // その子を取得 FindWindowExA hChild, stat, "TkChild", 0 // その子の2番目の兄弟を取得 hGrandchild = stat FindWindowExA hGrandchild, 0, "Button", 0 // 2番目の兄弟の孫(長男)を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の2番目を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の3番目を取得 FindWindowExA hGrandchild, stat, "Button", 0 // 2番目の兄弟の孫の4番目を取得 hTarget = stat PostMessageA hTarget, 0x0000/*WM_NULL*/, 0x0000, 0x00000000 // これだけでも鳴るみたい。 return #global // メイン // 起動している場合は 1以上が返る。 if GetRunningNumV() > 0 { SetFocus2 GetTopWindowV() SetText2V "マイクのテストテストテスト" PlayTextV }