やりたいこと:
バックグラウンドにあるブラウザ(chrome)に対し、ショートカットキーを入力し、新しいタブを作成したい。(ショートカットキーはCtrl+T)言語はC#です。
⇒新しいタブの作成は一例であり、CtrlやShift,Altとの組み合わせショートカットキーの入力が最終目標です。
試したこと:
1.Post message
chromeのウインドウハンドルを捉え、win32のPost messageでWM_KEYDOWN/WM_CHAR/WM_UPを組み合わせでトライしましたが、不可でした。
バックグラウンドにあるメモ帳に対し文字の入力はできましたので、Post messageの設定ができていないわけではありません。Ctrlとの組み合わせがダメでした。
2.key_event & SendInput & SendKeys
何れも可能でしたが、対象となるウインドウをアクティブにする必要があり、上述の「バックグラウンドにある…」が達成できません。
ご教示頂きたい事項
バックグラウンドにあるウインドウに対し、CtrlやShift,Altとの組み合わせショートカットキーを送信することはできないのでしょうか。ご存じの方いましたらご教示いただければ幸いです。
3.以下コードです。
C#
1using System; 2using System.Diagnostics; 3using System.Linq; 4using System.Runtime.InteropServices; 5 6namespace ConsoleApp1 7{ 8 class Program 9 { 10 [DllImport("user32.dll")] 11 static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 12 13 [DllImport("user32.dll")] 14 static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); 15 16 [DllImport("user32.dll", SetLastError = true)] 17 public static extern IntPtr GetAncestor(IntPtr hWnd, uint gaFlags); 18 19 // 送信するメッセージ 20 const uint WM_KEYDOWN = 0x100; 21 const uint WM_UP = 0x0101; 22 const uint WM_CHAR= 0x0102; 23 24 const uint WM_LBUTTONDOWN = 0x0201; 25 const uint WM_LBUTTONUP = 0x0202; 26 const uint None = 0; 27 const uint MK_LBUTTON = 0x0001; 28 public const uint GA_ROOT = 2; 29 30 static void Test1() 31 { 32 //メモ帳確認用 33 //var hwnd = Process.GetProcessesByName("Notepad").First().MainWindowHandle; 34 //↓文字入力の場合はこっちのウインドウハンドル 35 //hwnd = FindWindowEx(hwnd, IntPtr.Zero, "richEditD2DPT", null); 36 //// aと入力 37 //PostMessage(hwnd, WM_KEYDOWN, (IntPtr)0x41, IntPtr.Zero); 38 39 //chromeの場合 40 var hwnd = Process.GetProcessesByName("chrome")[0].MainWindowHandle; 41 42 // ctrlと入力 43 PostMessage(hwnd, WM_KEYDOWN, (IntPtr)0x11, IntPtr.Zero); 44 // ctrlと入力 45 PostMessage(hwnd, WM_CHAR, (IntPtr)0x11, IntPtr.Zero); 46 47 // sと入力 48 PostMessage(hwnd, WM_KEYDOWN, (IntPtr)0x53, IntPtr.Zero); 49 // sと入力 50 PostMessage(hwnd, WM_CHAR, (IntPtr)0x53, IntPtr.Zero); 51 52 // tと入力 53 PostMessage(hwnd, WM_UP, (IntPtr)0x53, IntPtr.Zero); 54 // ctrlと入力 55 PostMessage(hwnd, WM_UP, (IntPtr)0x11, IntPtr.Zero); 56 57 } 58 59 static void Main(string[] args) 60 { 61 Test1(); 62 63 } 64 } 65} 66

回答3件
あなたの回答
tips
プレビュー