@Pee: Darf ich fragen, wie lange bei dir die Addition braucht?
derzeit bin ich insgesammt bei ca. 0.165, die Addition benötigt ca. 0.048
Und ich werde noch NICHT aufgeben!!!
(auch was scriptgröße betrifft...)
lgE
@Pee: Darf ich fragen, wie lange bei dir die Addition braucht?
derzeit bin ich insgesammt bei ca. 0.165, die Addition benötigt ca. 0.048
Und ich werde noch NICHT aufgeben!!!
(auch was scriptgröße betrifft...)
lgE
Yeah, jetzt wirds interessant ![]()
Und ich dachte zunächst, meine Lösung wär die langsamste ![]()
Hab noch etwas Speed optimiert...
Ich muß aber zugeben, daß die optimierte Version auf max 200-stellige Zahlen ausgelegt ist, wärend die alte auch weit längere Zahlen schaffen müsste.
lgE
UFF: erste erfolgreiche Version geschafft ![]()
Bin mit der Performance noch nicht zufrieden...
Aber zumindest funktionierts schon mal
lgE
//EDIT: Ups, da hatte ich wohl das falsche Archiv erwischt
jetzt ists meins!
In diesem Beispiel wird der Dll ein Array übergeben - Geht das überhaupt mit AutoIt?!?
Man kann jedoch die Funktion auch so aufrufen:
VLC_Init(1,0,Nil)
(erster Parameter ist die Instanz von VLC, zweiter Parameter die Größe des Arrays, 3 Parameter ist das Array)
also: 2 Param=0 und 3 Param=Nil - Funktioniert anscheinent in Delphi, aber wie kriegt man Nil in Autoit zustande? (Nil= Nichts oder None)
hab schon "" , 0 , Chr(0) und was weiß ich probiert...
Also:
1) Weiß jemand, wie man in Autoit mit DllCall ein Array als Parameter übergeben kann?
2) Wie Übergibt man den Delphiparameter "Nil"?
*Daumenhaltdaßunsdajemandhelfenkann*
;)E
//Edit: Das Array des 3 Parameters kann die normalen Commandlineparameter von VLC enthalten; Ein 1-Dimensionales Array mit "dvd://F:" würde z.b. eine DVD im Laufwerk F: abspielen usw...
Die Hexcodes bzw. die zugehörigen Konstanten findest du in der Datei "EditConstants.au3" (im AutoIt Include Ordner)
Dein Hexcode 0x00B7 Scrollt zum Carret (Cursor im Edit)
[autoit]GUICtrlSendMsg($Edit , "0xB5", 1, 0); $EM_SCROLL
[/autoit]
Scrollt rauf/runter; der erste Parameter kann folgende Werte haben:
0=Lineup
1=Linedown
2=Pageup
3=Pagedown
der zweite Parameter wird nicht benutzt
GUICtrlSendMsg($Edit , "0xB6", 5, -2); $EM_LINESCROLL
[/autoit]
Erster Parameter = Anzahl der Zeichen Horizontal scrollen
Zweiter Parameter = Anzahl der Zeilen Vertikal scrollen
bei negativen Werten in die andere Richtung...
lgE
Nein, ich denke mit VLC_PositionSet kann man an eine bestimmte Stelle des Videos fahren...
vielleicht video_set_visual?!?
Hast du erfolgreich VLC_Init ausgeführt? Wenn ja, dann bitte code posten ![]()
Es gibt da glaub ich noch die LibVLC.dll die sich einfach ansteuern lassen sollte.
mit einfachen dll-funktionen wie: VLC_Play, VLC_Pause, VLC_Stop ...
Kann grad nicht nachsehen, ob die bei der "normalen" Version schon dabei ist...
Das muß ich mir demnächst mal genauer ansehen, wenn ich mal wieder etwas Zeit hab...
lgE
Verstehe ich richtig: Ihr wollt anhand der Mauszeigerbewegung die Entfernungszurücklegung der Hardwaremaus ausrechnen?!?
erstmal GtaSpider hat Recht! Der Mauszeiger bewegt sich immer gleich, egal ob 14" Bildschirm, oder 70" Beamer ![]()
wenn man die Maus immer gleich bewegt, dann wird auch die selbe Strecke in Pixel zurückgelegt, egal ob 640x480 oder sonst irgendeine Auflösung eingestellt ist.
(DPI sind da irreführend, denn bei 14" ist die zurückgelegte Strecke (in inch) natürlich kleiner als bei größeren Displays)
Das große Problem ist die Mauszeigerbeschleunigung: Je schneller man die Maus bewegt, desto weiter wandert der Mauszeiger (bei gleicher Distanz der Hardwaremaus)
Ist die Beschleunigung aktiv?
Wie ist die Zeigergeschwindigkeit eingstellt?
Funktionieren alle Mäuse gleich? (optische Mäuse haben unterschiedliche DPI-Auflösungen)
usw...
lgE
Installier Oscars Script in ein Verzeichnis OHNE Leerzeichen, dann sollte es gehn... (also der komplette Pfad ohne Leerzeichen...)
Ich hab mein Passwort eingetragen (Post #10).
ACHTUNG!!! Bei Oscar muß beim Passwort das erste Leerzeichen mitgenommen werden!
Ich kenn mich nur in Dev-Pascal (freepascal) aus, da wird das so gemacht:
library TestDLL;
Function TestFunction(Text:PChar):Integer; export;
begin
writeln(Text);
result:=1;
end;
exports
TestFunction;
begin
writeln('TestDLL gestartet');
end.
Alles anzeigen
es reicht "library" ganz oben und die Funtion muß exportiert (freigegeben) werden, schon ist die Dll fertig ![]()
das ganze kompiliert und via Autoit aufgerufen
[autoit]DllCall(@ScriptDir & "\TestDLL.dll", "int", "TestFunction", "str", "Dieser Text wird übergeben")
[/autoit]ich nehme an, daß das mit C++ ähnlich funktioniert...
Dev-C++ von http://www.bloodshed.net kannst du kostenlos downloaden und hat auch eine DLL-Vorlage
EDIT: Sorry, hab´s mit C# verwechselt ![]()
lgE
Fast richtig!
entweder Timderdiff() *1000 *3600
oder Timerdiff() *3600000![]()
Du könntest es so machen:
[autoit]TimerDiff($startSktipt) >= $sktiptTime * 1000 * $zeitvorgabe Then Exit (0)
[/autoit]Sekunden: $zeitvorgabe=1
Minuten: $zeitvorgabe=60
Stunden: $zeitvorgabe=3600
usw...
lgE
OK, das funktioniert doch eingentlich ganz gut!
jedoch hab ich das Gefühl, daß das irgendwie anders gehen muß.
bei AutoHotKey geht das mit 3 Zeilen:
Macht AHK intern dasselbe wie RR04´s Beispiel, oder gibt es die Funktion Tab-Einfärben, muß jedoch erst in Autoit implementiert werden?!?
lgE
Tabs sind WindowsControls und keine AutoitControls, deshalb funktioniert GuiCtrlSetBkColor nicht.
https://autoit.de/index.php?page=Thread&postID=40747
wenn deine Tabs weiß sind, dann ist das wahrscheinlich in Windows so eingestellt:
Desktop -> Rechtsklick -> Eigenschaften -> Darstellung -> Erweitert...
(also ich nehm mal an, daß auf deinem Rechner auch Tabs von anderen Programmen weiß sind, oder?!)
lgE
So, habs wieder etwas erweitert:
größeres Spielfeld, Kanonen stehen jetzt immer am Boden, es gibt Gegen/Mit-Wind, KI etwas besser usw...
Natürlich ist da nichts perfekt, ich wollte eigentlich nur etwas mit Parabelflugbahnen experimentieren.
Und bei der Gelegenheit gleich mal etwas in GDI+ reinschnuppern...
Übrigens hab ich grad im englischen Forum gelesen, daß die _GDIPlus_GraphicsFillPolygon Funktion in der aktuellen Beta enthalten ist (hätte mir Arbeit erspart) ![]()
du machst ein extra script:
[autoit]While 1
Sleep(100)
If WinExists("Titel") Then WinClose("Titel")
WEnd
und compilierst dies z.b. zu KillWerbung.exe
in das Hauptscript schreibst am Anfang
[autoit]Run(@ScriptDir & "\KillWerbung.exe")
[/autoit]
und am Ende
ProcessClose("KillWerbung.exe")
[/autoit]KillWerbung.exe läuft somit gleichzeitig zu deinem Script und schließt das Werbefenster, falls es auftauchen sollte...
lgE
Hab mir ein kleines Spiel gebastelt
und vielleicht kann ja jemand die Funktion _GDIPlus_GraphicsFillPolygon gebrauchen:
Func _GDIPlus_GraphicsFillPolygon($hGraphics, $aPoints, $hBrush = 0)
Local $iI, $iCount, $pPoints, $tPoints, $aResult, $tmpError, $tmpExError
$iCount = $aPoints[0][0]
$tPoints = DllStructCreate("int[" & $iCount * 2 & "]")
$pPoints = DllStructGetPtr($tPoints)
For $iI = 1 To $iCount
DllStructSetData($tPoints, 1, $aPoints[$iI][0], (($iI - 1) * 2) + 1)
DllStructSetData($tPoints, 1, $aPoints[$iI][1], (($iI - 1) * 2) + 2)
Next
_GDIPlus_BrushDefCreate($hBrush)
$aResult = DllCall($ghGDIPDll, "int", "GdipFillPolygon2I", "hwnd", $hGraphics, "hwnd", $hBrush, "ptr", $pPoints, "int", $iCount)
$tmpError = @error
$tmpExError = @extended
_GDIPlus_BrushDefDispose()
If $tmpError Then Return SetError($tmpError, $tmpExError, False)
Return SetError($aResult[0], 0, $aResult[0] = 0)
EndFunc
Das Spiel:
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
Opt("PixelCoordMode",2)
Global $MainX=800
Global $MainY=600
Global $H1,$H2,$H3,$C_Angel,$C_Power,$Wind,$Rem=False
_SetValues()
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGui=GUICreate("Game",$MainX,$MainY)
GUISetBkColor(0x00FF00)
GUIRegisterMsg($WM_PAINT, '_Redraw')
$hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGui)
GUICtrlCreateLabel("Angle",50,$MainY-23,50,20)
GUICtrlSetColor(-1,0xFFFFFF)
$hAngle=GUICtrlCreateInput("45",10,$MainY-25,35,20,$ES_READONLY)
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1,80,0)
GUICtrlCreateLabel("Power",165,$MainY-23,50,20)
GUICtrlSetColor(-1,0xFFFFFF)
$hPower=GUICtrlCreateInput("70",120,$MainY-25,40,20,$ES_READONLY)
GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1,120,40)
$hFire=GUICtrlCreateButton("Fire",230,$MainY-25,55,20)
$hNew=GUICtrlCreateButton("New",340,$MainY-25,55,20)
GUISetState()
_CreateBK($H1,$H2,$H3)
While 1
$msg=GUIGetMsg()
If $msg=-3 Then ExitLoop
If $msg=$hNew Then
_SetValues()
_CreateBK($H1,$H2,$H3)
EndIf
If $msg=$hFire Then _Fire($H1,$H2)
Sleep(5)
WEnd
_GDIPlus_Shutdown()
[/autoit] [autoit][/autoit] [autoit]Func _Fire($H1,$H2)
Local $pi = 3.14159265358979
Local $ymax =0
Local $v = GUICtrlRead($hPower)
Local $alpha = GUICtrlRead($hAngle)*(-1)
Local $x_alt=0, $y_alt=0
Local $Treffer=False
Local $Gras=False
$hBrush_Del = _GDIPlus_BrushCreateSolid(0xFF0000FF)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF222222)
_ShotSound()
For $t=0 To 35 Step 0.3
$x = (cos($pi/180 *$alpha) * ($v-$Wind) * $t)
$y = (sin($pi/180 *$alpha) * $v * $t) - ( 0.5 * -9.81 * $t * $t )
PixelSearch(45+$x,$MainY-$H1-60+$y,45+$x+25,$MainY-$H1-60+$y+25,0x887766)
If Not @error Then $Treffer=True
If 45+$x>$MainX Then ExitLoop
If $MainY-$H1-60+$y>=$MainY-50 Then ExitLoop
PixelSearch(45+$x,$MainY-$H1-60+$y,45+$x+25,$MainY-$H1-60+$y+25,0x00FF00)
If Not @error Then $Gras=True
_GDIPlus_GraphicsFillPie($hGraphic,45+$x_alt,$MainY-$H1-60+$y_alt,25,25,0,360,$hBrush_Del)
_GDIPlus_GraphicsFillPie($hGraphic,45+$x,$MainY-$H1-60+$y,25,25,0,360,$hBrush)
$x_alt=$x
$y_alt=$y
If $Treffer=True Then ExitLoop
If $Gras=True Then ExitLoop
Sleep(20)
Next
_GDIPlus_GraphicsFillPie($hGraphic,45+$x_alt,$MainY-$H1-60+$y_alt,25,25,0,360,$hBrush_Del)
If $Treffer=True Then
$hBrush = _GDIPlus_BrushCreateSolid(0xAA000000)
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-60,$MainY-$H2-60,60,80,0,360,$hBrush)
_HitSound()
MsgBox(0,"Treffer","Hurra, du hast getroffen")
Else
;Computer Anfang
Sleep(500)
If $C_Power<20 Then $C_Power=20
If $C_Power>150 Then $C_Power=150
If $C_Angel<0 Then $C_Angel=0
If $C_Angel>80 Then $C_Angel=80
$v=$C_Power+$Wind
$alpha=$C_Angel*(-1)
$x_alt=0
$y_alt=0
$Gras=False
$Treffer=False
_ShotSound()
For $t=0 To 35 Step 0.3
$x = (cos($pi/180 *$alpha) * ($v+$Wind) * $t)
$y = (sin($pi/180 *$alpha) * $v * $t) - ( 0.5 * -9.81 * $t * $t )
If ($y*(-1))>$ymax Then $ymax=$y*(-1)
PixelSearch($MainX-75-$x,$MainY-$H2-60+$y,$MainX-75-$x+25,$MainY-$H2-60+$y+25,0x887766)
If Not @error Then $Treffer=True
If $MainX-75-$x<0 Then
If ($y*(-1))<$ymax Then
$C_Power-=Random(1,10,1)
If $Rem=True Then
$C_Angel+=Random(1,5,1)
$Rem=False
EndIf
Else
$C_Angel-=Random(3,10,1)
EndIf
ExitLoop
EndIf
If $MainY-$H2-60+$y>=$MainY-50 Then ExitLoop
PixelSearch($MainX-75-$x,$MainY-$H2-60+$y,$MainX-75-$x+25,$MainY-$H2-60+$y+25,0x00FF00)
If Not @error Then
If $MainX-75-$x < $MainX/2 Then
$C_Power+=Random(1,10,1)
Else
If ($y*(-1))<$ymax Then
$C_Power+=Random(10,20,1)
$C_Angel-=Random(1,5,1)
$Rem=True
Else
$C_Angel+=Random(3,10,1)
EndIf
EndIf
$Gras=True
EndIf
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-75-$x_alt,$MainY-$H2-60+$y_alt,25,25,0,360,$hBrush_Del)
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-75-$x,$MainY-$H2-60+$y,25,25,0,360,$hBrush)
$x_alt=$x
$y_alt=$y
If $Treffer=True Then ExitLoop
If $Gras=True Then ExitLoop
Sleep(20)
Next
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-75-$x_alt,$MainY-$H2-60+$y_alt,25,25,0,360,$hBrush_Del)
If $Treffer=True Then
$hBrush = _GDIPlus_BrushCreateSolid(0xAA000000)
_GDIPlus_GraphicsFillPie($hGraphic,5,$MainY-$H1-60,60,80,0,360,$hBrush)
_HitSound()
MsgBox(0,"Treffer","Schade, du bist tot")
EndIf
;Computer Ende
EndIf
EndFunc
Func _ShotSound()
Beep(200,10)
Beep(100,10)
Beep(200,10)
Beep(100,10)
EndFunc
Func _HitSound()
For $i=200 to 50 Step -20
Beep($i,1)
Beep($i*2,1)
Beep($i,1)
Beep($i*2,1)
Next
EndFunc
Func _CreateBK($H1,$H2,$H3)
Local $aPoints[13][2],$W=3
$hBrush = _GDIPlus_BrushCreateSolid(0xFF0000FF)
_GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $MainX, $MainY-60, $hBrush)
$hPen = _GDIPlus_PenCreate(0xFFFFFF00)
_GDIPlus_GraphicsDrawLine($hGraphic, $MainX/2,10,$MainX/2-$Wind*10,10,$hPen)
If $Wind < 0 Then $W=-3
_GDIPlus_GraphicsDrawLine($hGraphic, $MainX/2-$Wind*10,10,$MainX/2-$Wind*10+$W,7,$hPen)
_GDIPlus_GraphicsDrawLine($hGraphic, $MainX/2-$Wind*10,10,$MainX/2-$Wind*10+$W,13,$hPen)
$aPoints[0][0] = 12
$aPoints[1][0] = -50
$aPoints[1][1] = $MainY-$H1
$aPoints[2][0] = 50
$aPoints[2][1] = $MainY-$H1
$aPoints[3][0] = 180
$aPoints[3][1] = $MainY-$H1-($H3-$H1)/5
$aPoints[4][0] = $MainX/2
$aPoints[4][1] = $MainY-$H3
$aPoints[5][0] = $MainX-180
$aPoints[5][1] = $MainY-$H2-($H3-$H2)/5
$aPoints[6][0] = $MainX-50
$aPoints[6][1] = $MainY-$H2
$aPoints[7][0] = $MainX+50
$aPoints[7][1] = $MainY-$H2
$aPoints[8][0] = $MainX+51
$aPoints[8][1] = $MainY-$H2-1
$aPoints[9][0] = $MainX+50
$aPoints[9][1] = $MainY-55
$aPoints[10][0] = $MainX/2
$aPoints[10][1] = $MainY-55
$aPoints[11][0] = -50
$aPoints[11][1] = $MainY-55
$aPoints[12][0] = -51
$aPoints[12][1] = $MainY-$H1-1
$hBrush = _GDIPlus_BrushCreateSolid(0xFF00FF00)
_GDIPlus_GraphicsFillClosedCurve($hGraphic, $aPoints, $hBrush)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF887766)
_GDIPlus_GraphicsFillPie($hGraphic,11,$MainY-$H1-30,28,28,0,360,$hBrush)
$aPoints[0][0] = 4
$aPoints[1][0] = 15
$aPoints[1][1] = $MainY-$H1-25
$aPoints[2][0] = 35
$aPoints[2][1] = $MainY-$H1-45
$aPoints[3][0] = 55
$aPoints[3][1] = $MainY-$H1-25
$aPoints[4][0] = 35
$aPoints[4][1] = $MainY-$H1-5
_GDIPlus_GraphicsFillPolygon($hGraphic, $aPoints, $hBrush)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF443322)
_GDIPlus_GraphicsFillPie($hGraphic,15,$MainY-$H1-20,28,28,0,360,$hBrush)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF887766)
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-40,$MainY-$H2-30,28,28,0,360,$hBrush)
$aPoints[0][0] = 4
$aPoints[1][0] = $MainX-15
$aPoints[1][1] = $MainY-$H2-25
$aPoints[2][0] = $MainX-35
$aPoints[2][1] = $MainY-$H2-45
$aPoints[3][0] = $MainX-55
$aPoints[3][1] = $MainY-$H2-25
$aPoints[4][0] = $MainX-35
$aPoints[4][1] = $MainY-$H2-5
_GDIPlus_GraphicsFillPolygon($hGraphic, $aPoints, $hBrush)
$hBrush = _GDIPlus_BrushCreateSolid(0xFF443322)
_GDIPlus_GraphicsFillPie($hGraphic,$MainX-43,$MainY-$H2-20,28,28,0,360,$hBrush)
EndFunc
Func _SetValues()
$H1=Random(65,$MainY-180,1)
$H2=Random(65,$MainY-180,1)
$H3=Random(120,$MainY-50,1)
$C_Angel=Round((($H3-$H2)*100)/500+Random(-5,5,1),0)
If $C_Angel<40 Then $C_Angel=40
If $C_Angel>80 Then $C_Angel=80
$Wind=Random(-20,20,1)
$C_Power=40-$Wind+$C_Angel+Random(-5,5,1)
EndFunc
Func _Redraw()
_CreateBK($H1,$H2,$H3)
EndFunc
Func _GDIPlus_GraphicsFillPolygon($hGraphics, $aPoints, $hBrush = 0)
Local $iI, $iCount, $pPoints, $tPoints, $aResult, $tmpError, $tmpExError
$iCount = $aPoints[0][0]
$tPoints = DllStructCreate("int[" & $iCount * 2 & "]")
$pPoints = DllStructGetPtr($tPoints)
For $iI = 1 To $iCount
DllStructSetData($tPoints, 1, $aPoints[$iI][0], (($iI - 1) * 2) + 1)
DllStructSetData($tPoints, 1, $aPoints[$iI][1], (($iI - 1) * 2) + 2)
Next
_GDIPlus_BrushDefCreate($hBrush)
$aResult = DllCall($ghGDIPDll, "int", "GdipFillPolygon2I", "hwnd", $hGraphics, "hwnd", $hBrush, "ptr", $pPoints, "int", $iCount)
$tmpError = @error
$tmpExError = @extended
_GDIPlus_BrushDefDispose()
If $tmpError Then Return SetError($tmpError, $tmpExError, False)
Return SetError($aResult[0], 0, $aResult[0] = 0)
EndFunc
Viel Spaß ![]()
Du müsstest, wenn du das Tab3-Control löschst/erstellst auch alle darin befindlichen Controls löschen/erstellen.
Und das mit jedem AN/AUS-Buttonklick erneut.
Wie wärs mit folgendem Vorschlag:
#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]Global $Tab[4], $Button, $msg, $TabState=True, $CtrlStart, $CtrlEnd
[/autoit] [autoit][/autoit] [autoit]GUICreate("Test",400,300)
$Button=GUICtrlCreateButton("Aus",10,20,40,20)
GUICtrlCreateTab(10,60,380,230)
$Tab[1]=GUICtrlCreateTabItem("Tab 1")
GUICtrlCreateLabel("Ist nur in Tab1",20,100)
$Tab[2]=GUICtrlCreateTabItem("Tab 2")
GUICtrlCreateLabel("Ist nur in Tab2",20,100)
$Tab[3]=GUICtrlCreateTabItem("Tab 3")
$CtrlStart=GUICtrlCreateDummy()
GUICtrlCreateLabel("Ist nur in Tab3",20,100)
GUICtrlCreateInput("Blablabla",20,130)
;usw...
$CtrlEnd=GUICtrlCreateDummy()
GUISetState()
While 1
$msg=GUIGetMsg()
If $msg=-3 Then Exit
If $msg=$Button Then
$TabState= Not $TabState
_SetTabState()
EndIf
Sleep(5)
WEnd
Func _SetTabState()
If $TabState=True Then
GUICtrlSetData($Button,"Aus")
For $i=$CtrlStart+1 to $CtrlEnd-1
GUICtrlSetState($i,$GUI_SHOW)
Next
Else
GUICtrlSetData($Button,"An")
For $i=$CtrlStart+1 to $CtrlEnd-1
GUICtrlSetState($i,$GUI_HIDE)
Next
EndIf
EndFunc
Löscht NICHT das TabItem, sondern versteckt nur die Controls...
lgE
RegWrite("HKEY_CLASSES_ROOT\*\shell\Test\command","","REG_SZ",'"Test.Exe" "%1"')
;RegDelete("HKEY_CLASSES_ROOT\*\shell\Test")