"kliknięcie" i zmiana tekstu przycisku aplikacji zewnętrznej,

2017-01-16 15:21

Rejestracja: 7 lat temu

Ostatnio: 3 godziny temu

0

Witam.

Próbuję "kliknąć" przycisk w innej aplikacji.
Kopiąć w necie naklepałem coś takiego:


static List<IntPtr> GetAllChildrenWindowHandles(IntPtr hParent,   int maxCount)
{
    List< IntPtr> result = new List<IntPtr>();
    int ct = 0;
    IntPtr prevChild = IntPtr.Zero;
    IntPtr currChild = IntPtr.Zero;
    while (true && ct < maxCount)
    {
            currChild = FindWindowEx(hParent, prevChild, null, null);
                if (currChild == IntPtr.Zero) break;
                result.Add(currChild);
                prevChild = currChild;
                ++ct;
            }
            return result;
}

private void button_Click(object sender, System.EventArgs e)
{
            Process[] processes = Process.GetProcessesByName("MONITOR_BAZY_DANYCH");
            List <IntPtr> children = GetAllChildrenWindowHandles(processes[0].Handle, 100);
}

Uchwyt do okna jest łapany prawidłowo ale metoda GetAllChildrenWindowHandles nic nie zwraca.
Co zrobiłem, źle albo jaki jest inny prostszy sposób na "kliknięcie" przycisku na formie innego programu?

edytowany 2x, ostatnio: hipekk, 2017-01-16 16:11

Pozostało 580 znaków

2017-01-16 15:29

Rejestracja: 16 lat temu

Ostatnio: 2 godziny temu

1

Proces to nie okno.
Próbujesz szukać okien potomnych procesu, zamiast okien potomnych głównego okna.

Pozostało 580 znaków

2017-01-16 15:32

Rejestracja: 7 lat temu

Ostatnio: 3 godziny temu

0

Dziękuję za naprowadzenie.

Zmieniłem

   List <IntPtr> children = GetAllChildrenWindowHandles(processes[0].Handle, 100);

na

   List <IntPtr> children = GetAllChildrenWindowHandles(processes[0].MainWindowHandle, 100);

i coś ruszyło.

Kombinuje dalej :).

Pozostało 580 znaków

2017-01-16 16:16

Rejestracja: 7 lat temu

Ostatnio: 3 godziny temu

0

Drugie pytanie:
w jaki sposób można zmienić tekst przycisku?

Mając uchwyt przycisku ("klikanie" działa) próbowałem:

   HandleRef hrefHWndTarget = new HandleRef(null, handle);
   SendMessage(hrefHWndTarget, WM_SETTEXT, IntPtr.Zero, "newButtonText");

oraz

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern bool SetWindowText(IntPtr hWnd, string txt);

   SetWindowText(parent, "test");

Podglądając właściwości przez Spy++ widzę że wartość się zapisała

screenshot-20170116161532.png

Jednak tekst przycisku na formatce się nie zmienia.

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0