So... Habe mal aus Langeweile einen neuen Style für die ToolTip UDF gemacht.
Und ein cooleres Beispiel ist jetzt auch mit dabei. Erwartet aber nicht zuviel, da ich es erstens wie gesagt aus Langeweile gemacht habe und zweitens auch keine guten Ideen für einen neuen Style einfallen wollen.
Falls ihr Ideen oder andere Verbesserungsvorschläge habt, dann teilt es mir mit
.
Beiträge von name22
-
-
Zitat
explorer.exe kilen?^^
Prima Idee
.... -
Zitat
Und Buttons und so kann man nichtmehr anklicken, wenn amn die übermalt.
Ja, mein Script macht im Prinzip nur die sichtbaren Teile des Fensters klickbar... Aber ist das ein problem? Ich meine wieso sollte ich unbedingt etwas anklicken wollen, wenn ich es noch nicht einmal sehen kann? Ich hatte bis jetzt auch nie das verlangen, durch das Firefox Fenster hindurch auf meinem Dekstop herumzuklicken
. -
Bei FilePut musst du als erstes den Pfad der lokalen Datei angeben, und dann den Zielpfad auf dem FTP Server ;).
-
So?
Spoiler anzeigen
[autoit]Dim $erstezahl, $zweitezahl, $ergebnis, $auswahl
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
$auswahl = InputBox("Auswählen:", _
"Was möchtest du amchen?" & _
@LF & "Addieren (1)" & _
@LF & "Subtrahieren (2)" & _
@LF & "Multiplizieren (3)" & _
@LF & "Dividieren (4)", "1")Switch $auswahl
[/autoit] [autoit][/autoit] [autoit]
case 1
_add()
case 2
_sub()
case 3
_multi()
case 4
_divi()
case Else
MsgBox(0, "Error", "Dies ist eine ungültige Funktion!", 5)
Exit
EndSwitch
If MsgBox(69, "Ergebnis", "Das Ergebnis ist: " & $ergebnis &".") <> 4 Then Exit
WEndFunc _add()
[/autoit] [autoit][/autoit] [autoit]
$erstezahl = Inputbox("1. Zahl", "Bitte hier die erste Zahl eingeben.")
$zweitezahl = Inputbox("2. Zahl", "Bitte hier die zweite Zahl eingeben.")
$ergebnis = $erstezahl + $zweitezahl
EndFuncFunc _sub()
[/autoit] [autoit][/autoit] [autoit]
$erstezahl = Inputbox("1. Zahl", "Bitte hier die erste Zahl eingeben.")
$zweitezahl = Inputbox("2. Zahl", "Bitte hier die zweite Zahl eingeben.")
$ergebnis = $erstezahl - $zweitezahl
EndFuncFunc _multi()
[/autoit] [autoit][/autoit] [autoit]
$erstezahl = Inputbox("1. Zahl", "Bitte hier die erste Zahl eingeben.")
$zweitezahl = Inputbox("2. Zahl", "Bitte hier die zweite Zahl eingeben.")
$ergebnis = $erstezahl * $zweitezahl
EndFuncFunc _divi()
[/autoit]
$erstezahl = Inputbox("1. Zahl", "Bitte hier die erste Zahl eingeben.")
$zweitezahl = Inputbox("2. Zahl", "Bitte hier die zweite Zahl eingeben.")
$ergebnis = $erstezahl / $zweitezahl
EndFunc -
Scheinbar wird die 2te GUI immer deaktiviert, weil sie sonst vor dem 1ten Fenster währe.
Du kannst den _WinApi_SetWindowPos Befehl entfernen, aber musst dann auch darauf verzichten, dass auch über Fenster wie TaskManager etc. gezeichnet werden kann. -
Zitat
Für was ist dieser Teil deines Skriptes zuständig?
Damit wird das im Vorschaufenster angezeigte Bild, z.B. im Falle einer Überlappung, neugezeichnet ;). Das ist nötig, weil eine GDI+ Grafik sich im Gegensatz zu den restlichen Controls nicht slbstständig neuzeichnet sobald das WM_PAINT Event an die GUI gesendet wurde. -
Du musst bei den beiden letzten Parametern von _ScreenCapture_Capture auch die rechte und untere Kante des Rechtecks angeben, nicht die Breite und Höhe ;).
-
Zitat
Kurze Nachfrage: Auch wenn das Programm z.B. 2-3 Stunden laeuft, ist das immer noch nicht schlimm, oder?
Doch, es sollen teilweise schon PCs von der großen Last regelrecht explodiert sein
. Nein im Ernst du kannst mir vertrauen, auch nach 2-3 Stunden wird diese Funktion deinen Prozessor kaum mehr auslasten als Warcraft 3 ;). -
Zitat
Es funktioniert jetzt, aber ich habe etwas "Angst", dass, wenn da ununterbrochen was weiss ich wie oft in der Minute das abgefragt wird, es schlecht fuer die Performance ist?
Das glaube ich kaum, weder BitAnd noch WinGetState sind besonders Prozessorlastig. Aber wenn du so große "Performance-Angst" hast kannst du ja den TaskManager verwenden um die Prozessorauslastung auszulesen und einen Test mit TimerInit und TimerDiff machen um den Zeitverbrauch der If Abfrage zu messen ;). -
Du kannst es ja mal mit dieser Zeile versuchen.
[autoit]If BitAND(WinGetState($hWnd), 2) <> 2 Then _WinAPI_SetWindowPos($hWnd, $HWND_TOPMOST, 0, 0, 0, 0, BitOR($SWP_NOSIZE, $SWP_NOMOVE))
[/autoit]
Als Include benötigst du die WinAPI.au3 und die Constants.au3. -
Zitat
steht das in der Konsole unten:
Skype hat eine Konsole?!
-
Zitat
oder ist das eine Standard-DLL von Windows 7?
Kann ich mir nicht vorstellen...
Ich würde einfach die _ScreenCapture_Capture Funktion verwenden
. (Wo du doch sowieso schon die ScreenCapture.au3 includest
). -
Zitat
Vielleicht lag es daran , dass ich ihm Fenster Modus spiele

