Diskussionen etc. zu Snippets

  • let WndID = GetIDByWindow(hWnd)

    Das passiert, wenn man das Bsp. nicht testet: 8o

    Code
    {
    ...
    "severity": 8,
    "message": "redefinition of 'WndID'; previous declaration here: c:\\Users\\ghost\\NIM\\@BugFix\\GetIDByWindow.nim(6, 3)\r\n\r\n",
    ...
    }


    Tags: <Process ID>, <PID>, <Thread ID>

  • BugFix

    Hat das Label Nim hinzugefügt
  • Das ist Absicht. In vielen Fällen meckert der Compiler, wenn du den Rückgabewert einer Funktion nicht auffängst. Deshalb habe ich mir das so angenommen.

    Ich habe es hin bekommen... er meckert nicht mehr... und die Ausgabe formatiert... passt allerdings nicht alles in eine Zeile, deshalb habe ich es auf drei umgebrochen.

    Diese Funktion holt aber wohl alle Windows, auch die Childs bzw. Controls... daran erkennbar, weil etliche Windows dieselbe PID/TID haben.

    2 Mal editiert, zuletzt von Bitnugger () aus folgendem Grund: TITLE und CLASSNAME waren bei der Ausgabe vertauscht... habe es korrigiert.

  • Diese Funktion holt aber wohl alle Windows, auch die Childs bzw. Controls... daran erkennbar, weil etliche Windows dieselbe PID/TID haben.

    Laut MSDN:

    Zitat

    EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.

    Ich habe testweise den DLL-Aufruf nochmal selbst in einer Funktion erstellt - liefert dieselbe Anzahl. Vielleicht verwendet die AutoIt Funktion stattdessen EnumDesktopWindows. Allerdings braucht diese Funktion ein Desktop Handle. Habe ich mir noch nicht weiter angesehen.

    EDIT:

    Habe es mal getestet. Alle mit EnumWindows gefundenen Fenster verwenden dasselbe Desktop-Handle, somit wird EnumDesktopWindows dasselbe Ergebnis liefern.


    EDIT2:

    Ich habe mal noch gefiltert:

    - Parent muss "0" sein

    - Fenster muss Titel haben

    Das schmilzt die Sache deutlich zusammen.



    Ich habe es hin bekommen... er meckert nicht mehr

    :Face:Habe ich schon so oft in den Beschreibungen gelesen: "must be discarded". Einfach auch mal dran denken. ^^

  • Mit AutoIt: 212

    Mit Nim: 897


    Vielleicht verwendet die AutoIt Funktion stattdessen EnumDesktopWindows.

    _WinAPI_GetDesktopWindow() und dann __WinAPI_EnumWindowsChild... ===>>> _WinAPI_GetWindow / [_WinAPI_IsWindowVisible] / _WinAPI_GetWindow ...ist klar, sind ja alle Childs des Desktops...


    Mit Nim kannst du die aber sicher auch filtern...