Beiträge von Lenny

    Hallo!


    Vielen Dank, habe es nun so gemacht:


    #include <ScreenCapture.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>


    Opt("WinTitleMatchMode", 1)
    Opt("GUIOnEventMode", 1)
    HotKeySet("^b", "_get")




    #region ### START Koda GUI section ### Form=
    $hForm = GUICreate("", 169, 54, 192, 124, 0)
    GUISetCursor(3);
    #endregion ### END Koda GUI section ###


    GUISetOnEvent($GUI_EVENT_CLOSE, "close", $hForm)



    ;Global $mTempPos[2]
    $winHandle = WinGetHandle("")
    If $winHandle = 0 Then Exit
    $winPos = WinGetPos("")
    If $winPos = 0 Then Exit
    WinMove($hForm, "", "", "", $winPos[2], $winPos[3])
    _GDIPlus_Startup();
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hForm)
    $hRectBrush = _GDIPlus_BrushCreateSolid(0x33FF0000)
    $hSImage = 0
    Global $hBitmap = 0;


    While 1
    If WinActive($hForm) Then
    If $hSImage[1] <> 0 Then
    If (_IsPressed(01)) Then
    $mPos = MouseGetPos();
    $mTempPos = $mPos;


    While (_IsPressed(01))
    $mNewPos = MouseGetPos()
    If ($mNewPos[0] <> $mTempPos[0] Or $mNewPos[1] <> $mTempPos[1]) Then
    _GDIPlus_GraphicsDrawImage($hGraphic, $hSImage[1], 0, 0)
    _GDIPlus_GraphicsFillRect($hGraphic, $mPos[0], $mPos[1], $mNewPos[0] - $mPos[0], $mNewPos[1] - $mPos[1], $hRectBrush)


    EndIf
    $mTempPos = $mNewPos
    If _IsPressed(02) Then
    $hClone = _GDIPlus_BitmapCloneArea($hSImage[1], $mPos[0], $mPos[1], $mNewPos[0] - $mPos[0], $mNewPos[1] - $mPos[1])
    _GDIPlus_ImageSaveToFile($hClone, @ScriptDir & "/SCR/scr_" & @HOUR & @MIN & @SEC & @MDAY & @MON & @YEAR & ".jpg")
    _GDIPlus_BitmapDispose($hClone)
    _WinAPI_DeleteObject($hSImage[0])
    GUISetState(@SW_HIDE, $hForm)
    ExitLoop
    EndIf
    WEnd


    ElseIf _IsPressed(02) Then
    _WinAPI_DeleteObject($hSImage[0])
    GUISetState(@SW_HIDE, $hForm)
    EndIf
    Sleep(50)
    EndIf
    EndIf
    WEnd


    Func close()
    _GDIPlus_BitmapDispose($hClone)
    _WinAPI_DeleteObject($hSImage[0])
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BrushDispose($hRectBrush)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>close


    Func _takeScreen()
    Dim $hHandles[2]
    $hHandles[0] = _ScreenCapture_CaptureWnd("", $winHandle)
    $hHandles[1] = _GDIPlus_BitmapCreateFromHBITMAP($hHandles[0])
    GUISetState(@SW_SHOW, $hForm)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hHandles[1], 0, 0)
    Return ($hHandles)
    EndFunc ;==>_takeScreen


    Func _get()
    $hSImage = _takeScreen()
    EndFunc ;==>_get


    Grüße,
    Lenny

    Guten Abend euch allen!


    Ich versuche gerade aus einem Bild einen Bereich mit Hilfe von GDI+ herauszuschneiden. Das Bild wird auf die GUI gemalt. Dann sollte ein Bereich auswählbar sein (Links Klick + Ziehen) und wenn die Maus losgelassen wird dieser gespeichert werden. Leider weiß ich nicht wie man ein zuvor gemaltes Rechteck wieder entfernen kann, sodass immer ein neues halbtransparentes überlagernd Gezeichnet wird - Folge ist, dass man nicht mehr sieht was man auswählt.


    Hat jemand vielleicht eine Idee, wie ich dieses Problem lösen kann? Ich habe das Rechteck mit GDI+ und nicht mit Hilfe einer zweiten GUI gemacht, da ich dies als schöner Emfinde.


    Hier erstmal der Code:


    #cs ----------------------------------------------------------------------------


    AutoIt Version: 3.3.6.1
    Author: myName


    Script Function:
    Template AutoIt script.


    #ce ----------------------------------------------------------------------------


    ; Script Start - Add your code below here
    #include <ScreenCapture.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>


    Opt("WinTitleMatchMode", 1)
    Opt("GUIOnEventMode", 1)
    HotKeySet("^b", "_get")




    #region ### START Koda GUI section ### Form=
    $hForm = GUICreate("", 169, 54, 192, 124, 0)
    GUISetCursor(3);
    #endregion ### END Koda GUI section ###


    GUISetOnEvent($GUI_EVENT_CLOSE, "close", $hForm)


    ;Global $mTempPos[2]
    $winHandle = WinGetHandle("")
    If $winHandle = 0 Then Exit
    $winPos = WinGetPos("")
    If $winPos = 0 Then Exit
    WinMove($hForm, "", "", "", $winPos[2], $winPos[3])
    _GDIPlus_Startup();
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hForm)
    $hRectBrush = _GDIPlus_BrushCreateSolid(0x33FF0000)
    $hDelBrush = _GDIPlus_BrushCreateSolid(0x00FFFFFF)


    While 1
    If WinActive($hForm) Then
    If (_IsPressed(01)) Then
    $mPos = MouseGetPos();
    $mTempPos = $mPos;
    $hGraphicRec = _GDIPlus_GraphicsCreateFromHWND($hForm)


    While (_IsPressed(01))
    $mNewPos = MouseGetPos()
    If ($mNewPos[0] <> $mTempPos[0] Or $mNewPos[1] <> $mTempPos[1]) Then
    _GDIPlus_GraphicsFillRect($hGraphicRec, $mPos[0],$mPos[1],$mNewPos[0]-$mPos[0],$mNewPos[1]-$mPos[1], $hRectBrush)
    EndIf
    $mTempPos = $mNewPos
    WEnd

    ElseIf _IsPressed(02) Then
    GUISetState(@SW_HIDE, $hForm)
    EndIf
    Sleep(50)
    EndIf
    WEnd


    Func close()
    Exit
    EndFunc ;==>close


    Func _takeScreen()
    $hBitmap = _ScreenCapture_CaptureWnd("", $winHandle)
    $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    GUISetState(@SW_SHOW, $hForm)
    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)
    Return (1)
    EndFunc ;==>_takeScreen


    Func _get()
    _takeScreen()
    EndFunc ;==>_getBot



    Und weiß jemand wie ich aus meinem Ursprungsbild den ausgewählten Bereich herausschneiden und speichern kann?


    Ich freue mich über jede Antwort!


    Vielen Dank im Voraus und viele Grüße,


    Lennart

    Spannend wäre zu wissen, was zwischen <a id=xxx> und </a>


    Warscheinlich wird dort ein Text stehen, bzw. eine Zeile, wie der Link dann auch im Browser dargestellt wird.


    Unter dieser Voraussetzung würde dann: _IELinkClickByText funktionieren.


    Grüße,


    Lenny

    Guck mal in die Hilfe und gibt _Sound ein.


    _SoundClose ( $aSnd_id )
    _SoundLength ( $aSnd_id [, $iMode ] )
    _SoundOpen ( $sFile )
    _SoundPause ( $aSnd_id )
    _SoundPlay ( $aSnd_id [, $iWait ] )
    _SoundPos ( $aSnd_id [, $iMode ] )
    _SoundResume ( $aSnd_id )
    _SoundSeek (ByRef $aSnd_id, $iHour, $iMin, $iSec )
    _SoundStatus ( $aSnd_id )
    _SoundStop (ByRef $aSnd_id )


    lG, Lenny

    Hey!


    Wenn ich _GUICtrlListView_SimpleSort ($hListView, $variable, GUICtrlGetState($hListView)) weglasse, funktioniert es bei mir. Aber komisch finde ich das schon.


    lG,


    Lenny

    Bei meinem Script kommt nur keine MsgBox, wenn du keine Rechenart auswählst. Du musst in die Liste klicken, damit die rechenart, die aktuell angezeigt wird, auch verwendet werden kann.
    Das hat raupi in seinem Script ein bisschen schlauer gemacht. Bei ihm ist das "+" schon zu beginn ausgewählt, was auch erklärt, dass du in Raupi's Script zumindest "+" rechnen kannst.


    Dein Problem ist, dass du zwar in der ListBox rumscrollst, aber letzendlich garkeine Rechenart auswählst.

    Hallo.


    Du darfst in $listbox nicht noch das Ergebnis von GuiCtrlSetData speichern, weil du dann das Handle deiner Listbox überschreibst und somit mit ihr nichts mehr machen kannst.


    Den Rest würde ich so machen:


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>
    Dim $listbox
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 77, 192, 124)
    $Input1 = GUICtrlCreateInput("10", 24, 24, 153, 21)
    $listbox = GUICtrlCreateList("", 216, 24, 97, 19)
    GUICtrlSetData(-1, "+|-|/|*")
    $Input2 = GUICtrlCreateInput("10", 336, 24, 129, 21)
    $Button1 = GUICtrlCreateButton("=", 488, 24, 49, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
    _berechnen()
    Case $GUI_EVENT_CLOSE
    Exit


    EndSwitch
    WEnd


    Func _berechnen()
    $Art = GUICtrlRead($listbox)
    If $Art <> "" Then
    $Zahl1 = GUICtrlRead($Input1)
    $Zahl2 = GUICtrlRead($Input2)
    $erg = Execute($Input1 & $Art & $Input2)
    MsgBox(0, "", $erg)
    EndIf
    EndFunc ;==>_berechnen

    Zitat

    Den Rechten Button "Icon auswählen" würde ich noch um 1px nach rechts schieben. :P

    Ich glaube lieber nach links ;)


    Edit: Ups, ich hab auf den "Programm Wählen" Button geachtet :rolleyes:

    Zitat

    Schönes Script.
    Du könntest ja noch eine HotKey Tastenabfrage machen, denn ich benutz meine Mittlere Maustaste oft, und was anderen wäre vllt. besser.

    Jap das wäre schön, denn ich hab keine mittlere Maustaste ;)


    Ich habe mir das ganze aber mal angeschaut, kann nur sagen, das es wirklich sehr sehr gut aussieht :!: Das mit den Icons ist wirlich sehr schick!

    Ich denke er meinte:



    MsgBox(64, 0, _readLineFromBack('test2.txt', 2))


    Func _readLineFromBack($filepath, $nr = 0)
    Local $aSplit = StringSplit(StringStripCR(FileRead($filepath)), @LF)
    If IsArray($aSplit) Then Return $aSplit[$aSplit[0] - $nr]
    Return -1
    EndFunc ;==>_readLastLine



















    Func _Download($aFunc_Array = "")
    $Result = ""
    For $i2 = 0 To _GUICtrlListView_GetItemCount($pListView) - 1
    If _GUICtrlListView_GetItemChecked($pListView, $i2) Then ; wenn angehakt dann
    $sFileName1 = StringTrimLeft($aFunc_Array[$i2][4], StringInStr($aFunc_Array[$i2][4], "/", 1, -1));Der Dateiname des downlaods
    $sFileName2 = StringTrimLeft($aFunc_Array[$i2][5], StringInStr($aFunc_Array[$i2][5], "/", 1, -1));Der Dateiname des downlaods
    $string1 = StringStripWS($aFunc_Array[$i2][4], 8)
    $Result &= $string1 & @CRLF
    $string2 = StringStripWS(@ProgramFilesDir & '\oci\programmdateien\anleitungen\' & $sFileName1, 8)
    $Result &= $string2 & @CRLF
    HttpSetUserAgent("Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB6 (.NET CLR 2.0.50727)") ; User-Agent (Header) von AutoIt3 ändern, da beim Webhoster dieser gesperrt ist
    InetGet($string1, $string2, 1, 0);Datei wird gedownloadet
    If @error Then
    $Result &= "InetGet Error:" & @CRLF
    MsgBox(0, "Fehler", "Fehler beim 1. Download" & @CRLF)
    EndIf
    ;InetGet("http://oci.blpaced.net/1.jpg", "F:\1-1.jpg")


    ;InetGet($aFunc_Array[$i2][5], @ProgramFilesDir & '\oci\programmdateien\extra\' & $sFileName2,1,0) ;Datei wird gedownloadet
    ;If @error Then ConsoleWrite("Fehler beim 1. Download" & @CRLF)
    ClipPut($Result)
    MsgBox(0, "Quellpfad 1", $string1)
    MsgBox(0, "Quellpfad 2", $string2)


    ;$aFunc_Array[$i2][7]=InetGetSize($aFunc_Array[$i2][5])
    ;$aFunc_Array[$i2][8]=InetGetSize($aFunc_Array[$i2][6])
    ; ConsoleWrite('--' & @ProgramFilesDir & '\oci\programmdateien\anleitungen\' & $sFileName1 & '<<' & @CRLF)
    ; ConsoleWrite('--' & '"' & @ProgramFilesDir & '\oci\programmdateien\anleitungen\' & $sFileName1 & '"' & '<<' & @CRLF)


    EndIf
    Next ;= > weiter mit For


    EndFunc ;==>_Download


    Du kannst die Func ja mal genauso ausführen, und das Ergebnis (das in deiner Zwischenablage liegt) hier posten, bzw in dein Alten Post reineditieren!

    Hallo!


    Dann lass doch entweder StringStripWS ( "string", flag ) drüber laufen, oder prüfe ob am Anfang oder am Ende ein leerzeichen steht:


    If StringLeft($URL, 1) = " " Then StringTrimLeft($URL, 1)
    If StringRight($URL, 1) = " " Then StringTrimRight($URL,1)


    Oder versuch dich an StringRegExpReplace, damit kannst du prüfen ob am Anfang oder Ende mehrere Leerzeichen stehen, und diese ersetzen.


    Wenn ich gleich Zeit hab kann ich dir die Exp auch machen (Ich muss grade mal Mittag essen :P)


    lG,
    Lenny

    $test = "test | http://www.autoit.de| lol | xD"
    ;~ $test = " haha xD| lol | xD"


    $string = StringInStr($test, "www.")


    _button($test, 2)


    Func _button($text, $zeile)
    $string = StringSplit($text, "|")
    ConsoleWrite($string[$zeile])
    $instr = StringInStr($string[$zeile], "www.")
    ConsoleWrite($instr)
    If Not $instr Then
    MsgBox(0, "", $string[$zeile])
    Else
    ShellExecute(StringStripWS($string[$zeile], 8))
    EndIf
    EndFunc ;==>_button