Stimmt!
Ich habe nicht genau hingesehen!
Gruß,
UEZ
Stimmt!
Ich habe nicht genau hingesehen!
Gruß,
UEZ
Ich habe weder in meiner WinXP VM noch unter Win7 x64 das Problem!
Gruß,
UEZ
Stimmt, jetzt sehe ich was.
Vielleicht sollte man das Ganze in Blau Tönen darstellen, damit es wie Wolken aussieht!
Gruß,
UEZ
Klasse Beispiel Großvater ![]()
Gruß,
UEZ
Alles anzeigenNeue Funktion:
//Edit: Musste ich leider entfernen, da iwo der Speicher nicht wieder freigegeben wurde. --> nach ein paar min hat man eine Ram Überlastung.
//Edit2: Fehler gefunden. ein dc wurde nur freigegeben statt gelöscht.Arbeitet nun auch korrekt mit Helligkeiten.
Man hat 255 Abstufungen. von 0 = Schwarz bis 255 = weiß.Da ich leider keine Ordentliche Interpolation per StretchBlt hinbekomme
( _WinAPI_SetStretchBltMode kann _GDIPlus_GraphicsSetInterpolationMode iwie nicht ersetzen)
ist das Ganze leider etwas ausgebremst.Zudem macht das Vergrößern immer nur nach rechts unten vergrößern und die obere Linke Ecke bleibt gleich.
Dadurch muss man einen Rand verwenden der 1/3 der Bildbreite ausmacht. (also 1/6 an jeder seite) und den später abschneiden.
Auch das verlangsamt natürlich alles noch einmal.Im Endeffekt kommt man aber auch annehmbare Zeiten:
200x200 - 950 ms - 42px/ms
400x400 - 3.820ms - 41.5px/ms
600x600 - 8.454ms - 42.58px/ms
Ich sehe "nur" ein schwarzes Bild und unten die Schrift mit den Angaben. Ist das normal?
Gruß,
UEZ
Hier eine Version, um aus SciTE zu kompilieren:
[autoit]
#AutoIt3Wrapper_Run_Before=del /f /q "%scriptfile%_x64.exe"
#AutoIt3Wrapper_Run_Before=del /f /q "%scriptfile%_x86.exe"
#AutoIt3Wrapper_Run_Before=""%autoitdir%\aut2exe\aut2exe.exe" /in "%in%" /out "%scriptdir%\%scriptfile%_x64.exe" /nopack /x64"
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Run_After=ren "%out%" "%scriptfile%_x86.exe"
...
Gruß,
UEZ
Das klappt bei mir ohne Probleme:
Test System: Win7x64 Englisch:
"c:\Program Files (x86)\AutoIt3\Aut2Exe\Aut2exe.exe" /in "C:\temp\test.au3" /out "C:\temp\test.exe" /icon "C:\Program Files (x86)\AutoIt3\Aut2Exe\Icons\AutoIt_Old1.ico"
Auf WinXP Ger:
c:\Programme\AutoIt3\Aut2Exe\Aut2exe.exe /in c:\AutoIt\Test01.au3 /out c:\AutoIt\Test01.exe /icon c:\Programme\AutoIt3\Aut2Exe\Icons\AutoIt_Old1.ico
Gruß,
UEZ
Nächster Versuch! Hier ein Mischmasch aus den beiden Versionen!
#include <GUIConstantsEx.au3>
#include <SendMessage.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)
HotKeySet("{ESC}", "_Exit")
Global Const $SC_DRAGMOVE = 0xF012
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Test", 82, 34, -1, -1, $WS_POPUP, $WS_EX_LAYERED)
GUISetBkColor(0xFEDCBA, $hGUI)
$pic1 = GUICtrlCreatePic("back1.jpg", 0, 0, 78, 14)
GUICtrlSetState(-1, $GUI_DISABLE)
$pic2 = GUICtrlCreatePic("back2.jpg", 0, 18, 78, 14)
GUICtrlSetState(-1, $GUI_DISABLE)
$hGUI_Child = GUICreate("", 82, 32, 0, 0, $WS_POPUP, $WS_EX_MDICHILD +$WS_EX_LAYERED, $hGUI)
GUICtrlSetBkColor($hGUI_Child, 0xABCDEF)
$Input1 = GUICtrlCreateInput("", 0, 0, 82, 16)
GUICtrlSetOnEvent(-1, "_1")
GUICtrlSetFont($Input1, 8, 800, 0, "Tahoma")
GUICtrlSetBkColor($Input1, 0xABCDEF)
$Input2 = GUICtrlCreateInput("", 0, 18, 82, 16)
GUICtrlSetOnEvent(-1, "_2")
GUICtrlSetFont($Input2, 8, 800, 0, "Tahoma")
GUICtrlSetBkColor($Input2, 0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xFEDCBA)
_WinAPI_SetLayeredWindowAttributes($hGUI_Child, 0xABCDEF)
GUISetState(@SW_SHOW, $hGUI_Child)
GUISetState(@SW_SHOW, $hGUI)
WinActivate($hGUI_Child)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
While Sleep(10000)
WEnd
Func _1()
Local $Input_1_Text = GUICtrlRead($Input1)
GUICtrlSetData($Input1, "")
MsgBox(0, "", "1: " & "''" & $Input_1_Text & "''")
EndFunc
Func _2()
Local $Input_2_Text = GUICtrlRead($Input2)
GUICtrlSetData($Input2, "")
MsgBox(0, "", "2: " & "''" & $Input_2_Text & "''")
EndFunc
Func _Exit()
GUIDelete($hGUI)
Exit
EndFunc
Gruß,
UEZ
Ich verstehe nicht ganz genau, was du machen willst! Willst du 2 Input Felder haben, die durchsichtig sind, so dass der Hintergrund sichtbar ist?
Falls ja, dann probiere mal dies:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("Test", 229, 44, -1, -1, $WS_POPUP, $WS_EX_TOPMOST+ $WS_EX_LAYERED)
$Input1 = GUICtrlCreateInput("", 0, 0, 229, 21)
GUICtrlSetFont($Input1, 9, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor($Input1, 0xABCDEF)
$Input2 = GUICtrlCreateInput("", 0, 23, 229, 21)
GUICtrlSetFont($Input2, 9, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor($Input2, 0xABCDEF)
GUISetState(@SW_SHOW, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0xABCDEF)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIDelete($hGUI)
Exit
EndSwitch
WEnd
Gruß,
UEZ
Ersetze mal in deinem Code vom ersten Beitrag die Zeilen 15-19 mit
[autoit]
;Transparente GUI erstellen
$hDummy = GUICreate("") ; Dummy GUI, damit richtiges nicht in Taskleiste auftaucht.
$hGUI = GUICreate("", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST,$WS_EX_TRANSPARENT),$hDummy)
GUISetBkColor(0x0, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI, 0x0, 255)
Gruß,
UEZ
Probiere es mal damit:
#include <GUIConstantsEx.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$hGUI = GUICreate("Test", 615, 438)
[/autoit] [autoit][/autoit] [autoit]$pic = GUICtrlCreatePic("raster_pink.bmp", 56, 64, 329, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
$hGUI_Child = GUICreate("Test", 329, 21, 56, 64, $WS_POPUP, $WS_EX_TOPMOST + $WS_EX_MDICHILD + $WS_EX_LAYERED, $hGUI)
GUICtrlSetBkColor($hGUI_Child, 0xABCDEF)
$Input1 = GUICtrlCreateInput("", 0, 0, 329, 21, $WS_BORDER)
GUICtrlSetFont($Input1, 9, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor($Input1, 0xABCDEF)
GUISetState(@SW_SHOW, $hGUI_Child)
GUISetState(@SW_SHOW, $hGUI)
_WinAPI_SetLayeredWindowAttributes($hGUI_Child, 0xABCDEF)
WinActivate($hGUI_Child)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Gruß,
UEZ
Danke auch denen, die nach meinem Beitrag gepostet haben und vielleicht noch posten werden!
Danke an i2c für die schöne Animation! Mit GDI+ würde das nicht so schön aussehen! ![]()
Ich habe Dali als Avatar ausgewählt, weil er ein bissl Gaga im Kopf war. ![]()
Mit Feiern ist heute nichts, da ich immer noch auf der Arbeit bin... ![]()
Gruß,
UEZ
VIELEN, VIELEN DANK FÜR DIE GLÜCKWÜNSCHE! ![]()
Prost auf weitere gute Zusammenarbeit und Happy Coding ![]()
autoBert: vielen Dank für das Geburtstagsskript! ![]()
Gruß,
UEZ
PS: midlife crisis nähert sich... ![]()
Vielleicht hilft dir das hier weiter: http://www.autoitscript.com/forum/topic/85…hacker-project/
Gruß,
UEZ
Hast recht. Das Handle ist 0, wenn die Datei nicht geöffnet werden kann!
Gruß,
UEZ
Alles anzeigenVielen Dank UEZ für die 2 Skripte. Hab mir mal die Hauptfunktion von Tail für mich passend umgeschrieben.
Spoiler anzeigen
[autoit][/autoit]
Func _GetTailOfFile($filename, $bytes = 512, $save = 0)
Local $nBytes, $data, $em, $hSave
Local Const $fsize = FileGetSize($filename)
If FileGetSize($filename) < $bytes Then $bytes = $fsize
If $bytes > 0x7FFFFF Then $bytes = 512
Local $tBuffer = DllStructCreate("byte[" & $bytes & "]")
Local $hFile = _WinAPI_CreateFile($filename, 2, 2)
If Not $hFile Then
$em = "ERROR: unable to open file. Might be open by another process."
Return SetError(1, "", $em)
EndIf
_WinAPI_SetFilePointer($hFile, -$bytes, 2)
_WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), $bytes, $nBytes)
_WinAPI_CloseHandle($hFile)
$data = BinaryToString(DllStructGetData($tBuffer, 1))
$tBuffer = ""
If $save Then
$hSave = FileOpen($save, 2)
If $hSave = -1 Then
$em = "ERROR: " & $save & " could not be created!"
Return SetError(1, "", $em)
EndIf
FileWrite($hSave, $data)
FileClose($hSave)
EndIf
Return $data
EndFunc ;==>GetTailOfFile
Ich habe auch ein _WinAPI_CloseHandle($hFile) beim Fehler Rücksprung vergessen -> zwischen Zeile 9 und 10 würde ich noch ein _WinAPI_CloseHandle($hFile) einbauen!
Alles anzeigenMoin UEZ,
schau mal da: CreateFile
Die Parameter dwDesiredAccess und dwShareMode regeln die Möglichkeiten für mehrere gleichzeitige Zugriffe auf eine Datei, soweit die Berechtigungen das überhaupt zulassen. Wenn z.B. eine Anwendung die Datei mit GENERIC_WRITE schreibend geöffnet hat und Du versuchst, sie mit GENERIC_READ lesend zu öffnen, brauchst Du zumindest den Sharemode FILE_SHARE_WRITE, sonst:
Wenn ich das MSDN richtig verstehe, muss allerdings auch die andere Anwendung im CreateFile zumindest den Sharemode FILE_SHARE_READ gesetzt haben, sonst:
In meinem Tool (nicht AU3) habe ich den Sharemode generell auf 0x7 (FILE_SHARE_READ + FILE_SHARE_WRITE + FILE_SHARE_DELETE) gesetzt. Es läuft immer mit Administratorrechten und kann so jederzeit auf die mich interessierenden Logdateien zugreifen, ohne dass sich die Anwendungen gegenseitig stören.Ob und ggf. welche Sharemodes die AU3-Funktion FileOpen() setzt, weiß ich nicht.
Danke für die Quelle! Öffne ich die Datei mit _WinAPI_CreateFile($filename, 2, 4), so wird nichts angezeigt; mit _WinAPI_CreateFile($filename, 2, 7) geht's wieder. Jetzt muss ich testen, ob ich das File öffnen kann, wärend Robocopy fleißig in die Datei schreibt.
Gruß,
UEZ
Sind jetzt in deinem Beispiel beide Strings gleich?
Gruß,
UEZ
Keine Ahnung! Die WinAPI Funktion habe ich zuerst gesehen!
Kann denn FileSetPos() auch gesperrte Dateien öffnen (habe noch nicht getestet)?
Gruß,
UEZ
Hallo UEZ,
ich habe mir etwas Ähnliches aus schierer Verzweiflung auch schon gebastelt.
[autoit]Local $hFile = _WinAPI_CreateFile($filename, 2, 2)
[/autoit]
Ich denke, Du solltest zumindest $iShare = 4 (Write) setzen, sonst kann es leicht zu Konflikten kommen, wenn das Programm der LOG-Datei noch läuft. Die UDF "verwurstelt" ja die Werte der Windowskonstanten.
Vielen Dank für dein Feedback! ![]()
Ich verstehen aber den Nutzen von $iShare -> 4 (Sharing mode of an object: Write) nicht ganz. Denn ich öffnen "nur" die Datei, warum sollte ich den sharing mode auf 4 setzen?
Mit dieser Methode kann ich leider keine gesperrten Dateien öffnen, egal ob $iShare 4 ist oder nicht! Ich weiß nicht, wie das Notepad macht, denn Notepad kann z.B. die Logs von Robocopy öffnen, obwohl Robocopy noch läuft!
Vielleicht kannst du das mit dem $iShare Parameter näher erklären.
Gruß,
UEZ
Genau ![]()
Gruß,
UEZ