Das kannte ich schon. Aber ich hätte vielleicht auch schreiben sollen, dass Zeit eine Rolle spielt :S. Die Funktion ist prima, aber ich brauche eine extrem schnelle Funktion... Die Art der Daten wäre mir auch egal (Binär, Farbcodes etc...), ich muss die Daten auch nicht interpretieren oder verändern können sondern nur ggf. wieder zu einer Bitmap zusammenfügen.
Beiträge von name22
-
-
Tja... Wie die Überschrift schon sagt, möchte ich die Daten einer Bitmap über ein HBTIMAP Handle (wie es z.B. von _ScreenCapture_Capture zurückgegeben wird) direkt aus dem Speicher auslesen. Also ohne zwischenspeichern auf der Festplatte, da das zu lange dauert :S. Bisherige Ansätze oder Versuche gibt es nicht, da ich keine Ahnung habe wie ich das überhaupt angehen soll. Hoffe auf Lösungsvorschläge/Lösungen.

-
Zitat
Funktioniert
Vllt kannst du die GUI noch schließen lassen durch GUIGetMsg() oder OnEventMode 
Ich glaub Blume weiß wie das geht
.....
Aber eine andere Schließmöglichkeit als Esc. wäre schon nützlich ;). Wenn du es mit AdlibRegister machst, kannst du das Sleep aus der Hauptschleife entfernen und durch eine ganz normale MessageLoop ersetzen. -
Funktioniert, und ist für den Anfang recht gut ;).
Als Übung könntest du das Script ja jetzt noch verbessern und währendessen dazulernen. Als Vorschlag hätte ich mal einen Backbuffer einzubauen, das ganze mid AdlibRegister oder einer anderen Timer Funktion zu machen anstatt mit Sleep in einer Endlosschleife etc...
-
Ich hab auch mal eine Funktion hingezaubert und sie funktioniert sogar
.Spoiler anzeigen
[autoit]; #FUNCTION# ======================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name ..........: _FileListToArrayRecursiv()
; Description ...: Findet Dateien in einem Verzeichnis und allen Unterverzeichnissen
; Syntax ........: _FileListToArrayRecursiv($sPath, [$sFilter = "*"])
; Parameters ....: $sPath - Verzeichnispfad in dem gesucht werden soll.
; $sFilter - [optional] Dateinamenfilter (z.B. "*.mp3"). Wildcards werden unterstützt.
; Return values .: Success - Return Array with Files ($Array[0] = Count)
; Failure - Return 0
; Author ........: name22 (autoit.de)
; Remarks .......: Benötigt #include <File.au3>
; =================================================================================================
Func _FileListToArrayRecursiv($sPath, $sFilter)
If $sFilter = "" Then $sFilter = "*"Local $aFiles = _FileListToArray($sPath, $sFilter, 1)
[/autoit] [autoit][/autoit] [autoit]
If Not IsArray($aFiles) Then
Local $aFiles[1]
$aFiles[0] = 0
EndIfLocal $aFolders = _FileListToArray($sPath, "*", 2)
[/autoit] [autoit][/autoit] [autoit]
If Not IsArray($aFolders) Then
If $aFiles[0] = 0 Then Return 0
Else
$bResult = False
For $i = 1 To $aFolders[0]
$aSearchTmp = _FileListToArrayRecursiv($sPath & "\" & $aFolders[$i], $sFilter)
If IsArray($aSearchTmp) Then
$bResult = True
ReDim $aFiles[$aFiles[0] + $aSearchTmp[0] + 1]
For $j = 1 To $aSearchTmp[0]
$aFiles[$aFiles[0] + $j] = $aFolders[$i] & "\" & $aSearchTmp[$j]
Next
$aFiles[0] += $aSearchTmp[0]
EndIf
Next
If Not $bResult Then Return 0
EndIfReturn $aFiles
[/autoit]
EndFunc -
Was spricht gegen die Funktion
[autoit]_FileListToArray
[/autoit]?

-
Du kannst z.B. den gewünschten Code temporär in einer au3 Datei abspeichern und diese dann mit dem AutoIt Compiler im AutoIt Verzeichnis über Kommandozeilenparameter kompilieren. Hier steht auch wie das geht.

-
Nakroma Das ist das was ich geschrieben habe in grün
.ZitatAm besten dazu noch BitAND benutzen, da es mehrere States auf einmal geben kann.
[autoit]
Dieser Fall ist bei mir bisher so gut wie nie aufgetreten, aber ist ein guter Hinweis. Also müsste es so lauten:If BitAND(GUICtrlRead($cCheck), $GUI_CHECKED) = $GUI_CHECKED Then
[/autoit]PS: Mir ist gerade aufgefallen, dass ich in meinem ersten Post totalen Müll verzapft habe :pinch: . Aber so stimmt es jetzt
. -
Zitat
Kann man den "Server" auch ohne AutoIT als Child öffnen ?
Und dann in der Hilfe bei $foo den Process Namen eingeben ?
Kannst du, aber es würde dir nichts bringen :D. Um etwas in den Stdin Stream eines Programmes schreiben zu können musst du es mit Run o.Ä. im Autoit Script öffnen und dann die zurückgegebene PID (Process ID) bei StdinWrite verwenden.
Ein nicht über das Script gestartete Prozess kann keine Daten von diesem Script über den Stdin Stream erhalten. Das dürfte allerdings kein Problem sein in den meisten Fällen... -
In Zukunft bitte AutoIt Quellcode in
brackets setzen.
[autoit]
Ich bin mir nicht ganz sicher was die Checkboxen bewirken sollen, aber den Status einer Checkbox überprüfen kannst du mitIf GUICtrlRead($cCheck, $GUI_CHECKED) Then
[/autoit].
Und nach das Then kommt was du im Falle einer "gecheckten" Checkbox machen willst. -
Ich sollte mir Beiträge wieder genauer durchlesen... Für mich war es selbstverständlich, dass man zuerst überprüft ob man die Funktion richtig verwendet und sich dann erst in einem Forum darüber beschwert.

-
Man könnte ja auch einfach die HotKeySet Funktionen VOR der Endlosschleife aufrufen. :pinch:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
HotKeySet("^e", "show") ; Mit ALT + e wird...
HotKeySet("^r", "hide") ; Mit ALT + r wird...While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep (10)
WEndFunc hide ()
[/autoit] [autoit][/autoit] [autoit]
WinSetState("Mozilla Firefox", "", @SW_HIDE) ; ...Firefox versteckt
EndFuncFunc show ()
[/autoit]
WinSetState("Mozilla Firefox", "", @SW_SHOW) ; ...Firefox angezeigt
EndFunc -
Weil das Script nie über die While 1 Endlosschleife hinauskommt, und somit auch kein HotKeySet aufgerufen wird.
-
Nicht jedes Control ist auch mit den AutoIt Control Funktionen kompatibel... Du kannst ja auch mal ControlCommand versuchen.
-
Ups.. Ich sehe gerad, dass dir das von BadBunny ja gar nicht weiter hilft
. Du musst das Programm als Child Prozess starten und dann über StdinWrite in die Konsole des anderen Programms schreiben. In der Hilfe gibt es ein Beispiel zu StdinWrite ;). -
Also willst du Daten in eine fremde Konsole schreiben. Das hat BadBunny doch auch schon beschrieben.
-
Ich dachte du wolltest in die Konsole deines eigenen Scripts schreiben?

-
ConsoleWrite? BadBunny hat dir doch schon beschrieben was du machen musst...
-
Du kannst z.B. mit ConsoleWrite etwas in den STDOUT Stream (Standard Out Stream) schreiben. Wenn du nun ein Programm über Run aus einem anderen Programm startest kannst du im ersten Programm mithilfe von StdoutRead alles auslesen was du mit ConsoleWrite im zweiten Programm ausgibst.
-
Zitat
Wenn ichs richtig sehe,
zeichnest du einfach vor dem String das Hintergrund immer neu,
berechnest es aber nicht neu und überschreibst damit die vorherige Schrift.
Richtig ?
Richtig ;).