[Window] visible class



  • hi,

    ich habe ein mainwindow mit 10 subwindows. und ich möchte diese 10 subwindows filtern. Dh wenn ein bestimmter button visible ist soll das fenster sich maximieren, wenn der button nicht visible ist soll sich das fenster minimieren.

    folgenden code habe ich geschrieben :

    IntPtr hWnd = FindWindow("#32770", null);
            while (hWnd != IntPtr.Zero)
                {
    
                    ////////////////////////////////////////////Liegt hier der fehler?
                    IntPtr hButton = FindWindowEx(hWnd, IntPtr.Zero, "AfxWnd90u21", null);
    
                      if (hButton != IntPtr.Zero)
                    {
                    windows.Add(new WinText() { hWnd = hWnd });
    
                    }
                    //find the next window
                    hWnd = FindWindowEx(IntPtr.Zero, hWnd, "#32770", null);
                }
    

    #32770 ist die class vom mainwindow AfxWnd90u ist die class vom button und 21 ist die instanz.

    Mein Proejekt habe ich bereits in autoit geschrieben und es funktioniert mit meinen genannten klassen.

    Nur bekomme ich es in c sharp nicht hin. Ich denke der fehler liegt bei der instanz ?

    ich habe den selben code mit "notepad"(#32770) und "edit"(AfxWnd90u21) getestet und dort funktioniert er. das einzige was sich unterscheidet ist das ich beim notpad keine instanz habe, sonder nur zb Edit.

    hoffe ihr könnt mir helfen,

    danke



  • Wenns hart auf hart kommt gehn die Harten in den Garten...
    Oder anders ausgedrückt: Wenn du es in AutoIt hinbekommen hast, dann bleib dabei... es gibt AutoItX, welches du in .NET als Verweis hinzufügen und dann die AutoIt-Funktionen nutzen kannst 🙂



  • Karill schrieb:

    Wenns hart auf hart kommt gehn die Harten in den Garten...
    Oder anders ausgedrückt: Wenn du es in AutoIt hinbekommen hast, dann bleib dabei... es gibt AutoItX, welches du in .NET als Verweis hinzufügen und dann die AutoIt-Funktionen nutzen kannst 🙂

    hey danke für den tipp,

    bin mir nicht sicher ob ich einen neuen thread aufmachen soll oder nicht.

    aufjedenfall habe ich ein problem mit autoitX

    autoit code :

    Func Refresh()
                $WinList = WinList("[CLASS:#32770]")
        EndFunc
    
        Func StartUp()
                Refresh()
                        For $i = 1 To $WinList[0][0]
                                WinMove($WinList[$i][0], "", 0, 0, 640, 463)
                        Next
    

    kurzle erklärung winlist[0][0] gibt die anzahl der windows an.
    und man kann somit einfach iterieren.
    http://www.autoit.de/dokumentation/functions/WinList.htm

    mein chsarp code.

    static void Main(string[] args)
            {
                AutoItX3 au3 = new AutoItX3();
    
                // finds 10 windows 
                dynamic[,] winlist = au3.WinList("[CLASS:#32770]");
                Console.WriteLine(winlist[1,0]); // geht noch
                 Console.WriteLine(winlist[2,0]); // throws out of index
    
                Console.ReadKey();
    
            }
    

    ich kann allerdings nur max bis winlist[1][0] gehen, obwohl ich 10 windows finde.



  • Hey, bitte für den Tip 😉

    Hm, also wenn in winlist[0,0] der Wert 10 drin steht (Bitte duch Debugging bestätigen (Breakpoint an die Stelle und go ;)) hab ich aktuell keine Ahnung und müsste das mal auch austesten... Weiß ja nich, ob du das schon ausprobiert hattest. Wird in dem AutoIt-Script vllt. noch oben ein Opt() gesetzt, was diese Funktion beeinflusst, was jetzt noch hier in C# fehlen könnte?


Anmelden zum Antworten