Fremdes Fenster auslesen

  • Ihr und euer AutoIt ^^ ich hasse den kram^^


    @andrehaenel dein tool funzt also ich bekomme den text


    und die id hab ich jetzt auch ich teste mal


    magste mir noch verraten wie du das gemacht hast^^
    also die enum id ermitteln^^


    ich habs mit
    int CtrlID = GetDlgCtrlID( hwnd );
    if (CtrlID == 283){...


    versucht aber da bekomme ich den text von i-nem button^^

  • Die Methoden:
    [cs][DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);


    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    internal static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);


    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool EnumChildWindows(IntPtr window, EnumWindowProc callback, IntPtr i);


    public delegate bool EnumWindowProc(IntPtr hWnd, IntPtr parameter);


    public static List<IntPtr> GetChildWindows(IntPtr parent)
    {
    List<IntPtr> result = new List<IntPtr>();
    GCHandle listHandle = GCHandle.Alloc(result);
    try
    {
    EnumWindowProc childProc = new EnumWindowProc(EnumWindow);
    EnumChildWindows(parent, childProc, GCHandle.ToIntPtr(listHandle));
    }
    finally
    {
    if (listHandle.IsAllocated)
    listHandle.Free();
    }
    return result;
    }


    private static bool EnumWindow(IntPtr handle, IntPtr pointer)
    {
    GCHandle gch = GCHandle.FromIntPtr(pointer);
    List<IntPtr> list = gch.Target as List<IntPtr>;
    if (list == null)
    {
    throw new InvalidCastException("GCHandle Target could not be cast as List<IntPtr>");
    }
    list.Add(handle);
    return true;
    }


    const uint WM_GETTEXT = 0x0D;
    const uint WM_GETTEXTLENGTH = 0x0E;


    public static string GetControlText(IntPtr hWnd)
    {
    int length = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0);


    StringBuilder buffer = new StringBuilder(length + 1);


    SendMessage(hWnd, 0x0d, buffer.Capacity, buffer);


    return buffer.ToString();
    }[/cs]


    und der Aufruf:
    [cs]List<IntPtr> childList = GetChildWindows(new IntPtr(Convert.ToInt32(textBox1.Text)));
    textBox4.Text = GetControlText(childList[EnumID]);[/cs]

  • also ich scheitere absolut daran das alles aufzulisten also in ne liste oder nen array zu packen....


    ich habs mit nem char pointer array und vector versucht mit strings und so weiter....


    das wird i-wie nix....



    Edit: hier der aktuelle versuch


  • Push: wusa ich habs^^


    Also Fehler numero uno.... man erhält den Goldwert nur über die Methode mit SendMessage... GetWindowText workt da nicht...
    Fehler 2 bei meinem doppel vector ( vector < vector <char*> > list; ) hatte ich vergessen das ich ja noch einen vector der einen char pointer als variablentyp erwartet in den ersten vector zu pushen.... somit habe ich ja einen vector slot über list[id].push_back(pointer); angesprochen der noch gar kein vector beinhaltete....


    so für alle jetzt hier der Code


    Ich lese nun aus allen offenen ibot fenstern den Goldwert aus




    Ich hoffe es kann einigen helfen


    MfG Sick^