c#にて外部アプリを起動させ、そのアプリに対してキーコードを送信したいと考えています。
下記のコードを作成していろいろ試していますが、解決しないので質問させていただきます。
test1でアプリを起動します
test2でアプリをアクティブにします
test3でアプリに対してキーストロークを送信します
下記、コメントアウトしていますが、アプリをメモ帳にするとすべて正常に実行できていますが
本来制御したいアプリ(Cubaseという音楽ソフト)にすると、test1、test2は正常に実行されますが
test3が実行できません。
UnityEngine.Debug.Log("ハンドルが取得できません")の中に入ってくるので
ハンドルが取得できていないと思うのですが、test3で指定するハンドル名を把握する方法が知りたいです
ご存じの方がおられましたら教授いただけると助かります
よろしくお願いいたします
c#
1 2public void test1() 3{ 4 exProcess = new Process(); 5 //exProcess.StartInfo.FileName = @"notepad.exe"; メモ帳の場合 6 exProcess.StartInfo.FileName = @"C:\Program Files\Steinberg\Cubase LE AI Elements 9.5\Cubase LE AI Elements 9.5.exe"; 7 8 exProcess.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized; 9 exProcess.Start(); 10} 11 12public void test2() 13{ 14 //var windowName = "メモ帳"; 15 var windowName = "Cubase AI プロジェクト - The Lab Song 01"; 16 17 foreach (var kv in GetAllWindowTitle()) 18 { 19 if (kv.Value.Contains(windowName)) 20 { 21 UnityEngine.Debug.Log(kv.Key.ToString()); 22 UnityEngine.Debug.Log(kv.Value.ToString()); 23 24 if (kv.Key != GetForegroundWindow()) 25 { 26 SetForegroundWindow(kv.Key); 27 break; 28 } 29 } 30 } 31} 32 33public void test2() 34{ 35 36 Int32 WM_KEYDOWN = 0x0100; 37 38 // デスクトップのウインドウハンドル取得 39 IntPtr hwnd = GetDesktopWindow(); 40 41 // ウインドウハンドル取得 42 //hwnd = FindWindowEx(hwnd, IntPtr.Zero, "notepad", null); 43 hwnd = FindWindowEx(hwnd, IntPtr.Zero, "Cubase AI プロジェクト - The Lab Song 01", null); 44 if (hwnd == IntPtr.Zero) 45 { 46 UnityEngine.Debug.Log("ハンドルが取得できません"); 47 return; 48 } 49 50 //メモ帳ウインドウ内の「edit」ウインドウのハンドル取得 51 //hwnd = FindWindowEx(hwnd, IntPtr.Zero, "edit", null); 52 53 PostMessage(hwnd, WM_KEYDOWN, VkKeyScan('a'), 0); 54} 55
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/25 05:01