Beiträge von SEuBo

    ich versuche nun schon lange festzustellen ob alle Fenster minimiert sind und der Desktop sichtbar ist.
    Ich komme aber zu keiner Lösung.


    Alle Fenster minimiert, und der Desktop komplett sichtbar - oder nicht alle Fenster maximiert, und der Desktop (zumindest zu einem minimalen Teil) sichtbar?

    Hab dein Script mal bissl abgeändert und komme so nur auf 1/6 der Zeit


    Das könnte daran liegen, dass du das BitBlt jetzt nicht mehr mit Berücksichtigst ;-)


    Die Struct auszulagern, war eigentlich keine schlechte Idee - komme jetzt mit meiner Kröte von Laptop (Früher war er mal schnell :D) auf durchschnittlich 120 ms.
    Außerdem scheint auch der Funktionsaufruf von _ScreenGetPixel_2_GetPixel() (~120 ms) im Gegensatz zum direkten Aufruf von DLLStructGetData() (~60ms) einiges an Zeit zu fressen.
    Auf den kann ich aber eigentlich nicht verzichten - da das ganze eine UDF werden sollte, falls jemand sowas mal braucht, sollte es auch komfortabel gehalten sein.


    Aber vielen vielen Dank für die Mühe Andy. Du hast mir schonmal ein ganzes Stück weitergeholfen - habe das ganze jetzt so, und ich denke mal, ich werde es so lassen:

    Das schaut ja sehr gut aus. Liegt das tatsächlich nur an meinem Rechner? Ich bekomme nämlich


    Das ist schonmal einen Zacken besser, aber immer noch viel zu langsam. o.o
    Was ist dein Ergebnis, wenn du den neuen Code (Startpost) durchlaufen lässt?

    Hallo,


    Ich habe folgendes Problem: Ich möchte eine Reihe von Pixelfarben in einem beliebigen DC auslesen. Das ganze soll aber ohne die API-Funktion 'GetPixel' funktionieren:
    Mein Plan war es, den Inhalt des DC in eine HBitmap zu BitBlt'en. Das funktioniert auch super.


    Allerdings komme ich dann nur an die rohen Farbdaten, wenn ich diese entweder mit Hilfe von
    - LockBits() (was vorher eine Umwandlung der HBitmap in ein GDI+-Bitmap-Objekt erfordern würde),
    - oder CreateDIBSection auslese.


    BitmapLockBits ist für mich ein alter Hut - mich stört lediglich die unnötige Verschwendung von Performance, da die Bitmap-Bits erst in einen Buffer kopiert werden - weswegen ich mich für CreateDIBSection entschieden habe. Laut MSDN wird hier direkter zugriff auf die DIBits ermöglicht. Klingt ja sehr performant!


    Jetzt kommen wir zum eigentlichen Problem:
    Bei der Verwendung von CreateDIBSection ist BitBlt extrem(!) langsam - mehrere hundert millisekunden (600+ ms) ist für mich absolut nicht tragbar. Kann mir jemand sagen, warum die performance hier so mies ist? Oder am besten mit einem Verbesserungsvorschlag um die Ecke kommen? Mir ist ja bewusst, dass BitBlt hier eventuell einige kleine Konversionen durchführen muss, aber die DC's sind doch untereinander kompatibel und die DIB hat die gleiche Farbtiefe, wie der Screen-DC. Ich versteh's nicht.
    /Edit: Neuer, Kommentierter Code.



    Alter Code, den ich ursprünglich gepostet hatte:


    Gruß, SEuBo

    Ist es also möglich, nur ab einem bestimmten Codeteil Adminrechte anzufordern?


    Einfach in ein neues Script auslagern. Das geht sogar zur Laufzeit.

    Worauf verweist nun dieser RequestHandle?


    Dieser Request-Handle ist ein sogenannter hInternet-Handle. Und ja, es gibt mit Sicherheit eine Möglichkeit, diese Request Headers auszulesen. Nur ist das von Microsoft wohl nicht vorgesehen, und deswegen auch nicht über die integrierten Funktionen der WinHTTP API zu lösen. Die Möglichkeit, einen Sniffer zu verwenden ist mit Sicherheit die unkomplizierteste ;-)

    Ein Request ist die Antwort des Servers.


    Eine RESPONSE ist die Antwort des Servers!


    Ich will aber irgendwie die Headers der Anfrage auslesen.


    WinHTTP-Intern kenne ich dafür keine Möglichkeit.
    Mein Tipp: Benutze einen HTTP/HTTPS-Sniffer, wie "Fiddler2" dafür, damit funktioniert es problemlos. Du darfst nur nicht vergessen, den WinHTTP-Traffic über Fiddler zu leiten, also Fiddler als Proxy für WinHTTP zu setzen. ( Standardmäßig nutzt Fiddler glaube ich 127.0.0.1:8888 )

    Niemals einen Variablennamen zweimal verwenden. Das erspart viel Fehlersuche. Einzige Doppel, die Sinn machen sind z.B. $sRead, $sTmp etc. - also Variablen die nur kurzzeitig belegt werden und da ist eine Beschreibung überflüssig.


    Also ich verwende oft gleiche Variablennamen - eben bei den von dir angesprochenen Fällen. Da gibt's aber nicht nur $sRead und sTmp, sondern auch $sString, $aArray, $aReturn, $sReturn, $hDC, $hBitmap, $hHBitmap, $aSplit, $iCount, $hWnd, $sTitle, usw usw.. Ich persönlich, fänd's sinnvoll - ob du das einbaust oder nicht, bleibt dir überlassen. Es war nur eine Idee.


    Sorry, aber da stehe ich auf dem Schlauch. Was um Himmels Willen ist ein "L-Wert"?


    Der L-Wert ist der Wert auf der linken Seite einer Zuweisung. $L_Wert = $R_Wert
    http://de.wikipedia.org/wiki/V…_und_R-Wert_von_Variablen

    Hallo BugFix,


    Was ist mit verschiedenen Gültigkeitsbereichen? Die werden wahrscheinlich nicht beachtet, oder? Wäre doch eventuell praktisch: Man könnte Variablen mit gleichem Namen in unterschiedlichen Funktionen unterschiedliche "Tipps" zuweisen.


    Auch würde es Schreibarbeit ersparen, wenn man zum Beispiel mit einem einfachen ;@ [TIPP] die zuletzt als L-Wert verwendete Variable mit einem Tipp versehen könnte.


    $Variable1 = 245
    ;@ Das ist der Tip für $Variable 1
    ConsoleWrite($Variable & @CRLF)
    $Variable2 = StringLeft($Variable1,2)
    ConsoleWrite($Variable & @CRLF)
    ;@ Hier kommt noch der Tipp für $Variable2


    Gruß

    #include <ie.au3>


    ;$oIE = _IECreate("http://www.google.de")
    $oIE = _IECreate("http://translate.google.de/?hl=de&tab=TT#de|en|Taste")
    _IELoadWait($oIE)
    Sleep(3000)


    _IEAction($oIE,'selectall')
    _IEAction($oIE,'copy')
    _IEAction($oIE,'unselect')


    _IEQuit($oIE)


    Func test()
    Local Static $iOnOff = 0
    $iOnOff = 1 - $iOnOff ; Bei jedem Funktionsaufruf, wechselt $iOnOff seinen Wert: 0, 1, 0, 1, 0, 1 usw.


    ; (Ist das gleiche wie..)
    ; If $iOnOff = 1 Then
    ; $iOnOff = 0
    ; Else
    ; $iOnOff = 1
    ; EndIf



    If $iOnOff = 1 Then
    HotKeySet("{Numpad0}", "num0")
    HotKeySet("{Numpad1}", "num1")
    HotKeySet("{Numpad2}", "num2")
    HotKeySet("{Numpad3}", "num3")
    HotKeySet("{Numpad4}", "num4")
    HotKeySet("{Numpad5}", "num5")
    HotKeySet("{Numpad6}", "num6")
    HotKeySet("{Numpad7}", "num7")
    HotKeySet("{Numpad8}", "num8")
    HotKeySet("{Numpad9}", "num9")
    HotKeySet("{^}", "unbekannt")
    HotKeySet("0", "die0")
    Else
    HotKeySet("{Numpad0}", "")
    HotKeySet("{Numpad1}", "")
    HotKeySet("{Numpad2}", "")
    HotKeySet("{Numpad3}", "")
    HotKeySet("{Numpad4}", "")
    HotKeySet("{Numpad5}", "")
    HotKeySet("{Numpad6}", "")
    HotKeySet("{Numpad7}", "")
    HotKeySet("{Numpad8}", "")
    HotKeySet("{Numpad9}", "")
    HotKeySet("{^}", "")
    HotKeySet("0", "")
    EndFunc ;


    (PS: Mir ging's jetzt nicht darum, das in möglichst wenig zeilen unterzubringen.

    ; ScreenCapture.au3
    Local $aCursor = _WinAPI_GetCursorInfo()
    If $aCursor[1] Then
    Local $hIcon = _WinAPI_CopyIcon($aCursor[2])
    Local $aIcon = _WinAPI_GetIconInfo($hIcon)
    _WinAPI_DeleteObject($aIcon[4]) ; delete bitmap mask return by _WinAPI_GetIconInfo()
    _WinAPI_DrawIcon($hCDC, $aCursor[3] - $aIcon[2] - $iLeft, $aCursor[4] - $aIcon[3] - $iTop, $hIcon)
    _WinAPI_DestroyIcon($hIcon)
    EndIf

    Hatte dafür auch mal ne Funktion geschrieben... Wem sie nützt...

    Super Sache!


    Leider "ruckeln" die Fenster noch ein wenig, das sliden müsste etwas sanfter geschehen, dann wäre es optimal
    (oder ist das nur auf meinem Berufsschul-PC so ruckelig?)


    Aber, entschuldige SEuBo, fand ich die Lösung ... kompliziert.


    Ging mir ähnlich - deswegen hatte ich vor ewiger Zeit mal das hier gemacht
    WinSlide UDF


    Trotzdem schönes Script, und feine Umsetzung :)

    Es geht auch einfach mit StringReplace. Wenn € da ist, dann wird es eben ersetzt. Wenn nicht, dann nicht.
    ConsoleWrite(StringReplace("5,49 €", " €", "") & @CRLF)
    RegExp ist an der Stelle fast schon ein wenig "overpowered". (Unglaublich, dass ich das mal sage...)

    GUISwitch($pgctrl_tabs, $tab_pcinf) -> GUISwitch($hGui, $tab_pcinf)


    und ans Ende der Funktion noch:

    GUICtrlSendMsg($pgctrl_tabs, 0x1330, 1, 0) ; $TCM_SETCURFOCUS = 0x1330
    GUICtrlSendMsg($pgctrl_tabs, 0x1330, 0, 0) ; $TCM_SETCURFOCUS = 0x1330


    Wobei die letzten beiden Zeilen bestimmt auch eleganter gehen

    Nur noch mal der vollständigkeit halber:
    Wenn man viele solcher Variablen irgendwo einfügen muss, empfiehlt sich meiner bescheidenen Meinung nach StringFormat():
    Ich denke, statt diesem hier
    MsgBox(0,'',$sName & '|' & $sTyp & '|' & $sSonstiges)
    ist folgende Schreibweise etwas übersichtlicher
    MsgBox(0, '', StringFormat('%s|%s|%s', $sName, $sTyp, $sSonstiges))


    Ab einer bestimmten Länge und Komplexität, wird dieses "'text' & $variable & 'text'-Gebilde" nämlich wirklich unleserlich.