Zitatdie hilfe ist doch ultra top secret
Ja, das merke ich jeden Tag in der Shoutbox sehr deutlich ![]()
Zitatdie hilfe ist doch ultra top secret
Ja, das merke ich jeden Tag in der Shoutbox sehr deutlich ![]()
Hi,
ZitatIch bin mir ebenfalls fast sicher, dass das mit autoit nicht möglich ist,
In der Hilfe von AutoIt findet man alles was man benötigt. Sehr schön übersetzt übrigens!
Fertige Scripte sind da allerdings nicht dabei, das hat auch seinen Grund....
um Pixel an einer bestimmten Position zu setzen verwende ich gerne
[autoit]#include <WindowsConstants.au3>
#include <WinAPI.au3>
HotKeySet("{ESC}","_exit")
Local $hDC, $hPen, $obj_orig
$hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
$hPen = _WinAPI_CreatePen($PS_SOLID, 1, 0x0000FF)
$obj_orig = _WinAPI_SelectObject($hDC, $hPen)
while 1
$x1=random(1,@DesktopWidth,1)
$y1=random(1,@Desktopheight,1)
_WinAPI_DrawLine($hDC, $X1, $Y1, $X1+1, $Y1+1)
wend
func _exit()
_WinAPI_RedrawWindow(_WinAPI_GetDesktopWindow(), 0, 0, $RDW_INVALIDATE + $RDW_ALLCHILDREN)
; clear resources
_WinAPI_SelectObject($hDC, $obj_orig)
_WinAPI_DeleteObject($hPen)
_WinAPI_ReleaseDC(0, $hDC)
exit
endfunc
Ich kapiere nichts mehr^^. Im Startpost war noch die Frage nach dem Starten einer mittels AutoIt-Script erstellten Batchdatei, mittlerweile ist man beim Setzen von Umgebungsvariablen angelangt....
ICH übergebe von AutoItscripten ermittelte Daten an Umgebungsvariablen so:
AutoItscript:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Beispiel.exe
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$Variable="HANSIMUELLER"
consolewrite($variable)
Batch:
Damit wird die letzte Zeile der Ausgabe der Beispiel.EXE dem meineVAR übergeben.
Alternativ könnte man auch die erste ausgegebene Zeile per
ausgeben.
Zum Starten der Batchdatei mit einem vom AutoItscript ermittelten Namen also:
AutoItscript:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=Beispiel.exe
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
$Variable="HANSIMUELLER.bat" ;batchnamen erstellen
filewrite($variable,"ECHO off"& @CRLF &"ECHO Hallo, hier ist die "&$variable) ;batch schreiben
consolewrite($variable) ;batchnamen ausgeben
[/autoit]
Batch:
Sry, habe das Procedere immer noch nicht verstanden
WER soll die Wxxxx.BAT denn aufrufen, der User der sich anmeldet? Oder soll diese Datei nacher "automatisch" aufgerufen werden....
Was ich nicht verstanden habe, wieso erstellst du eine Batchdatei, anstatt die dortigen Befehle direkt per AutoIt auszuführen?
Hallo,
Der "Call"-Befehl unterscheidet sich bei Verwendung innerhalb einer Batch Datei und in einem AutoIt-Script.
Um in einem AutoIt-Script eine externe Batch aufzurufen, verwendet man
ShellExecute() oder Run()
[/autoit]funktioniert "fast"^^
der Hintergrund ist jetzt schwarz mit Transparenz sowohl im Hintergrund, als auch in den Ziffern. Transparenz per Menü umschalten funktioniert jetzt
Hi,
wenn ich im Kontextmenü Transparenz ausgewähle, erscheint nur der Hintergrund als Fläche, ohne die Ziffern! WIN XP
Auch das updaten ändert nichts, beim Ändern einer anderen Farbe wird die gewählte Transparenz nicht wiederhergestellt, sondern 100% transparent ist default
Hallo,
das von Raupi angesprochene _stringencrypt() sollte erste Wahl sein, ansonsten wäre noch eine einfache XOR-Verschlüsselung mit einem großen Schlüssel (lustig ist eine öffentlich zugängliche Bilddatei^^) möglich. Ein einfaches XOR mit einem Zufalls-Schlüssel ist nicht zu knacken, für einfache Texte habe ich HIER ein Beispiel gemacht.
ZitatAuch in Andy's Beispiel flimmert der gefüllte Kreis, wenn du mit der Maus drüber fährst!
Ja, das kommt zwangsläufig durch die "drunterliegenden" Tasten, welche dann kurzzeitig erscheinen.
Ich wollte das per WM_Paint (Fenster(teile) neuzeichnen) abfangen, leider hab ich in meinem Programm garkeine GUI um das zu registrieren^^. In Vista/Win7 gibt es eine Funtion, um den Fensterrefresh doublezubuffern, damit wärs dann einfach. Hab aber nur XP...
GGf könnte man auch den Bereich, den die "Zeichnung" überdeckt, vom refreshen ausnehmen, ähnlich wie beim Beispiel zu
[autoit]_WinAPI_CombineRgn()
[/autoit]. Wenn man dort das Fenster TOPMOST macht und dann den transparenten Modus auswählt, kann man von den Buttons halb verdeckte Schalter der darunterliegenden GUI betätigen, ohne daß irgendetwas flimmert.
na klar ist das möglich...
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
$PID=run(@SystemDir&"\calc.exe") ;PID holen
winwaitactive("Rechner") ;warten bis rechner aktiv
_GDIPlus_Startup()
$hwnd=wingethandle("Rechner") ;handle des fensters holen
$breite=_WinAPI_GetWindowWidth($hWnd) ;breite & Hoehe des Fensters holen
$hoehe=_WinAPI_GetWindowheight($hWnd)
global $graphics=_GDIPlus_GraphicsCreateFromHwnd($hwnd);"leinwand" erstellen
global $hBitmap = _GDIPlus_BitmapCreateFromFile(@SystemDir & "\oobe\images\mslogo.jpg");bild holen
_GDIPlus_GraphicsDrawImage($graphics, $hBitmap, 0, 50);bild zeichnen
_GDIPlus_GraphicsFillEllipse($graphics,100,100,50,50);kreis zeichnen
_GDIPlus_GraphicsDrawEllipse($graphics,10,10,80,80);kreis zeichnen
adlibregister("PAINT",100) ;jede 100 ms die grafik auffrischen
[/autoit] [autoit][/autoit] [autoit]do
until not WinExists("Rechner") ;solange, bis rechner beendet wird
;aufräumen
_GDIPlus_GraphicsDispose($graphics)
_GDIPlus_ImageDispose($hbitmap)
_GDIPlus_Shutdown()
exit
Func PAINT() ;sorgt dafür, daß bei jedem neuzeichnen des Fensters auch die grafiken mitgezeichnet werden
_GDIPlus_GraphicsDrawImage($graphics, $hBitmap, 0, 50)
_GDIPlus_GraphicsFillEllipse($graphics,100,100,50,50)
_GDIPlus_GraphicsDrawEllipse($graphics,10,10,80,80)
EndFunc ;==>MY_WM_PAINT
so gehts auch sehr einfach
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$hgui = Guicreate("test",200,200,-1,-1,$WS_POPUP)
GUICtrlCreateLabel("", 0, 0, 200, 200, Default, $GUI_WS_EX_PARENTDRAG) ;verschieben des Fensters möglich machen durch ""2. Fenster"
GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 0, 0, 200, 200)
GUISetState()
do
until guigetmsg()=-3
ZitatNaja....war woll nicht ganz richtig...
Naja...knapp vorbei ist auch daneben^^
Mit der Scheitelfunktion kannst du Anhand der gegebenen Parabelfunktion den Scheitelpunkt ermitteln. Im Prinzip könntest du das benutzen um herauszubekommen, ob dein "Springer" das Spielfeld nach oben verlässt...
@SORUS
was du machen willst, ist mir klar! Was mir nicht klar ist, wieso übernimmst du nicht die SEuBo genannten Funktionen?
ENTWEDER dein Fenster ist ein Browserfenster und dann hast du sowieso keine Möglichkeiten mit den "normalen" AutoIt-Controls (controlclick) zu arbeiten, ODER das Fenster gehört zu einer Anwendung, deren Controls du per AutoIt-Befehlen beeinflussen kannst.
Aber in einem Browserfenster wirst du mit Controlclick nicht weit kommen...
Wenn der Button immer auf derselben Position ist, könntest du anhand der Fenstergröße den Bildausschnitt bestimmen und mit den Scrollfunktionen den Button "ins Bild" bringen und dann per Mouseclick() anklicken. Ob das mit jedem x-beliebigen Browser funktioniert sei dahingestellt. Aber solange noch auf so gut wie jedem Rechner der Internetzexplodierer installiert ist, würde ich die von SEuBo genannte Methode vorziehen!
Eigentlich habe ich für genau deinen Fall das PushTheButton-Script gebastelt. (hier im Forum)
Es scannt eine komplette Website nach dem "Bild" des vorher "abfotografierten" Buttons und klickt dann darauf. Ursprünglich wurden damit per Java/Javascript/Flash erstellete Abfragen der Website eines Bekannten automatisiert. Allerdings ist das dort eine statische Sache, da werden nur 2 verschiedene Browser benutzt und der Button ändert sich auch nicht täglich ^^. Und ins "unsichtbare" Fenster klicken ist damit natürlich auch nicht drin....
[autoit] Zitatdie Client-Area eines x-beliebigen Fensters auszulesen (Höhe und Breite)
_WinAPI_GetClientHeight ()
_WinAPI_GetClientWidth
_WinAPI_GetClientRect
ich weiß nicht woher deine Funktion kommt, aber mit den 3 Punkten (0;0) (25;25) (50;0) eingesetzt in die allgemeine quadratische Funktion y=ax^2+bx+c wird nach bissl Umformen:
y = -0,04 x^2 + 2x
und damit wird das auch eine Parrabel:
#include <GUIConstants.au3>
GUICreate('', 100, 100)
For $x = 1 To 50
ConsoleWrite($x & " " & y($x) & @CRLF)
GUICtrlCreateButton("", $x, Int(100 - y($x)), 5, 5)
Next
GUISetState()
Do
Until GUIGetMsg() = -3
Func y($x)
Return -0.04 * $x * $x + 2 * $x
EndFunc ;==>y
ZitatAber mich nervts das die Uhr stehen bleibt wenn man sie bewegt.
Aha, und wo ist dein Script mit einer "Lösungsmöglichkeit"? Wie dein Satz richtig heißt, hab ich für die Zukunft mal beispielsweise ausgeführt:
ZitatAber mich nervts das die Uhr stehen bleibt wenn man sie bewegt, daher habe ich das Script erweitert.
Bbenötigt wird die MouseSetOnEvent_UDF.au3
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <MouseSetOnEvent_UDF.au3>
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Dim $ws[12] = [0, 0, 10, -7, 50, -7, 60, 0, 50, 7, 10, 7] ;Koordinaten Polygonzug: von links nach rechts WAAGRECHTER Balken, von rechts nach links SENKRECHTER Balken
Dim $ziffer[10] = [239, 10, 118, 94, 154, 220, 253, 14, 254, 222] ;alle gesetzten bits des Indexes in der 7-segmentanzeige ergeben die Ziffer
Dim $balkenpos[8] = [0, "60.0", "0.0", "60.60", "0.60", "0.60", "0.120", "0.0"] ;position der Leuchtbalken der 7-Segmentanzeige innerhalb der Ziffer
Dim $p[7][2] ;nimmt die polygonzug-koordinaten zum Zeichnen auf
$p[0][0] = 6 ;6 Punkte im Polygonzug
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $hgui = GUICreate('Uhr', 620, 175, -1, -1, $WS_POPUP) ;GUI erstellen ohne Rahmen
Global $hWnd = WinGetHandle($hgui) ;Handle holen
Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd) ;"Leinwand" erstellen, auf der gezeichnet werden kann
GUICtrlCreateLabel("", 0, 0, 620, 175, Default, $GUI_WS_EX_PARENTDRAG) ;verschieben des Fensters möglich machen durch 2. Fenster
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ;das 2. Fenster transparent machen
GUISetBkColor(0x000000) ;Hintergrund der GUI schwarz
GUISetState() ;GUI anzeigen
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hgui)
AdlibRegister("_time", 1000) ;jede Sekunde ein Refresh der Zeitanzeige
_MouseSetOnEvent($MOUSE_PRIMARYDOWN_EVENT, "_PrimaryDown", "", "", $hGui, -1)
[/autoit] [autoit][/autoit] [autoit]Do ;Endlosschleife, solange bis..
sleep(100)
until 0 ;..ESC gedrückt wird
func _exit()
_GDIPlus_GraphicsDispose($hGraphic) ;freigeben
_GDIPlus_Shutdown()
Exit
endfunc
Func _time() ;Uhrzeit anzeigen :o)
$t=timerinit()
For $k = 1 To 6 ;die 6 Ziffern der Uhrzeit
$setbits = $ziffer[StringMid(String(@HOUR & @MIN & @SEC), $k, 1)] ;gesetzte Bits in der siebensegmentanzeige anhand der Ziffer in der Uhrzeit holen
For $bitnr = 7 To 1 Step -1 ;alle Bits durchlaufen
_drawpolygon(BitAND($setbits, 128), $k * 100 - 80+($k=1 or $k=3 or $k=5)*20, $bitnr) ;parameter: bit gesetzt ja/nein, position der gesamten ziffer,nummer des bits(gerade=waagrechter balken, ungerade=senkrechter balken)
$setbits = BitShift($setbits, -1) ;nächstes Bit holen
Next
Next
$brush = _GDIPlus_BrushCreateSolid(0xFF440000 + (@sec/2=int(@sec/2)) * 0xBB0000) ;Pinsel erstellen, wenn Ziffer gerade, dann farbig, ansonsten schwarz
_GDIPlus_GraphicsfillEllipse($hGraphic,202,55, 15,15,$brush) ;Punkte zeichnen
_GDIPlus_GraphicsfillEllipse($hGraphic,402,55, 15,15,$brush)
_GDIPlus_GraphicsfillEllipse($hGraphic,202,105,15,15,$brush)
_GDIPlus_GraphicsfillEllipse($hGraphic,402,105,15,15,$brush)
_GDIPlus_BrushDispose($brush) ;Pinsel auflösen
$m=timerdiff($t)
;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
EndFunc ;==>_time
[/autoit] [autoit][/autoit] [autoit]Func _drawpolygon($bit, $xpos, $bitnr) ;zeichnet einen polygonzug ("Balken") an die entsprechende Position
$t=timerinit()
$split = StringSplit($balkenpos[$bitnr], ".", 3) ;x- und y-koordinaten des Balkens innerhalb der Ziffer holen
$b = (($bitnr / 2) = Int($bitnr / 2)) ;$bit gerade => $b = true => Balken waagrecht, ansonsten Balken senkrecht
$step = -1 + 2 * $b ;schrittweite durch das $WS-Array
For $i = 11 - 11 * $b To 11 * $b Step 2 * $step ;array mit waagrechten (bit=gerade) oder (Bit=ungerade) senkrechten Balken füllen
$r = Int(Abs((11 * (Not ($b))) - $i) / 2) + 1 ;abhängig von der Reihenfolge, egal ob $i von 0 bis 11 oder von 11 bis 0, $r muss immer 1,2,3,4,5,6
$p[$r][0] = $ws[$i] + $split[0] + $xpos ;x- und
$p[$r][1] = $ws[$i + $step] + $split[1] + 30 ;y-position in das polygonarray schreiben
Next
$brush = _GDIPlus_BrushCreateSolid(0xFF440000 + ($bit <> 0) * 0xBB0000) ;wenn bit gesetzt, dann farbig, ansonsten schwarz
_GDIPlus_GraphicsFillPolygon($hGraphic, $p, $brush) ;Balken zeichnen
_GDIPlus_BrushDispose($brush)
$m=timerdiff($t)
; ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $m = ' & $m & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
EndFunc ;==>_drawpolygon
Func _PrimaryDown() ;falls maus im fenster gedrückt wird
AdlibunRegister("_time") ;abschalten
_time()
AdlibRegister("_time", 1000) ;jede Sekunde ein Refresh der Zeitanzeige
Return 0 ;Do not Block the default processing
EndFunc
Hallo,
toller Geschwindigkeitszuwachs! ![]()
ZitatWird in der zukünftigen Version auch wieder ein Automatischer Durchlauf unterstützt? Es nervt mich immer, noch extra auf ein Button klicken zu müssen
Habe das bei mir folgendermaßen gelöst: OI ist bei mir im "silent mode" auf die F2-Taste gelegt. Ich starte mit Scite zusammen ein Script, welches das AU3Checkerrors-Fenster abfängt und bei entsprechenden Fehlermeldungen (alles was mit fehlenden/falschen Deklarationen usw. zu tun hat) automatisch das Errorfenster schließt und danach ein F2 (für OI) an Scite sendet. Das hat sogar den Vorteil, daß das Error-Fenster sofort verschwindet, in der Console stehen die Fehler ja auch drin.
Nun hat OI so sehr an Geschwindigkeit gewonnen, ich warte die alpha_0.0.0.2 garnicht erst ab^^
ZitatAndy: Danke funzt super, bitte nimm es mir nicht übel, wenn ich bei meinem Quelltext bleibe, ...
Ich nehm nix übel, wieso auch, jeder macht sein eigenes Ding und wird glücklich damit!
Ich bewundere nur immer diese Fleißarbeit, hunderte Zeilen Code zu erstellen!
Zitat...da ich das mit den Bits noch nicht so wirklich verstehe.
Wichtig ist, dass es funktioniert! Und irgendwann kommt das knowhow von ganz alleine wenn man sich etwas mit der Materie beschäftigt und Interesse hat. Dann wird man ganz automatisch zu faul sich die Finger wund zu tippen und sucht schnellere / einfachere Möglichkeiten!
Wobei ich zugeben muß, es mit dem obigen Script teilweise etwas übertrieben zu haben. Debuggen möchte ich das nicht^^