Witam,
Chciałbym napisać aplikację, która umożliwi mi sterowanie innymi aplikacjami. Na początku myślałem o wykorzystywaniu skrótów klawiszowych. Chciałem skorzystać z:
Process[] processlist = Process.GetProcessesByName("NazwaAplikacji");
Process proc = processlist[0];
proc.WaitForInputIdle();
IntPtr p = proc.MainWindowHandle;
SwitchToThisWindow(p, 1);
SendKeys.SendWait(" ");
Podejrzewam, że można by jakoś ładniej symulować wciśnięcie przycisku klawiatury ale aplikacja musi wykorzystywać skróty oraz muszę złapać fokus na oknie. Więc tą metodę sobie podarowałem.
Później chciałem skorzystać z:
<code class="c#">[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
Ale tutaj aplikacja musi obsługiwać
SendMessage()
. Udało mi się to zastosować dla KMPlayera, ale już foobar tego nie obsługuje.
Ściągnąłem do testów program Girder. Da się tam ustawić sterowanie aplikacją bez łapania fokusu na oknie. Można uruchomić System Wide Capturing i łapać wszystkie zdarzenia w systemie. Przez Test Event możemy wykonać operację, którą wcześniej złapaliśmy. Nie musimy mieć fokusu na oknie sterowanej aplikacji. I działa z każdą testowaną przeze mnie aplikacją.
Załączam plik ze screenem z aplikacji System Wide Capturing. Uruchomiłem łapanie eventów i naciskałem przyciski w aplikacji foobar.
Wciśnięcie każdego przycisku to 2 zdarzenia: LeftClick i Command. Próbowałem wykorzystać kody z tej tabeli w metodzie SendMessage()
ale nie udało mi się sterować aplikacją.
Może ktoś z Was wie w jaki sposób w C# można osiągnąć efekt symulacji wciśnięcia dowolnego przycisku w aplikacji.
Dzięki za pomoc