1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Bitnugger

Beiträge von Bitnugger

  • Löschen - einfach so- ja wohl schon?

    • Bitnugger
    • 25. November 2017 um 13:11
    Zitat von Musashi

    Im Ablauf kommt es aber zu Fehlern

    Nein... nicht wirklich, denn das Script macht genau das, was es soll. ,-)

    Zitat von Musashi

    Am Ende des Skriptes (innerhalb von Notepad) wird folgendes angezeigt :

    Ja, dies passiert durch Zeile 35-37 im Script... womit ich zeigen wollte, das du selbst Daten an die geöffnete Datei anhängen darfst... jedoch nicht innerhalb des gelockten Bereich schreiben kannst... was in Zeile 31-32 passiert.

    Zitat von Musashi

    Außerdem gibt es ganz am Ende auch noch ein Sonderzeichen

    Das passiert durch Zeile 36... weil dort die Position im File 1 Byte hinter das Ende des Files gesetzt wird und das "übersprungene" Byte dann als Chr(0) gespeichert wird. Allerdings wird das FileWrite in Zeile 28 ausgeführt und noch eine Zeile an die Datei angehangen... bevor notepad die Datei öffnen kann... weshalb das Null-Byte dann hinter dieser Zeile geschrieben wird. Wenn du das Chr(0) nicht magst, setzt du als Parameter für das FileSetPos in Zeile 36 einfach anstelle einer 1 eine 0. ;)

    Zitat von Musashi

    so ist der Code am Ende auch gespeichert

    Tja, das liegt wohl daran, dass ich als Dateiname @ScriptFullPath verwendet habe. 8)

    Zitat von Musashi

    erneutes Laden und Build führt zu Fehlern

    Würde mich auch schwer wunden, wenn dem nicht so währe... sehr gewundert hat mich aber, wie SciTE darauf reagiert und was passiert, wenn du die noch geöffnete Datei in notepad änderst und dann speichern willst!

  • Löschen - einfach so- ja wohl schon?

    • Bitnugger
    • 25. November 2017 um 01:12

    Hier noch ein sehr schönes Beispiel... 8o

    LockFile 2.0 ;-)
    AutoIt
    ;-- TIME_STAMP   2017-11-25 01:09:42   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WinAPI.au3>
    #include <WinAPIFiles.au3>
    #EndRegion ;************ Includes ************
    
    If Not HotKeySet('{ESC}', '_Exit') Then Exit 1
    
    Global $g_bLock = False, $g_hFile, $g_iOffset = 0, $g_iLength = FileGetSize(@ScriptFullPath)
    Global $g_iCreation = $OPEN_EXISTING, $g_iAccess = $GENERIC_READ, $g_iShare = BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE)
    ;~ _WinAPI_CreateFileEx ( $sFilePath, $iCreation [, $iAccess = 0 [, $iShare = 0 [, $iFlagsAndAttributes = 0 [, $tSecurity = 0 [, $hTemplate = 0]]]]] )
    $g_hFile = _WinAPI_CreateFileEx(@ScriptFullPath, $g_iCreation, $g_iAccess, $g_iShare) ; [, $iFlagsAndAttributes = 0 [, $tSecurity = 0 [, $hTemplate = 0]]]]] )
    If $g_hFile = -1 Then Exit -1
    ConsoleWrite('$g_hFile = ' & $g_hFile & @CRLF)
    
    If _WinAPI_LockFile($g_hFile, $g_iOffset, $g_iLength) Then
        ConsoleWrite('! File ist now locked!' & @CRLF & _
            '> Now you can even try to open, change or delete the file ... you will not succeed as long as the lock has not been released! ;-)' & @CRLF & _
            '- Press ESC for UnLock File and Exit!' & @CRLF & @CRLF)
        $g_bLock = True
    
        ; notepad darf die Datei öffnen... aber nichts ändern! ;-)
        Run('notepad.exe ' & @ScriptFullPath)
    
        ; wir selbst dürfen Daten an das Ende des Files anhängen!
        Local $hFile = FileOpen(@ScriptFullPath, $FO_APPEND)
        FileWrite($hFile, "ConsoleWrite('Test' & @CRLF)")
    
        ; aber nicht innerhalb des gelockten Bereichs!
        FileSetPos($hFile, $g_iLength - 100, $FILE_BEGIN)
        Local $iWrite = FileWrite($hFile, @CRLF & @CRLF & "; ########################################################################################################" & @CRLF)
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iWrite --> " & $iWrite & @CRLF & "!@ " & @TAB & "#Error: " & @error & @CRLF)
    
        ; auch erstaunlich, dass FileSetPos die Position in der geöffneten Datei richtig setzt, obwohl Daten angehangen wurden.
        FileSetPos($hFile, 1, $FILE_END)
        Local $iWrite = FileWrite($hFile, @CRLF & @CRLF & "; ********************************************************************************************************" & @CRLF)
        FileClose($hFile)
    
        ; und bitte darauf achten, wie SciTE reagiert, nachdem die Datei geändert wurde!!!
    Else
         ConsoleWrite("File can't locked!" & @CRLF & 'Error: ' & _WinAPI_GetLastError() & @CRLF & 'ErrorMessage: ' & _WinAPI_GetLastErrorMessage() & @CRLF)
        Exit 2
    EndIf
    
    While 1
        Sleep(1000)
    WEnd
    
    Func _Exit()
        If $g_bLock = True Then _WinAPI_UnLockFile($g_hFile, $g_iOffset, $g_iLength)
        ConsoleWrite('File ist unlocked!' & @CRLF)
        _WinAPI_CloseHandle($g_hFile)
    
        ; notepad can open the file! ;-)
        Run('notepad.exe ' & @ScriptFullPath)
        Exit
    EndFunc
    Alles anzeigen
  • Löschen - einfach so- ja wohl schon?

    • Bitnugger
    • 24. November 2017 um 23:28
    Zitat von Musashi

    Was mich allerdings noch etwas irritiert :

    Ops, mein Fehler... das ist noch ein ungewolltes Überbleibsel (hab's korrigiert), da ich es vorher auch mit FileOpen versucht hatte, wo du dann ja in @extended die Länge übergeben bekommst. :saint:
    Da _WinAPI_CreateFileEx erfolgreich ausgeführt werden konnte, ist in @extended demnach eine 0, was für _WinAPI_LockFile dann wohl bedeutet, dass die komplette Datei damit gemeint ist.

    Zitat von Musashi

    Man kann die _WinAPI_... Funktionen wohl nicht mal eben so mit Funktionen wie FileOpen mischen, korrekt ?

    Nein, kannst du nicht... weil AutoIt kein echtes Filehandle bei FileOpen liefert, was für die _WinAPI_... Funktionen aber zwingend erforderlich ist.

  • Process über Basic Control Info finden

    • Bitnugger
    • 24. November 2017 um 19:39
    Zitat von Paul01

    Dafür brauch ich doch aber den Namen von Window oder versteh ich das falsch?

    Parameter

    title Der Titel, das Handle oder die Klasse des Fensters, dessen PID erhalten werden soll. Siehe Erweiterte Fenstertiteldefinition.

    text [optional] Der Text des Fensters, dessen PID erhalten werden soll. Standardwert ist ein Leerstring. Siehe Erweiterte Fenstertextdefinition.

  • Löschen - einfach so- ja wohl schon?

    • Bitnugger
    • 24. November 2017 um 19:29
    Zitat von autoiter

    Eigentlich sehe ich da kein Problem oder Fehler..

    Ein Fehler ist es sicher nicht. Es fehlt lediglich eine Option bei FileOpen, um einen Zugriff von anderen Programmen zu verhinden, solange die Datei geöffnet ist. Wie es geht, habe ich in meinem Beispiel in Post #14 gezeigt.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • Bitnugger
    • 24. November 2017 um 17:55
    Zitat von Oscar

    Der Satz ist falsch oder ich verstehe ihn falsch:

    Ich denke auch, dass die Aussage falsch ist, wobei ich meine, dass die Übersetzung korrekt ist.

    Englisch: A variable declared Const can only be passed to a function using a Const parameter.

    Deutsch: Eine Variable, die als Konstante deklariert wurde, kann nur über einen Const-Parameter an eine Funktion übergeben werden.

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • Bitnugger
    • 24. November 2017 um 16:58

    Korrigierte Stellen/Sätze habe ich grün markiert... und weil bei Satzzeichen sehr schlecht zu erkennen, habe ich diese so markiert.

    Func...Return...EndFunc

    Bemerkungen

    Bei Variablen und Funktionen wird die Groß- und Kleinschreibung ignoriert. Dies bedeutet, dass SomeFunc() das gleiche ist wie SoMEFunC() und umgekehrt.

    Das Schlüsselwort Const ist optional und zeigt an, dass sich der Wert des Parameters während der Ausführung der Funktion nicht ändert. Eine Variable, die als Konstante deklariert wurde, kann nur über einen Const-Parameter an eine Funktion übergeben werden.


    Das Schlüsselwort ByRef zeigt an, dass der Parameter als Referenz zu dem Originalobjekt behandelt werden soll. Standardmäßig wird der Parameter in eine neue Variable kopiert. Jedoch verknüpft ByRef die neue Variable auf den Originalparameter. Es ist zu beachten, dass nicht nur eine benannte Variable als ByRef Parameter übergeben werden kann; unbenannte temporäre Variablen, wie zum Beispiel Rückgabewerte von Funktionen, können genauso als ByRef Parameter übergeben werden. Literale (z. B: "Peter" oder 123) können jedoch nicht als ByRef-Parameter übergeben werden. ByRef ist zu bevorzugen wenn eine Variable große Mengen an Daten beinhaltet, wie zum Beispiel den Inhalt einer Datei. Wird dies nicht getan, so erweist sich das Kopieren aller Daten als Bremsklotz. Ein anderer Vorteil des Übergebens eines Parameters durch ByRef ist, dass wenn die Funktion beabsichtigt den Inhalt des Parameters zu ändern, jegliche Notwendigkeit von Return entällt, da der Wert im Original direkt geändert wird.

    Das Deklarieren von Parametern als ByRef und Const ist nützlich, wenn die große ursprüngliche Variable unverändert bleiben muss, da AutoIt einen Fehler zurückgibt, wenn die Funktion versucht, sie versehentlich zu ändern. Die Reihenfolge der Schlüsselwörter ist nicht wichtig, solange sie sich vor dem Parameter befinden, den sie ändern.

    Komplette Arrays können an Funktionen über- und von ihnen zurückgegeben werden, indem einfach der Arrayname ohne Klammern angegeben wird. Arrays sollten an eine benutzerdefinierte Funktion nur mit dem Schlüsselwort ByRef übergeben werden, da somit das unnötige und langwierige Kopieren der kompletten Daten des Arrays vermieden wird. Es ist zu beachten, dass AutoIt nur einen Array-Parameter kopiert, wenn sich der Inhalt ändert. Dies ist nur der Fall wenn ByRef einen Vorteil bringt, obwohl es zu empfehlen ist, es in allen Fällen zu verwenden.

    Optionale Parameter werden definiert, indem man ihnen einen Standardwert zuweist. Das kann eine globale Variable, ein Makro oder ein Literal sein.
    Optionale Parameter erscheinen immer am Ende der Funktionsdeklaration. Wurde ein Parameter als optional deklariert, müssen alle folgenden Parameter ebenfalls optional sein und Standardwerte erhalten.
    Innerhalb der Funktion kann die Anzahl der beim Aufruf angegebenen Parameter über das Makro @NumParams in Erfahrung gebracht werden. (siehe Beispiel 2)

    Verwenden Sie das Schlüsselwort Return, um die Funktion zu verlassen. Im Gegensatz zu integrierten Funktionen geben benutzerdefinierte Funktionen 0 zurück, sofern kein anderer Rückgabewert angegeben wird. Wird Return mit SetError() verwendet, können @error- und @extended-Werte sowie ein Wert zurückgegeben werden.


    Es ist zu beachten, dass Funktionsdeklarationen nicht innerhalb anderer Funktionsdeklarationen stattfinden dürfen.

  • AutoIt 3.3.14.2 deutsch / englische Hilfe verfügbar - Stand 2017.11.12

    • Bitnugger
    • 24. November 2017 um 15:20

    Dann versuch mal das hier:

    Alternative Informationsdatenströme mit diesem Tool entfernen: https://technet.microsoft.com/de-de/sysinternals/streams.aspx

    Danach sollte es funktionieren...

    Eine Sache ist mir soeben aufgefallen... wenn ich z. b. Hilfe zu "Func" haben will, wird beim ersten Aufruf der Hilfe "ByRef" markiert... drücke ich nochmals F1, dann stimmt es!

  • Löschen - einfach so- ja wohl schon?

    • Bitnugger
    • 24. November 2017 um 13:34
    Zitat von Musashi

    Seltsam, ich hatte natürlich vorher gesucht, aber wenn ich bei Google "Autoit+_WinAPI_LockFile" oder auch "Autoit+WinAPI LockFile" eingebe, kommt bei mir kein autoitscript-Hilfetreffer. Bei "Autoit+_WinAPI_FileInUse" hingegen schon !

    Das Plus-Zeichen wird von Google automatisch eingefügt.

    Du kannst die Suchergebnisse auch stärker eingrenzen, indem du Google einfach sagt, dass du nur Ergebnisse haben willst, die auf AutoIt.de zu finden sind:

    _WinAPI_LockFile site:autoit.de

    _WinAPI_UnLockFile site:autoit.de

    Zitat von Tuxedo

    Aber die Funktion tut nicht das was man erwarten würde . Die Datei wird nicht für jeden Zugriff gesperrt.

    Hier mal eine kleine Demo...

    LockFile
    AutoIt
    ;-- TIME_STAMP   2017-11-24 13:30:30   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WinAPI.au3>
    #include <WinAPIFiles.au3>
    #EndRegion ;************ Includes ************
    
    If Not HotKeySet('{ESC}', '_Exit') Then Exit 1
    
    Global $g_bLock = False, $g_hFile, $g_iOffset = 0, $g_iLength = 0
    ;~ _WinAPI_CreateFileEx ( $sFilePath, $iCreation [, $iAccess = 0 [, $iShare = 0 [, $iFlagsAndAttributes = 0 [, $tSecurity = 0 [, $hTemplate = 0]]]]] )
    Global $iCreation = $OPEN_EXISTING, $iAccess = $GENERIC_READ, $iShare = $FILE_SHARE_DELETE
    $g_hFile = _WinAPI_CreateFileEx(@ScriptFullPath, $iCreation, $iAccess, $iShare) ; [, $iFlagsAndAttributes = 0 [, $tSecurity = 0 [, $hTemplate = 0]]]]] )
    If $g_hFile = -1 Then Exit -1
    ConsoleWrite('$g_hFile = ' & $g_hFile & @CRLF)
    
    If _WinAPI_LockFile($g_hFile, $g_iOffset, $g_iLength) Then
        ConsoleWrite('! File ist now locked!' & @CRLF & _
            '> Now you can even try to open, change or delete the file ... you will not succeed as long as the lock has not been released! ;-)' & @CRLF & _
            '- Press ESC for UnLock File and Exit!' & @CRLF & @CRLF)
        $g_bLock = True
    
        ; notepad can not open the file! ;-)
        Local $iPID = Run('notepad.exe ' & @ScriptFullPath)
    Else
         ConsoleWrite("File can't locked!" & @CRLF & 'Error: ' & _WinAPI_GetLastError() & @CRLF & 'ErrorMessage: ' & _WinAPI_GetLastErrorMessage() & @CRLF)
        Exit 2
    EndIf
    
    While 1
        Sleep(1000)
    WEnd
    
    Func _Exit()
        If $g_bLock = True Then _WinAPI_UnLockFile($g_hFile, $g_iOffset, $g_iLength)
        ConsoleWrite('File ist unlocked!' & @CRLF)
        _WinAPI_CloseHandle($g_hFile)
    
        ; notepad can open the file! ;-)
        Run('notepad.exe ' & @ScriptFullPath)
        Exit
    EndFunc
    Alles anzeigen
  • Shutdown cmd Befehl abrufen

    • Bitnugger
    • 23. November 2017 um 19:16

    Ich hatte auch ein ähnliches Problem mit einem Medion-PC... als Ursache hat sich herausgestellt, dass das Netzteil zu schwach war und sich die Konensatoren (Elkos) zu langsam entladen haben, weil sie falsch dimensioniert waren.

    Ab und dauerte ein Neustart bis zu 15 min... nach einem "Kaltstart" dann aber nur etwa 3 min!

  • _GDIPlus_ImageGetUniqueColors

    • Bitnugger
    • 23. November 2017 um 14:12

    Vielen Dank euch dreien!

    Ich bin immer wieder erstaunt, was mit AutoIt alles machbar ist und wie man die Scripts teilweise bombastisch beschleunigen kann, wenn man die richtigen Mittel einsetzt. :)

  • SciTE Tabs mit Button (X) zum Schließen

    • Bitnugger
    • 23. November 2017 um 04:26

    Alternativ kannst du auch mit der rechten Maustaste auf den Tab klicken und im 'Kontextmenü "Schließen" auswählen.

    Zu dem Thema habe ich etwas gefunden: #1184 Scite: Allow for "close tab" button.

    Frei übersetzt schreibt Neil Hodgson dazu:

    Zitat

    Schließen-Schaltflächen auf Registerkarten nehmen Platz in Anspruch, verringern die mögliche Anzahl von Registerkarten und fügen Unordnung hinzu.


    Wenn jemand optionale (default off) Schließen-Schaltflächen implementieren will, dann würde ich das akzeptieren. Hier gibt es einige Möglichkeiten, ob die geschlossenen Felder nur sichtbar sind oder nur leuchten, wenn die Maus darüber steht und ob sie auf allen Registerkarten (Chrome) oder nur auf dem aktuellen Tab (Firefox) erscheinen.

  • Wo nehme ich die original Icons zum FileCreateShortcut her?

    • Bitnugger
    • 23. November 2017 um 04:09
    Zitat von MikeN

    Leider sind die neuen Aufrufe keine Exe mehr und somit fehlt jeweils ein passendes Icon. Ich weiß, daß ich FileCreateShortcut optional eine Icon-Datei angeben kann, aber leider finde ich die passende dll-Datei in Windows 10 zu den original Icons nicht.

    Schau mal ob du mit meinem Tool im Anhang das passende Icon finden und speichern kannst...

    Zitat von MikeN

    Im Start-Menü gibt es ein "Microsoft Store". Diesen Link kann ich auf den Schreibtisch kopieren und der besitzt auch ein Icon, aber ich kann weder den Pfad zum Programm, noch zum Icon daraus ermitteln. Geht das irgendwie?

    Gute Frage... die ich momentan leider nicht beantworten kann.

    Wenn ich aus dem Startmenü von "Microsoft Store" eine Verknüpfung auf dem Desktop erstelle, wird bei mir allerdings nicht das angezeigte Icon für die Verknüpfung verwendet.

    Dateien

    _ExtractIcons.au3 21,46 kB – 278 Downloads
  • Zahl zum Datum formatieren

    • Bitnugger
    • 22. November 2017 um 16:10

    Oder so... mit nur einem Funktionsaufruf... ;)

    AutoIt
    Local $sTimeStamp = StringFormat('%i%i%i%i%i%i', @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC)
    Local $sDatum = StringRegExpReplace($sTimeStamp, '(\d{4})(\d{2})(\d{2}).+', '$3.$2.$1')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sTimeStamp --> " & $sTimeStamp & @CRLF)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sDatum     --> " & $sDatum & @CRLF)
  • _ScreenCapture_Capture() bei mehreren Bildschirmen

    • Bitnugger
    • 22. November 2017 um 14:40
    Zitat von nnako

    ScreenShot eines klar definierten Bereichs

    Ich kann nicht wirklich nachvollziehen, was du damit meinst.

    Edit: Aaaah, ich denke du willst das hier...

    CaptureWnd mit/ohne Titelleiste und Rahmen oder nur ohne Rahmen rechts/links
    AutoIt
    ;-- TIME_STAMP   2017-11-22 15:37:15   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Misc.au3>
    #Include <WindowsConstants.au3>
    #Include <Process.au3>
    #include <ScreenCapture.au3>
    #EndRegion ;************ Includes ************
    
    Global $g_tStruct = DllStructCreate($tagPOINT) ; Create a structure that defines the point to be checked.
    Global $g_hDll = DllOpen("user32.dll")
    
    _SetHotKey('^{F12}', '_Screenshot') ;__ Ctrl + F12               (kompletten Window)
    _SetHotKey('^+{F12}', '_Screenshot') ;_ Ctrl + Shift + F12       (Ränder rechts/links abschneiden)
    _SetHotKey('^!+{F12}', '_Screenshot') ; Ctrl + Shift + Alt + F12 (alle Ränder abschneiden)
    _SetHotKey('^!x', '_Exit') ; __________ Ctrl + Alt + x
    ;~ Send()
    
    While Sleep(1000)
    WEnd
    
    ; CaptureWnd mit/ohne Titelleiste und Rahmen oder nur ohne Rahmen rechts/links
    Func _Screenshot()
        Local Static $sSaveDir = StringReplace(@ScriptDir & '\' & @UserName & '\', '\\', '\')
        If Not FileExists($sSaveDir) Then DirCreate($sSaveDir)
    
        Local $aMousePos = MouseGetPos()
        DllStructSetData($g_tStruct, "x", $aMousePos[0])
        DllStructSetData($g_tStruct, "y", $aMousePos[1])
        Local $hWnd = _WinAPI_WindowFromPoint($g_tStruct), $bCursor = False
        Local $hParent = _WinAPI_GetAncestor($hWnd, $GA_ROOT)
        $hWnd = ($hParent = 0) ? $hWnd : $hParent
        Local $sWinName = _ProcessGetName(WinGetProcess($hWnd))
    
        Local $sSaveAs, $iScreenshotNr = 0
        Do
            $iScreenshotNr += 1
            $sSaveAs = StringFormat('%s_%03i.jpg', $sSaveDir & $sWinName, $iScreenshotNr)
            ConsoleWrite('$sSaveAs = ' & $sSaveAs & @CRLF)
        Until FileExists($sSaveAs) = 0
    
        Local $iCaption = _WinAPI_GetSystemMetrics($SM_CYCAPTION) ; Höhe der Titelleiste
        Local $iFrameX = _WinAPI_GetSystemMetrics($SM_CXFRAME) ; Breite der Fensterrahmen rechts/links
        Local $iFrameY = _WinAPI_GetSystemMetrics($SM_CYFRAME) ; Höhe des Fensterrahmen unten
    
        Local $aWinPos = WinGetPos($hWnd)
    
        Switch @HotKeyPressed
            Case '^{F12}'    ; Ctrl + Shift + F12       (kompletten Window)
                ConsoleWrite('kompletten Window' & @CRLF)
                Local $iLeft = 0, $iTop = 0, $iRight = $aWinPos[2], $iBottom = $aWinPos[3]
            Case '^+{F12}' ; Ctrl + Shift + F12        (Ränder rechts/links abschneiden)
                ConsoleWrite('Ränder rechts/links abschneiden' & @CRLF)
                Local $iLeft = $iFrameX, $iTop = 0, $iRight = $aWinPos[2] - $iFrameY, $iBottom = $aWinPos[3] ; __________________ rechten und linken Rahmen entfernen
            Case '^!+{F12}' ; Ctrl + Shift + Alt + F12 (alle Ränder abschneiden)
                ConsoleWrite('alle Ränder abschneiden' & @CRLF)
                Local $iLeft = $iFrameX, $iTop = $iCaption, $iRight = $aWinPos[2] - $iFrameY, $iBottom = $aWinPos[3] - $iFrameX ; alle Rahmen entfernen
        EndSwitch
    
        If _ScreenCapture_CaptureWnd($sSaveAs, $hWnd, $iLeft, $iTop, $iRight, $iBottom, $bCursor) Then
            ToolTip($sSaveAs, Default, Default, 'Screenshot', 1, 5)
        Else
            ToolTip('Fehler! CaptureWnd konnte nicht gespeichert werden.', Default, Default, 'Screenshot', 3, 5)
        EndIf
        AdlibRegister('_CloseToolTip', 2000)
    
        ; Warten bis die Ctrl-Taste nicht mehr gedrückt ist!
        While _IsPressed('11', $g_hDll) ; CTRL key
            Sleep(250)
        WEnd
    EndFunc   ;==>_Screenshot
    
    Func _CloseToolTip()
        ToolTip('')
        AdlibUnRegister()
    EndFunc   ;==>_CloseToolTip
    
    Func _SetHotKey($sKey, $sFunction)
        Local $iHotKey = HotKeySet($sKey, $sFunction)
        If $iHotKey = 0 Then Exit MsgBox(262144,'ScreenCapture', 'Hotkey "' & $sKey & '" konnte nicht gesetzt werden - bitte wähle eine andere Tastenkombination!')
    EndFunc
    
    Func _Exit()
        DllClose($g_hDll)
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • _ScreenCapture_Capture() bei mehreren Bildschirmen

    • Bitnugger
    • 22. November 2017 um 14:35

    Schau mal ob du damit was anfangen kannst...

    ScreenCapture.au3
    AutoIt
    ;-- TIME_STAMP   2017-11-22 14:33:08   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WinAPISys.au3>
    #include <ScreenCapture.au3>
    #EndRegion ;************ Includes ************
    
    _SetHotKey('^{F12}', '_Screenshot') ;__ Ctrl + F12               (kompletten Screen)
    _SetHotKey('^+{F12}', '_Screenshot') ;_ Ctrl + Shift + F12       (WorkAera des Screen)
    _SetHotKey('^!+{F12}', '_Screenshot') ; Ctrl + Shift + Alt + F12 (Ränder abschneiden)
    _SetHotKey('^!x', '_Exit') ; __________ Ctrl + Alt + x
    ;~ Send()
    
    While Sleep(1000)
    WEnd
    
    Func _Screenshot()
        Local Static $sSaveDir = StringReplace(@ScriptDir & '\' & @UserName & '\', '\\', '\'), $bCursor = False
        If Not FileExists($sSaveDir) Then DirCreate($sSaveDir)
    
        ; Dateiname mit Timestamp generieren
        Local $sSaveAs = $sSaveDir & StringFormat('Screenshot_%i%i%i_%i%i%i.jpg', @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC)
    
        ; Koordinaten des Mauszeigers ermitteln
        Local $tPOINT = _WinAPI_GetMousePos()
    
        ; Koordinaten des Monitors ermitteln, auf dem sich der Mauszeiger befindet
        Local $hMonitor = _WinAPI_MonitorFromPoint($tPOINT, $MONITOR_DEFAULTTONULL)
        Local $aMonitorInfo = _WinAPI_GetMonitorInfo($hMonitor)
        Local $aRectangle = [DllStructGetData($aMonitorInfo[0], 1), DllStructGetData($aMonitorInfo[0], 2), DllStructGetData($aMonitorInfo[0], 3), DllStructGetData($aMonitorInfo[0], 4)] ; $tagRECT structure des kompletter Screen in Array kopieren
        Local $aWorkArea  = [DllStructGetData($aMonitorInfo[1], 1), DllStructGetData($aMonitorInfo[1], 2), DllStructGetData($aMonitorInfo[1], 3), DllStructGetData($aMonitorInfo[1], 4)] ; $tagRECT structure des Arbeitsbereich des Screens in Array kopieren
    
        ; Hier musst du die Offsets evtl. noch korrigieren
        Switch @HotKeyPressed
            Case '^{F12}'    ; Ctrl + Shift + F12       (kompletten Screen)
                Local $iLeft = $aRectangle[0], $iTop = $aRectangle[1], $iRight = $aRectangle[2], $iBottom = $aRectangle[3]
            Case '^+{F12}'    ; Ctrl + Shift + F12       (WorkAera des Screen)
                Local $iLeft = $aWorkArea[0] + 100, $iTop = $aWorkArea[1] + 100, $iRight = $aWorkArea[2] - 100, $iBottom = $aWorkArea[3] - 100
            Case '^!+{F12}' ; Ctrl + Shift + Alt + F12 (Ränder abschneiden)
                Local $iLeft = $aRectangle[0] + 100, $iTop = $aRectangle[1] + 100, $iRight = $aRectangle[2] - 100, $iBottom = $aRectangle[3] - 100
        EndSwitch
    
        If _ScreenCapture_Capture($sSaveAs, $iLeft, $iTop, $iRight, $iBottom, $bCursor) Then
            ToolTip($sSaveAs, Default, Default, 'Screenshot', 1, 5)
        Else
            ToolTip('Fehler! ScreenCapture konnte nicht gespeichert werden.', Default, Default, 'Screenshot', 3, 5)
        EndIf
        AdlibRegister('_CloseToolTip', 2000)
    EndFunc   ;==>_Screenshot
    
    Func _CloseToolTip()
        ToolTip('')
        AdlibUnRegister()
    EndFunc   ;==>_CloseToolTip
    
    Func _SetHotKey($sKey, $sFunction)
        Local $iHotKey = HotKeySet($sKey, $sFunction)
        If $iHotKey = 0 Then Exit MsgBox(262144,'ScreenCapture', 'Hotkey "' & $sKey & '" konnte nicht gesetzt werden - bitte wähle eine andere Tastenkombination!')
    EndFunc
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • _ScreenCapture_Capture() bei mehreren Bildschirmen

    • Bitnugger
    • 22. November 2017 um 13:29

    Hier vorab mal ein Funktion mit der du Windows speichern kannst... gleich kommt noch eine Funktion, mit der du es analog zu dieser mit Screens machen kannst... da holst du dann nicht die Koordinaten des Windows, sondern des Screens... ansonsten bleibt fast alles gleich.

    CaptureWnd.au3
    AutoIt
    ;-- TIME_STAMP   2017-11-22 13:24:29   v 0.1
    
    #Region    ;************ Includes ************
    #Include <Process.au3>
    #include <ScreenCapture.au3>
    #EndRegion ;************ Includes ************
    
    Global $g_tStruct = DllStructCreate($tagPOINT) ; Create a structure that defines the point to be checked.
    
    HotKeySet('^+{F12}', '_Screenshot') ;_ Ctrl + Shift + F12       (komplettes Fenster)
    HotKeySet('^!+{F12}', '_Screenshot') ; Ctrl + Shift + Alt + F12 (Ränder abschneiden)
    HotKeySet('^!x', '_Exit') ; __________ Ctrl + Alt + x
    ;~ Send()
    
    While Sleep(1000)
    WEnd
    
    Func _Screenshot()
        Local Static $sSaveDir = StringReplace(@ScriptDir & '\' & @UserName & '\', '\\', '\')
        If Not FileExists($sSaveDir) Then DirCreate($sSaveDir)
    
        Local $aMousePos = MouseGetPos()
        DllStructSetData($g_tStruct, "x", $aMousePos[0])
        DllStructSetData($g_tStruct, "y", $aMousePos[1])
        Local $hWnd = _WinAPI_WindowFromPoint($g_tStruct), $bCursor = False
        Local $hParent = _WinAPI_GetParent($hWnd)
        $hWnd = ($hParent = 0) ? $hWnd : $hParent
        Local $sWinName = _ProcessGetName(WinGetProcess($hWnd))
    
        Local $sSaveAs, $iScreenshotNr = 0
        Do
            $iScreenshotNr += 1
            $sSaveAs = StringFormat('%s_%03i.jpg', $sSaveDir & $sWinName, $iScreenshotNr)
            ConsoleWrite('$sSaveAs = ' & $sSaveAs & @CRLF)
        Until FileExists($sSaveAs) = 0
    
        Switch @HotKeyPressed
            Case '^+{F12}'    ; Ctrl + Shift + F12       (komplettes Fenster)
                Local $iLeft = 0, $iTop = 0, $iRight = -1, $iBottom = -1
            Case '^!+{F12}' ; Ctrl + Shift + Alt + F12 (Ränder abschneiden)
                Local $aWinPos = WinGetPos($hWnd), $iLeft = 100, $iTop = 100, $iRight = $aWinPos[2] - 100, $iBottom = $aWinPos[3] - 100
        EndSwitch
    
        If _ScreenCapture_CaptureWnd($sSaveAs, $hWnd, $iLeft, $iTop, $iRight, $iBottom, $bCursor) Then
            ToolTip($sSaveAs, Default, Default, 'Screenshot', 1, 5)
        Else
            ToolTip('Fehler! CaptureWnd konnte nicht gespeichert werden.', Default, Default, 'Screenshot', 3, 5)
        EndIf
        AdlibRegister('_CloseToolTip', 2000)
    EndFunc   ;==>_Screenshot
    
    Func _CloseToolTip()
        ToolTip('')
        AdlibUnRegister()
    EndFunc   ;==>_CloseToolTip
    
    Func _Exit()
        Exit
    EndFunc   ;==>_Exit
    Alles anzeigen
  • Text in ein Fenster einfügen mit $WM_SETTEXT nicht möglich?

    • Bitnugger
    • 21. November 2017 um 13:07

    Und so... (funktioniert bei mir mit Word 2016)

    AutoIt
    ;-- TIME_STAMP   2017-11-21 13:04:44   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WindowsConstants.au3>
    #include <Clipboard.au3>
    #include <WinAPISys.au3>
    #EndRegion ;************ Includes ************
    
    HotKeySet('^u', '_ClipBoard_InsertUnformat') ; Ctrl+U
    HotKeySet('^+e', '_exit')                    ; Ctrl+Shift+E
    
    Func _ClipBoard_InsertUnformat()
        ; get clipboard entry as text-only
        Local $sClip = _ClipBoard_GetData($CF_UNICODETEXT)
    
        ; get current window & child window from mouse position
        Local $hWnd = WinGetHandle('[ACTIVE]')
        Local $tPOINT = _WinAPI_GetMousePos(True, $hWnd)
        Local $hChild = _WinAPI_ChildWindowFromPointEx($hWnd, $tPOINT)
    
        ; check if child exists
        If $hChild = $hWnd Then Return
    
        ControlSend($hChild, '', '', $sClip, $SEND_RAW)
    EndFunc
    
    Func _exit()
        Exit
    EndFunc
    
    While True
        Sleep(10)
    WEnd
    Alles anzeigen

    Oben mit dem Script, unten ohne...

  • Text in ein Fenster einfügen mit $WM_SETTEXT nicht möglich?

    • Bitnugger
    • 21. November 2017 um 12:21

    Schau mal hier... ob das evtl. hilft.

    @trancexx schreibt:

    Use _SendMessageA() or change string type to "wstr" ("wchar" for buffer).

  • Verständnisfrage - RAMVerbrauch

    • Bitnugger
    • 20. November 2017 um 08:52
    Zitat von Sonderbaar

    Der Link führt mich auf die Shoutbox ?

    Oh ja, der Link wurde wohl beim Einfügen nicht korrekt übernommen... habe ihn nun korrigiert.

    Für alle Fälle hier aber noch den Link als Code:

    Code
    ; So ist es falsch...
    https://autoit.de/index.php/Thread/85317-Namen-der-Tables-auslesen/?postID=683220#post683220
    
    ; So ist es richtig...
    https://autoit.de/index.php?thread/85317-namen-der-tables-auslesen/&postID=683220#post683220
    Zitat von Sonderbaar

    Muss ich die SQL Verbindung nach dem Insert wieder trennen??? Dann wieder neu aufbauen oder wie soll ich das verstehen?

    Das wäre ja kompletter Schwachsinn... nein, du musst lediglich den von SQL reservierten Speicher für die Abfrage (Query) wieder freigeben, bevor du eine neue Abfrage (Query) abschickst. Schau dir einfach mein Beispiel an...

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™