Muss das hier denn wirklich sein? Ich dachte wir hätten das schon öfters durchgekaut. Die Forenregeln sind meiner Meinung nach klar verständlich und an die hat man sich hier nun mal zu halten. Unsere Chefs im Forum haben nun wirklich genug Erfahrung um darüber urteilen zu können was sie nicht auf ihrer Seite wollen.
Beiträge von name22
-
-
Mensch 42 wirst du! Einen viel besseren Geburtstag gibt es doch gar nicht. Eigentlich müsste ich dir glatt ein Handtuch schenken
.
Alles Gute zum Geburtstag Raupi!
Lass dich feiern und hab ne Menge Spaß
. -
Das Forum heißt nicht umsonst "Skripte" ;).
-
-
Du musst in deinem Programm die entsprechenden Befehlszeilen verarbeiten die Windows an dein Programm sendet wenn du bestimmte Modis auswählst ;). Hier ist ein Beispiel dafür von UEZ: https://autoit.de/index.php?page=Thread&threadID=27832
-
Wie wäre es so?
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("GDI+ Countdown", 400, 200)
[/autoit] [autoit][/autoit] [autoit]
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(400, 200, $hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsFillRect($hBuffer, 0,0, 400, 200, _GDIPlus_BrushCreateSolid(0xFFA2FF00))GUISetState()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
For $i = 5 To 0 Step - 1
_GDIPlus_GraphicsClear($hBuffer, 0xFFA2FF00)
_GDIPlus_GraphicsDrawString($hBuffer, $i, (400 / 2) - 6, (200 / 2) -
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
Sleep(1000)
NextWEnd
[/autoit] [autoit][/autoit] [autoit]Func _Exit()
[/autoit]
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Exit
EndFunc
Du musst nach jedem Zeichenvorgang der auf der GUI angezeigt werden soll, aber nur im Buffer steht, diesen auf die Grafik der GUI zeichnen. Dein GraphicsDrawImage war an der völlig falschen Position. Es muss hinter die Zeichenvorgänge und in die Schleife. -
Die Funktionen aus der Binary UDF sind da vermutlich ein wenig schneller (teilweise Inline-Assembler).
Hier mal ein Beispiel mit Umwandlung nach Hex und wieder zurück (mit AutoIt-Int):Spoiler anzeigen
[autoit]#include <Binary.au3>
[/autoit] [autoit][/autoit] [autoit]$iDec = 8608480567731124087
[/autoit] [autoit][/autoit] [autoit]
$iHex = "0x" & _Hex64($iDec)ConsoleWrite("Hex:" & @TAB & $iHex & @CRLF & "Dec:" & @TAB & Int($iHex, 2) & @CRLF)
[/autoit] -
So kannst du die Farben anpassen:
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]
Opt('GUIOnEventMode', 1)_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $iWidth = 400
[/autoit] [autoit][/autoit] [autoit]
Global $iHeight = 200Global $iColor_BG = 0xFF5555FF
[/autoit] [autoit][/autoit] [autoit]
Global $iColor_TextFill = 0xFFFFAA00
Global $iColor_TextBorder = 0xFFA00000Global $hGui = GUICreate("GDI+", $iWidth, $iHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
Global $hBmpBuffer = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)
Global $hGfxBuffer = _GDIPlus_ImageGetGraphicsContext($hBmpBuffer)
_GDIPlus_GraphicsSetSmoothingMode($hGfxBuffer, 2)
_GDIPlus_GraphicsClear($hGfxBuffer, $iColor_BG)Global $hPen = _GDIPlus_PenCreate($iColor_TextBorder, 3)
[/autoit] [autoit][/autoit] [autoit]
Global $hBrush = _GDIPlus_BrushCreateSolid($iColor_TextFill)GUIRegisterMsg($WM_PAINT, "WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_ERASEBKGND, "WM_ERASEBKGND")GUISetState()
[/autoit] [autoit][/autoit] [autoit]Global $hPath = _CreatePath("Text ;)")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Global $fStep = 0
While 1
$fStep += 0.025
_Draw(Abs(Sin($fStep)))
Sleep(10)
WEndFunc _Draw($fScale)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear($hGfxBuffer, $iColor_BG)DllCall($ghGDIPDll, "uint", "GdipTranslateWorldTransform", "hwnd", $hGfxBuffer, "float", -$iWidth / 2, "float", -$iHeight / 2, "int", False)
[/autoit] [autoit][/autoit] [autoit]
DllCall($ghGDIPDll, "uint", "GdipScaleWorldTransform", "hwnd", $hGfxBuffer, "float", $fScale, "float", $fScale, "int", True)
DllCall($ghGDIPDll, "uint", "GdipTranslateWorldTransform", "hwnd", $hGfxBuffer, "float", $iWidth / 2, "float", $iHeight / 2, "int", True)DllCall($ghGDIPDll, "uint", "GdipDrawPath", "hwnd", $hGfxBuffer, "hwnd", $hPen, "hwnd", $hPath)
[/autoit] [autoit][/autoit] [autoit]
DllCall($ghGDIPDll, "uint", "GdipFillPath", "hwnd", $hGfxBuffer, "hwnd", $hBrush, "hwnd", $hPath)DllCall($ghGDIPDll, "uint", "GdipResetWorldTransform", "hwnd", $hGfxBuffer)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_DrawFunc _CreatePath($sText)
[/autoit] [autoit][/autoit] [autoit]
Local $hFormat = _GDIPlus_StringFormatCreate()
Local $hFamily = _GDIPlus_FontFamilyCreate("Arial Black")Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
[/autoit] [autoit][/autoit] [autoit]
Local $tBounds = _GDIPlus_RectFCreate(0, 0, 0, 0)Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreatePath", "int", 0, "int*", 0)
[/autoit] [autoit][/autoit] [autoit]
If @error Or Not IsArray($aResult) Then Return SetError(1, 1, False)
Local $hPath = $aResult[2]DllCall($ghGDIPDll, "uint", "GdipAddPathString", "hwnd", $hPath, "wstr", $sText, "int", -1, "hwnd", $hFamily, "int", 1, "float", 100, "ptr", DllStructGetPtr($tLayout), "hwnd", $hFormat)
[/autoit] [autoit][/autoit] [autoit]
DllCall($ghGDIPDll, "uint", "GdipGetPathWorldBounds", "hwnd", $hPath, "ptr", DllStructGetPtr($tBounds), "hwnd", 0, "hwnd", 0)Local $hMatrix = _GDIPlus_MatrixCreate()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_MatrixTranslate($hMatrix, -DllStructGetData($tBounds, "X"), -DllStructGetData($tBounds, "Y"))
_GDIPlus_MatrixScale($hMatrix, $iWidth / DllStructGetData($tBounds, "Width"), $iHeight / DllStructGetData($tBounds, "Height"), True)
DllCall($ghGDIPDll, "uint", "GdipTransformPath", "hwnd", $hPath, "hwnd", $hMatrix)
_GDIPlus_MatrixDispose($hMatrix)_GDIPlus_FontFamilyDispose($hFamily)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_StringFormatDispose($hFormat)Return $hPath
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_CreatePathFunc WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINTFunc WM_ERASEBKGND($hWnd, $uMsgm, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawImage($hGraphics, $hBmpBuffer, 0, 0)
Return True
EndFunc ;==>WM_ERASEBKGNDFunc _Exit()
[/autoit]
DllCall($ghGDIPDll, "uint", "GdipDeletePath", "hwnd", $hPath)
_GDIPlus_PenDispose($hPen)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGfxBuffer)
_GDIPlus_BitmapDispose($hBmpBuffer)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Ich hab dir einfach ein paar globale Variablen an den benötigten Stellen eingesetzt. -
Zitat
Außerdem ist sie langsamer, als die Custom-Variante...
Wie das? Beide Funktionen machen den selben DllCall zur Funktion GdipDrawString in der gdiplus.dll. Der einzige Unterschied ist, dass die Custom Variante in der Funktion die benötigten Objekte erzeugt und löscht (bei jedem Aufruf) während DrawStringEx nur den DllCall beinhaltet und verlangt, dass du die Objekte selbst erstellst und bei jedem Aufruf per Parameter übergibst. Wenn die Funktion so oft hintereinander verwendet wird, sollte man meiner Meinung nach eher auf DrawStringEx zurückgreifen. -
Es freut mich zu hören, dass es zumindest bei einer Person funktioniert ^^. Zwei andere User (vermutlich Win 7) haben auch schon getestet und hatten das selbe Ergebnis wie ich.
Kann sich irgendjemand vorstellen wieso das scheinbar vom Betriebssystem abhängt? -
So wie du deinen Beitrag gestaltet hast, gehört das hier eher in Off-Topic... Und, wie Chris es schon angesprochen hat, bitte hör einfach auf Anfragen für deinen Updater zu stellen. Du bist ja noch nicht mal in der Lage die Bedenken von Usern bezüglich der Forenregeln zu klären und zwar in keinem deiner beiden Threads.
-
Vermutlich überwacht dein AV-System nur TCP/UDP Verkehr und lässt ICMP Requests ohne Nachfrage passieren. Ich hab das mit dem AV-Programm wohl irgendwie überlesen, sorry.
Du einfachste Möglichkeit die mir sonst einfällt wäre folgendes:Spoiler anzeigen
[autoit]TCPStartup()
[/autoit] [autoit][/autoit] [autoit]$hSocket = TCPConnect(TCPNameToIP("www.google.com"), 80)
[/autoit] [autoit][/autoit] [autoit]
If @error Then ConsoleWrite("Unable to connect" & @CRLF)
TCPCloseSocket($hSocket)TCPShutdown()
[/autoit] -
In folgendem Code tauchen sporadisch seltsame Fehler auf die ich mir momentan nicht wirklich erklären kann. Manchmal läuft der Code ohne Probleme durch, manchmal werden Fehler wie "undeclared Variable" angezeigt an Stellen wo gar keine Variable ist. Manchmal stürzt AutoIt ohne jegliche Rückmeldung ab.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
; -Author: name22 (http://www.autoit.de)Global Const $WT_EXECUTEDEFAULT = 0x00000000
[/autoit] [autoit][/autoit] [autoit]
Global Const $WT_EXECUTEINIOTHREAD = 0x00000001
Global Const $WT_EXECUTEINTIMERTHREAD = 0x00000020
Global Const $WT_EXECUTEINPERSISTENTTHREAD = 0x00000080
Global Const $WT_EXECUTELONGFUNCTION = 0x00000010
Global Const $WT_EXECUTEONLYONCE = 0x00000008
Global Const $WT_TRANSFER_IMPERSONATION = 0x00000100$hDll_Kernel32 = DllOpen("kernel32.dll")
[/autoit] [autoit][/autoit] [autoit]$hCallBack = DllCallbackRegister("_Callback", "NONE", "LPARAM;INT")
[/autoit] [autoit][/autoit] [autoit]
$hTimer = _CreateTimerQueueTimer($hCallBack, 12345, 200, 200, Default, Default, $hDll_Kernel32)ConsoleWrite("Before Callback" & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
Sleep(2000)ConsoleWrite("Deleting: " & _DeleteTimerQueueTimer($hTimer, 0, 0, $hDll_Kernel32) & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Sleep(1000)
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite("After Callback" & @CRLF)
[/autoit] [autoit][/autoit] [autoit]
DllClose($hDll_Kernel32)
DllCallbackFree($hCallBack)Func _Callback($lParam, $TimerOrWaitFired)
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("Callback Parameter: " & $lParam & @CRLF)
EndFuncFunc _CreateTimerQueueTimer($hTimer_Callback, $iParameter, $iDueTime, $iPeriod = 0, $iFlags = $WT_EXECUTEDEFAULT, $hTimerQueue = 0, $hDll_Kernel32 = "kernel32.dll")
[/autoit] [autoit][/autoit] [autoit]
Local $thTimerHandle = DllStructCreate("HANDLE")
Local $aRes = DllCall($hDll_Kernel32, "BOOL", "CreateTimerQueueTimer", "PTR", DllStructGetPtr($thTimerHandle), "HANDLE", 0, "PTR", DllCallbackGetPtr($hTimer_Callback), "INT", $iParameter, "DWORD", $iDueTime, "DWORD", $iPeriod, "ULONG", $iFlags)
If @error Then Return SetError(@error, @extended, 0)
If Not $aRes[0] Then Return SetError(2, 0, 0)
Return DllStructGetData($thTimerHandle, 1)
EndFuncFunc _DeleteTimerQueueTimer($hTimer, $hCompletionEvent = 0, $hTimerQueue = 0, $hDll_Kernel32 = "kernel32.dll")
[/autoit]
Local $aRes = DllCall($hDll_Kernel32, "BOOL", "DeleteTimerQueueTimer", "HANDLE", $hTimerQueue, "HANDLE", $hTimer, "HANDLE", $hCompletionEvent)
If @error Then Return SetError(@error, @extended, 0)
Return $aRes[0]
EndFunc
Hier sind noch die Links zu MSDN Artikeln der Kernelfunktionen die ich versuche zu verwenden:
http://msdn.microsoft.com/de-de/library/…esktop/ms682485
http://msdn.microsoft.com/de-de/library/…esktop/ms682569
Alle Timer werden für die Default TimerQueue erstellt, somit sollte das Löschen der Liste nicht nötig sein.PS: Ich suche nicht nach einer Alternative zu diesen Timern, sondern nach einer Lösung für dieses Problem ;).
-
Auch wenn ich mit diesem Script nicht ganz zufrieden bin, stelle ich es hier mal der Allgemeinheit zur Verfügung. Vielleicht kann es ja mal jemand gebrauchen.
Zumindest ist es ein Beispiel für die Umsetzung eines Windows Hooks auf die Computermaus, um die Mauszeigerbewegung abzufangen.Bei Hooks wird immer eine Callback Funktion angegeben, die von einem externen Prozess aus aufgerufen wird wenn ein bestimmtes Event eintritt. Von dieser Funktion hängt aber auch jede weitere Verwendung dieser Daten ab.
Ein großes Problem bei globalen Hooks ist die begrenzte Dauer der Callback Funktion. Wenn die Funktion zu lange dauert (z.B. +100ms) dann wird der vom Hook beanspruchte Teil des Systems(z.B. Mausposition) für alles andere verlangsamt (z.B. Cursorposition von Windows aktualisieren).
Ich habe deswegen das Auslesen der Mausdaten und alles andere Hook-Zeugs in ein zweites Script ausgelagert. Dieses zweite Script schickt nun bei jeder Bewegung des Mauszeigers dessen aktuelle Position mit einer Window Message (wie z.B. WM_MOVE) an das erste Script, das daraufhin die Bildschirmlupe aktualisiert. Im ersten Script muss man dann lediglich mit GUIRegisterMsg die MessageID registrieren.Das zweite Script ("TimerSlave.au3") muss zuerst gestartet werden und startet daraufhin das erste Script (sofern es den richtigen Namen trägt und im selben Verzeichnis ist).
Dieses Programm dürfte für jeden Interessant sein, der sich für Windows Hooks und interprozess Kommunikation interessiert. Außerdem ist es ein simples Beispiel, wie sich bestimmte zeitintensive Aufgaben bzw. Verwaltungsaufgaben auf andere Scripte auslagern und synchronisieren lassen. Schließlich reagiert das eine Script sofort, wenn das andere die Nachricht sendet. Und über wParam und lParam können Daten übertragen werden. -
Da wurde mein Vorschlag ja prompt umgesetzt :D.
Happy Birthday, Techmix!
Party Hard
Hoffentlich liest er das jetzt auch...
-
Wenn du den Rahmen etc. behalten willst, dann gäbe es auch folgende Möglichkeit:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GUIConstants.au3>; -Author: name22 (http://www.autoit.de)
[/autoit] [autoit][/autoit] [autoit]Global $bLock = False, $tRect_Pos
[/autoit] [autoit][/autoit] [autoit]Global $hWnd = GUICreate("Test", 200, 100)
[/autoit] [autoit][/autoit] [autoit]
Global $cButton_LockPos = GUICtrlCreateButton("Lock Window", 50, 35, 100, 30)
GUISetState()While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $cButton_LockPos
Switch $bLock
Case False
$tRect_Pos = _WinAPI_GetWindowRect($hWnd)
GUIRegisterMsg($WM_MOVING, "_Moving")
Case True
GUIRegisterMsg($WM_MOVING, "")
EndSwitch
$bLock = Not $bLock
EndSwitch
WEndFunc _Moving($hWnd, $iMsg, $wParam, $lParam)
[/autoit]
Local $tRect_Moving = DllStructCreate($tagRECT, $lParam)
For $i = 1 To 4
DllStructSetData($tRect_Moving, $i, DllStructGetData($tRect_Pos, $i))
Next
EndFunc -
Ich helfe dir gerne bei deinem Problem, vorausgesetzt du postest den Quellcode das nächste mal mit einem anderen Browser so dass man überhaupt lesen kann was das sein soll...

Ich hab mir jetzt ausnahmsweise die Mühe gemacht deinen Quellcode wieder zusammenzustückeln.Spoiler anzeigen
[autoit]#include<GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<Misc.au3>$karte = GUICreate("Karte erstellen", 600, 600, 200, 200)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($karte)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(600, 600, $hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)$kastchen = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\hintergrundelement.png")
[/autoit] [autoit][/autoit] [autoit]
$karaoben = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\bugnorth_y.png")$iX = 174
[/autoit] [autoit][/autoit] [autoit]
$iY = 174
$xkord = 174
$ykord = 174
$iWH = 29_GDIPlus_GraphicsDrawImageRect($hBitmap, $kastchen, $iX, $iY, 200, 200)
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To 9 ; Y
[/autoit] [autoit][/autoit] [autoit]
For $ii = 1 To 9 ; X
_GDIPlus_GraphicsDrawImageRect($hBuffer, _GDIPlus_ImageLoadFromFile(@DesktopDir & "\hintergrundelement.png"), $xkord, $ykord, $iWH, $iWH)
_GDIPlus_GraphicsDrawImage($hBuffer, $karaoben, $xkord, $ykord)
$xkord = $xkord + 28
Next
$ykord = $ykord + 28
$iX = 174
Next_GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 600, 600) ;Backbuffer (Bitmap) auf Frontbuffer (GUI) zeichnen
[/autoit] [autoit][/autoit] [autoit]While GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit]
WEnd; Ressourcen aus dem Speicher entfernen!
[/autoit]
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ImageDispose($kastchen)
_GDIPlus_ImageDispose($karaoben)
_GDIPlus_Shutdown()
Dein Script scheint zu Teilen zusammenkopiert zu sein, ohne dass du wirklich verstehst was passiert:
- Du hast bei deinem Script vergessen die Ressourcen am Scriptende wieder aus dem Speicher zu entfernen.
- Du zeichnest alles in den Backbuffer, ohne diesen je auf den Frontbuffer (die GUI) zu zeichnen.
- Du gibtst deinen Variablen missverständliche und schlecht gewählte Namen.
Falls ich mit einer Auffassung falsch liege, dann nichts für ungut. Wenn ich aber recht habe, dann schau dir doch bitte mal einige Tutorials in der Box mit der Aufschrift "Wichtige Links" links oben auf der Webseite neben den Beiträgen.
-
Handelt es sich um deine eigene AutoIt exe? Wenn ja, was spricht dagegen einen zuverlässigen Server (z.B. Google) anzupingen?
-
@heyhey Pushen ist hier nicht gerne gesehen, besonders nicht in so geringen zeitlichen Abständen und ohne jeglichen Inhalt außer "Kann mir mal eben jemand helfen" das hat dir auch schon autoBert hier gesagt. Es wäre mir Recht wenn du dir die Beiträge in deinem eigenen Thread mal durchliest und eventuelle Ratschläge wahrnimmst. Rückmeldungen zu Lösungsvorschlägen sind natürlich auch ein Muss.
-
Das habe ich mir schon gedacht, schließlich ist alles andere schief gelaufen :(... Trotzdem danke, BugFix ;).
Ich werde es vorerst mal offen lassen, vielleicht kommt ja noch zufällig jemandem eine Idee.
Ob ich das in Skripte posten sollte um zu zeigen wie man sowas machen könnte...
Mit Hooks und eigenen Windows Nachrichtencodes gibt es ja noch nicht sonderlich viele Scripte.