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 TextDelete2V
sendmsg GetTopWindowV(), 0x0111/*WM_COMMAND*/, 52, 0
return
// テキストボックスに代入します(クリップボード経由)
#deffunc SetText2V str _s
s = _s
// 現在のフォーカスのハンドルを取得
nowHwnd = GetFocus2()
// フォーカスをボイスロイドに当てる
SetFocus2 GetTopWindowV()
// テキストをクリアします。
TextAllSelectV
TextDelete2V
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 {
SetText2V "マイクのテストテストテスト"
PlayTextV
}