Ja, das wäre gut möglich...
-
Hab den Befehl wiedergefunden :D.
So kann man zumindest schon mal auf den TaskManager zeichnen... Aber ob das jetzt auch bei DirectX Anwendungen klappt
.Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
#include <Constants.au3>Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]HotKeySet("{ESC}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]$vU32DLL = DllOpen("User32.dll")
[/autoit] [autoit][/autoit] [autoit]$iGUIColorBG = 0xFFFFFFFF
[/autoit] [autoit][/autoit] [autoit]
$iGUIWidth = @DesktopWidth
$iGUIHeight = @DesktopHeight$hWnd = GUICreate("Test", $iGUIWidth, $iGUIHeight, 0, 0, BitOR(0x80000000, 0x08000000), BitOR(0x00080000, 0x00000008, 0x00000080))
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)$hPen = _GDIPlus_PenCreate(0xFF000000, 2)
[/autoit] [autoit][/autoit] [autoit]$hDC = _WinAPI_GetDC($hWnd)
[/autoit] [autoit][/autoit] [autoit]
$hCDC = _WinAPI_CreateCompatibleDC($hDC)$tSize = DllStructCreate($tagSIZE)
[/autoit] [autoit][/autoit] [autoit]
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", $iGUIWidth)
DllStructSetData($tSize, "Y", $iGUIHeight)
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", 255)
DllStructSetData($tBlend, "Format", 1)
$tPoint = DllStructCreate($tagPOINT)
$pPoint = DllStructGetPtr($tPoint)
DllStructSetData($tPoint, "X", 0)
DllStructSetData($tPoint, "Y", 0)GUIRegisterMsg($WM_PAINT, "_ReDraw")
[/autoit] [autoit][/autoit] [autoit]
$aMousePosOld = MouseGetPos()While True
[/autoit] [autoit][/autoit] [autoit]
$aMousePosNew = MouseGetPos()
If _IsPressed("A3", $vU32DLL) Or _IsPressed("A2", $vU32DLL) Then
If $aMousePosOld[0] <> $aMousePosNew[0] Or $aMousePosOld[1] <> $aMousePosNew[1] Then _GDIPlus_GraphicsDrawLine($hBuffer, $aMousePosOld[0], $aMousePosOld[1], $aMousePosNew[0], $aMousePosNew[1], $hPen)
_ReDraw()
EndIf
If BitOR(WinGetState($hWnd), 2) <> 2 Then _WinAPI_SetWindowPos($hWnd, $HWND_TOPMOST, 0, 0, 0, 0, BitOR($SWP_NOMOVE, $SWP_NOSIZE))
$aMousePosOld = $aMousePosNew
WEndFunc _ReDraw()
[/autoit] [autoit][/autoit] [autoit]
Local $hBitmapTmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
_WinAPI_SelectObject($hCDC, $hBitmapTmp)
_WinAPI_UpdateLayeredWindow($hWnd, $hDC, 0, $pSize, $hCDC, $pSource, 0, $pBlend, 2)
_WinAPI_DeleteObject($hBitmapTmp)
EndFuncFunc _Exit()
[/autoit]
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_PenDispose($hPen)
_GDIPlus_Shutdown()
DllClose($vU32DLL)
Exit
EndFunc
Edit: Mit linker oder rehcter Strg Taste zeichnen. -
Zitat
Mit GDI+ gehts, aber es flackert dann sehr stark
Ist ja auch logisch, wenn du versuchst auf ein Fenster zu malen während eine andere Anwendung gerade das selbe, womöglich noch mit einer anderen Framerate, macht...
Man kann versuchen das Fenster über alle "OnTop" Fenster (z.B. Task Manager, oder viele PC Spiele) zu setzen. Ich habe mal einen _WinApi Befehl dafür gefunden, aber ich weiß nicht mehr wie dieser heißt... :pinch: -
Zitat
wie bekommt man das hin, dass man mit euren programmen auch in Direct X anwendungen malen kann?
Das geht so leider nicht ;). Und ich bin mir nicht mal sicher, ob es überhaupt in AutoIt möglich ist...
-
Zitat
name22: Dein script klappt bei mir nicht , keine ahnung warum. Habe auch die DLLCLose funktion eingebaut
Bei mir funktioniert es... Versuch mal die rechte STRG Taste bei _IsPressed durch eine andere Taste zu ersetzen. -
Dein Code macht für mich wenig Sinn... Eine If Abfrage wartet nicht bis ihre Bedingung erfüllt wurde. Eine EndlosSchleife macht da mehr Sinn ;).
Das hier wäre eine Möglichkeit... Wobei ich nicht verstehe wozu du die Variable $x brauchst.Spoiler anzeigen
[autoit]#include <Misc.au3>
[/autoit] [autoit][/autoit] [autoit]$dll = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]
$x = 0While Sleep(20)
[/autoit] [autoit][/autoit] [autoit]
If _IsPressed("01", $dll) And $x = 0 And (_IsPressed("A2", $dll) Or _IsPressed("A3", $dll)) Then
MsgBox(64, "test", "klick 1")
$x = 1 ; Was genau bringt diese Variable?
ExitLoop
EndIf
WEndWhile Sleep(20)
[/autoit] [autoit][/autoit] [autoit]
If _IsPressed("01", $dll) And (_IsPressed("A2", $dll) Or _IsPressed("A3", $dll)) Then
MsgBox(64, "test", "klick 2")
ExitLoop
EndIf
WEndDllClose($dll)
[/autoit]
Für mich sieht es allerdings so aus, als hättest du etwas ähnliches bereits versucht und dann wieder entfernt
. -
Zitat
neee, das war der ganze quellcode.
Das kann alleine schon deswegen nicht stimmen weil das #include <Misc.au3>, welches zur korrekten Funktionalität des Scriptes notwendig ist, fehlt.
In diesem Codeschnipsel kann ich kein wirkliches Problem erkennen... Und da ich keine Glaskugel für Wahrsager wie AutoBert habe und seine gerade vermutlich wieder einmal in Reparatur ist bräuchten wir schon einen vollständigen Code...