Das führt wieder zu: AutoIT3.exe ended.rc:-1073741819
Hast Du meine Variante mal ausprobiert? Die funktioniert bei mir unter Win7 64 Bit und WinXP 32 Bit.
Das führt wieder zu: AutoIT3.exe ended.rc:-1073741819
Hast Du meine Variante mal ausprobiert? Die funktioniert bei mir unter Win7 64 Bit und WinXP 32 Bit.
Mit der Änderung stürzt es bei mir nicht mehr ab, sondern es "friert" ein (Fenster läßt sich nicht mehr bewegen/schließen).
Ah, die Idee mit den Static-Variablen ist gut. Damit geht das! Danke, SEuBo!
Habe das Skript angepasst (siehe Post #1).
Jetzt klappt das neuzeichnen, wenn man mit einem anderen Fenster drüberfährt. Allerdings "ruckt" es noch etwas, wenn man das Fenster mit dem Bild etwas ausserhalb des Bildschirms bewegt und dann wieder zurück.
Falls dafür noch jemand eine Lösung kennt?
Edit: eukalyptus: Dein Skript funktioniert bei mir nicht. Da stürzt AutoIt ab (AutoIT3.exe ended.rc:-1073741819) wenn ich ein Bild lade.
Ich brauchte gerade mal eine Funktion zum anzeigen von Bildern. Diese soll die Bilder (nach Möglichkeit) komplett (100%) in einem Fenster anzeigen. Wenn die Bilder eine höhere Auflösung haben als der Monitor, dann sollen sie entsprechend (proportional) runterskaliert werden.
So weit habe ich das auch schon fertig (deshalb hier in Skripte).
Es gibt nur noch ein Problem mit dem neuzeichnen, wenn man ein anderes Fenster darüber bewegt. An sich ja kein Problem, das kann man ja mit WM_PAINT lösen (einfach neuzeichnen lassen), aber und jetzt kommt das Schwierige, ich möchte das gern als UDF haben.
Der GUIRegister-Aufruf muss also von der Funktion "_ShowImage" aus erfolgen. Allerdings sind die Variablen ja lokal (möchte gern auf globale Variablen verzichten) und jetzt weiß ich nicht, wie ich das sonst lösen kann. Jemand eine Idee?
Problem erledigt! Jetzt funktioniert auch das neuzeichnen. ![]()
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#cs
Beispiel - Anfang
#ce
Opt('GUIOnEventMode', 1)
GUICreate('Beispiel', 600, 400)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
GUICtrlCreateButton('Zeige Bild...', 20, 20, 160, 35)
GUICtrlSetOnEvent(-1, '_Show')
GUISetState()
While Sleep(50)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _Show()
Local $sPath
$sPath = FileOpenDialog('Bilddatei auswählen', @WorkingDir, 'Images (*.jpg;*.bmp;*.png)', 3)
If Not @error Then _ShowImage($sPath)
EndFunc ;==>_Show
#cs
Beispiel - Ende
#ce
;===============================================================================
; Function Name: _ShowImage($sImgFile)
; Description:: Zeigt ein Bild in einem separaten Fenster an.
; Parameter(s): $sImgFile = Pfad zu dem Bild
; Requirement(s): #include <GDIPlus.au3>
; #include <GUIConstantsEx.au3>
; #include <WindowsConstants.au3>
; Return Value(s): wenn die Datei nicht existiert wird @error auf "1" gesetzt
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _ShowImage($sImgFile)
If Not FileExists($sImgFile) Then Return SetError(1, 0, 0)
Local $hGui, $hBitmap, $hGraphic, $aWinPos, $iFrameWidth, $iFrameHeight, $iImgWidth, $iImgHeight, $iFactor
Local $iOldOpt = Opt('WinTitleMatchMode', 4)
Local $aTaskbarPos = WinGetPos('classname=Shell_TrayWnd')
Opt('WinTitleMatchMode', $iOldOpt)
$iOldOpt = Opt('GUIOnEventMode', 0)
Local $iGuiWidth = 300, $iGuiHeight = 300
$hGui = GUICreate('Calc Frame', $iGuiWidth, $iGuiHeight, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION))
_GDIPlus_Startup()
$hBitmap = _GDIPlus_BitmapCreateFromFile($sImgFile)
$aWinPos = WinGetPos($hGui)
GUIDelete($hGui)
$iFrameWidth = $aWinPos[2] - $iGuiWidth
$iFrameHeight = $aWinPos[3] - $iGuiHeight + 10
$iImgWidth = _GDIPlus_ImageGetWidth($hBitmap)
$iImgHeight = _GDIPlus_ImageGetHeight($hBitmap)
$iFactor = $iImgWidth / $iImgHeight
While $iImgHeight > ($aTaskbarPos[1] - $iFrameHeight)
$iImgHeight -= 1
$iImgWidth -= $iFactor
WEnd
While $iImgWidth > (@DesktopWidth - $iFrameWidth)
$iImgHeight -= 1
$iImgWidth -= $iFactor
WEnd
$iImgWidth = Int($iImgWidth)
ConsoleWrite($iImgWidth & ' x ' & $iImgHeight & ' ' & $iFrameWidth & ' x ' & $iFrameHeight & @CR)
$hGui = GUICreate('Show Image', $iImgWidth, $iImgHeight, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION))
GUISetState()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
_RedrawImage($hGraphic, $hBitmap, $iImgWidth, $iImgHeight)
GUIRegisterMsg($WM_PAINT, '_WM_PAINT')
While True
$aMsg = GUIGetMsg(1)
If $aMsg[1] = $hGui And $aMsg[0] = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIRegisterMsg($WM_PAINT, '')
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
GUIDelete($hGui)
Opt('GUIOnEventMode', $iOldOpt)
EndFunc ;==>_ShowImage
Func _WM_PAINT($hWnd, $Msg, $wParam, $lParam)
If $hWnd = WinGetHandle('Show Image') Then _RedrawImage()
Return $GUI_RUNDEFMSG
EndFunc ;==>_WM_PAINT
Func _RedrawImage($par1 = 0, $par2 = 0, $par3 = 0, $par4 = 0)
Local Static $hGraphic, $hBitmap, $iImgWidth, $iImgHeight
If $par1 <> 0 Then
$hGraphic = $par1
$hBitmap = $par2
$iImgWidth = $par3
$iImgHeight = $par4
EndIf
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iImgWidth, $iImgHeight)
EndFunc ;==>_RedrawImage
Naja, bei 600€ für einen Laptop wird das keine HighEnd-Grafikkarte, das sollte Dir klar sein. ![]()
Aber diese beiden hier sehen ganz vielversprechend aus:
MSI EX628-T6647W7P
Acer Aspire 5739G-744G25MN - Gamer II
So:
[autoit]
HotKeySet ("s" , TestFunc1())
While Sleep(50)
WEnd
Func TestFunc1()
MsgBox (1, "test", "test")
EndFunc
Den Inhalt von einem Input-Control musst Du mit GUICtrlRead auslesen.
Es muss also so aussehen:
send (GUICtrlRead($Input1))
[/autoit]Ich denke, die meisten hier halten sich zurück, weil wir keinen Keylogger-Support bieten wollen und das was Du vorhast geht schon sehr weit in diese Richtung (Tastendrücke abfangen).
Mal abgesehen davon, dass die "Verschlüsselung", die Dir da vorstrebt nicht gerade stark ist (leicht zu knacken).
Es wäre einfacher, wenn Du einfach einen ICQ-Client benutzt, der "von Haus aus" die Daten verschlüsselt. ![]()
Mit StringRegExp ist das viel einfacher:
[autoit]
#include <Array.au3>
$sSource = BinaryToString(InetRead('http://www.bfbs-radio.com/pages/extranet/listenagain.php', 1))
$aMP3Links = StringRegExp($sSource, 'soundFile=(.+)"', 3)
_ArrayDisplay($aMP3Links)
Erstell' das Bild nur einmal und lade dann das geänderte Bild mit GUICtrlSetImage.
Forenregeln lesen! Hier gibt's keine Bot-Unterstützung!
[Thread closed]
Ist es nicht eher so, dass Programme ihre Daten in @AppDataDir & '\Programm\' ablegen sollen?
So habe ich das bei meinen Programmen jetzt immer gemacht und da braucht man auch keine Adminrechte zum schreiben.
BTW: Firefox, Thunderbird und so packen ihre Daten auch dorthin.
Der (Al.Gaida) kassiert gleich die zweite Verwarnung! ![]()
Tja, das ist ja eher sowas wie ein "Negativ-Bot". ![]()
Ich denke, das kann man dann schonmal supporten.
Edit: zu spät...
Aber _IsPressed benötigt noch ein Include:
[autoit]#Include <Misc.au3>
[/autoit]Beschreib doch mal, was Du vorhast, dann kann man Dir viel einfacher helfen.
Mein CryptChat kann auch Mehrfach-Verbindungen.
Grobe Prozedur:
Das Serverskript muss alle akzeptierten Verbindungen in einem Array speichern und diese dann in einer Schleife abfragen, ob neue Nachrichten eingetroffen sind. Wenn ja, dann an alle anderen verschicken.