Danke, Danke für die Glückwünsche!
Freu mich total, zu der Autoit.de Gemeinde zu gehören!
Danke, Danke für die Glückwünsche!
Freu mich total, zu der Autoit.de Gemeinde zu gehören!
Hi
Einfachste Mögichkeit:
Du übergibst einen Commandlineparameter:
Script1:
[autoit]Run(@ScriptDir & "\Script2.exe OK")
[/autoit]
Script2:
If $CmdLine[0] <> 1 Then Exit
If $CmdLine[1] <> "OK" Then Exit
MsgBox(0, "Hurra", "Script 2 wurde erfolgreich gestartet")
[/autoit]2 Möglichkeit:
Du checkst, ob die PID ein Childprocess vom PID (Fenstertitel) ist:
Script1:
GUICreate("Script 1")
GUISetState()
Runwait(@ScriptDir & "\Script2.exe")
Script2:
$iPidParent = WinGetProcess("Script 1")
$aChildProcesses = _ProcessGetChildren($iPidParent)
If @error Then Exit
$bRun = False
For $i = 1 To $aChildProcesses[0][0]
If $aChildProcesses[$i][0] = @AutoItPID Then $bRun = True
Next
If $bRun = False Then Exit
MsgBox(0, "Hurra", "Script 2 wurde erfolgreich gestartet")
[/autoit][autoit][/autoit][autoit]Func _ProcessGetChildren($i_pid) ; First level children processes only
Local Const $TH32CS_SNAPPROCESS = 0x00000002
Local $a_tool_help = DllCall("Kernel32.dll", "long", "CreateToolhelp32Snapshot", "int", $TH32CS_SNAPPROCESS, "int", 0)
If IsArray($a_tool_help) = 0 Or $a_tool_help[0] = -1 Then Return SetError(1, 0, $i_pid)
Local $tagPROCESSENTRY32 = _
DllStructCreate _
( _
"dword dwsize;" & _
"dword cntUsage;" & _
"dword th32ProcessID;" & _
"uint th32DefaultHeapID;" & _
"dword th32ModuleID;" & _
"dword cntThreads;" & _
"dword th32ParentProcessID;" & _
"long pcPriClassBase;" & _
"dword dwFlags;" & _
"char szExeFile[260]" _
)
DllStructSetData($tagPROCESSENTRY32, 1, DllStructGetSize($tagPROCESSENTRY32))
Local $p_PROCESSENTRY32 = DllStructGetPtr($tagPROCESSENTRY32)
Local $a_pfirst = DllCall("Kernel32.dll", "int", "Process32First", "long", $a_tool_help[0], "ptr", $p_PROCESSENTRY32)
If IsArray($a_pfirst) = 0 Then Return SetError(2, 0, $i_pid)
Local $a_pnext, $a_children[11][2] = [[10]], $i_child_pid, $i_parent_pid, $i_add = 0
$i_child_pid = DllStructGetData($tagPROCESSENTRY32, "th32ProcessID")
If $i_child_pid <> $i_pid Then
$i_parent_pid = DllStructGetData($tagPROCESSENTRY32, "th32ParentProcessID")
If $i_parent_pid = $i_pid Then
$i_add += 1
$a_children[$i_add][0] = $i_child_pid
$a_children[$i_add][1] = DllStructGetData($tagPROCESSENTRY32, "szExeFile")
EndIf
EndIf
While 1
$a_pnext = DllCall("Kernel32.dll", "int", "Process32Next", "long", $a_tool_help[0], "ptr", $p_PROCESSENTRY32)
If IsArray($a_pnext) And $a_pnext[0] = 0 Then ExitLoop
$i_child_pid = DllStructGetData($tagPROCESSENTRY32, "th32ProcessID")
If $i_child_pid <> $i_pid Then
$i_parent_pid = DllStructGetData($tagPROCESSENTRY32, "th32ParentProcessID")
If $i_parent_pid = $i_pid Then
If $i_add = $a_children[0][0] Then
ReDim $a_children[$a_children[0][0] + 11][2]
$a_children[0][0] = $a_children[0][0] + 10
EndIf
$i_add += 1
$a_children[$i_add][0] = $i_child_pid
$a_children[$i_add][1] = DllStructGetData($tagPROCESSENTRY32, "szExeFile")
EndIf
EndIf
WEnd
If $i_add <> 0 Then
ReDim $a_children[$i_add + 1][2]
$a_children[0][0] = $i_add
EndIf
DllCall("Kernel32.dll", "int", "CloseHandle", "long", $a_tool_help[0])
If $i_add Then Return $a_children
Return SetError(3, 0, 0)
EndFunc ;==>_ProcessGetChildren
lgE
Hi
muß auch sagen, daß es etwas sinnlos ist... hab aber trotzdem eine Formelauswertung geschrieben.
Das treibende Element war, daß ich mich endlich mal mit StringRegExp auseinandersetzen wollte
und es hat geholfen!
Ich glaub jetzt hab ich die regular expressions endlich durchschaut
Ich denke mal, ich brauche es nicht Passworten
(Außer es kommt noch ein weiterer Teilnehmer...)
Global $aFormel[5]
$aFormel[0] = "sqrt(10^5)*log(25)"
$aFormel[1] = "(2* sin(20)^2)/(-sqrt(120)-cos(20))"
$aFormel[2] = "sin(20)"
$aFormel[3] = "sin 20"
$aFormel[4] = "10 mod 3"
For $i = 0 To 4
MsgBox(0, $i, 'Formel: "' & $aFormel[$i] & '"' & @LF & @LF & "Mein Ergebnis: " & _evaluate($aFormel[$i]) & @LF & "Autoit Ergebnis: " & Execute($aFormel[$i]))
Next
MsgBox(0, "Ergebnis", _evaluate(InputBox("Formelauswertung", "Bitte Formel eingeben:")))
[/autoit] [autoit][/autoit] [autoit]Func _evaluate($sForm, $bStart = True)
If $bStart Then
Local $KL, $KR
$sForm = StringStripWS($sForm,
$KL = StringRegExp($sForm, "\(", 3)
$KR = StringRegExp($sForm, "\)", 3)
If UBound($KL) <> UBound($KR) Then Return SetError(1, 0, "Klammer Fehler")
EndIf
Local $aFunc[9] = ["sin", "cos", "tan", "asin", "acos", "atan", "sqrt", "exp", "log"]
Local $aCalc[6] = ["[\^]", "\*", "\/", "mod", "\-", "\+"]
Local $aRet, $iRes
While StringRegExp($sForm, "\([^\(]*?\)")
$aRet = StringRegExp($sForm, "\([^\(]*?\)", 1)
If Not @error Then
$iRes = _evaluate(StringTrimRight(StringTrimLeft($aRet[0], 1), 1), False)
$sForm = StringRegExpReplace($sForm, "\([^\(]*?\)", $iRes, 1)
EndIf
WEnd
For $i In $aFunc
While StringRegExp($sForm, "(?i)" & $i & "[0-9.]*")
$aRet = StringRegExp($sForm, "(?i)" & $i & "[0-9.]*", 3)
If Not @error Then
$iRes = _Calc($i, StringTrimLeft($aRet[0], StringLen($i)))
$sForm = StringRegExpReplace($sForm, "(?i)" & $i & "[0-9.]*", $iRes, 1)
EndIf
WEnd
Next
While StringRegExp($sForm, "[\^\+\-\*\/]|mod")
For $i In $aCalc
$aRet = StringRegExp($sForm, "\-?[0-9.]*" & $i & "\-?[0-9.]*", 3)
If Not @error And $aRet[0] <> $sForm Then
$iRes = _evaluate($aRet[0])
$sForm = StringRegExpReplace($sForm, "\-?[0-9.]*" & $i & "\-?[0-9.]*", $iRes, 1)
ElseIf Not @error And $aRet[0] = $sForm Then
Return _Calc($i, $sForm)
EndIf
Next
WEnd
Return $sForm
EndFunc ;==>_evaluate
Func _Calc($sOp, $sExpr)
Local $aExpr
Switch String($sOp)
Case 'sin'
Return Sin($sExpr)
Case 'cos'
Return Cos($sExpr)
Case 'tan'
Return Tan($sExpr)
Case 'asin'
Return ASin($sExpr)
Case 'acos'
Return ACos($sExpr)
Case 'atan'
Return ATan($sExpr)
Case 'sqrt'
Return Sqrt($sExpr)
Case 'exp'
Return Exp($sExpr)
Case 'log'
Return Log($sExpr)
Case '[\^]'
$aExpr = StringSplit($sExpr, "^")
Return $aExpr[1] ^ $aExpr[2]
Case '\+'
$aExpr = StringSplit($sExpr, "+")
Return $aExpr[1] + $aExpr[2]
Case '\-'
Local $aTmp[2] = [0, 0]
$aExpr = StringRegExp($sExpr, "\-?[0-9.]+\-?", 3)
If UBound($aExpr) < 2 Then $aExpr = $aTmp
$aTmp = StringRegExp($sExpr, "\-?[0-9.]+", 1)
If UBound($aTmp) >= 1 Then $aExpr[0] = $aTmp[0]
Return $aExpr[0] - $aExpr[1]
Case '\*'
$aExpr = StringSplit($sExpr, "*")
Return $aExpr[1] * $aExpr[2]
Case '\/'
$aExpr = StringSplit($sExpr, "/")
Return $aExpr[1] / $aExpr[2]
Case 'mod'
$aExpr = StringSplit($sExpr, "mod")
Return Mod($aExpr[1], $aExpr[$aExpr[0]])
Case Else
Return $sExpr
EndSwitch
EndFunc ;==>_Calc
lgE
Hi
Danke ich habs geschafft!
Die ersten beiden Koordinaten sind X/Y vom Startpunkt.
Ab dem "c" kommen die Koordinaten der 4 Viertelkreise im Dreierpack.
Jeweils die letzten sind dann X/Y vom Virtelkreisende...
Somit kann ich nun Mittelpunkt und Radius ausrechnen.
Hi
Folgendes SVG beinhaltet einen kreisförmigen Pfad:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Creator: CorelDRAW -->
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="210mm" height="297mm" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
viewBox="0 0 210 297"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<style type="text/css">
<![CDATA[
.fil0 {fill:black;fill-rule:nonzero}
]]>
</style>
</defs>
<g id="Ebene_x0020_1">
<metadata id="CorelCorpID_0Corel-Layer"/>
<path class="fil0" d="M166.693 128.177c0,-35.4412 -28.735,-64.1762 -64.1762,-64.1762 -35.5434,0 -64.2784,28.735 -64.2784,64.1762 0,35.5434 28.735,64.2784 64.2784,64.2784 35.4412,0 64.1762,-28.735 64.1762,-64.2784z"/>
</g>
</svg>
Alles anzeigen
Wie kann ich den Pfad in einen richtigen Kreis (X,Y,Radius) umwandeln?
bzw. für was stehen die einzelnen Koordinaten im Pfad?
Das erste ist natürlich der Anfangspunkt, aber wie gehts dann weiter?
<path class="fil0" d="M166.693 128.177c0,-35.4412 -28.735,-64.1762 -64.1762,-64.1762 -35.5434,0 -64.2784,28.735 -64.2784,64.1762 0,35.5434 28.735,64.2784 64.2784,64.2784 35.4412,0 64.1762,-28.735 64.1762,-64.2784z"/>
Ich hoffe, es kann mir jemand helfen!
thx
E
Hi
Du mußt nach GuiCtrlCreatePic noch folgendes einfügen:
[autoit]GuiCtrlCreateTabItem("")
[/autoit]lgE
Hallo
Ein DJ-Programm im Denon DN2000 Look
autoit.de/wcf/attachment/3995/
Hatte ursprünglich 2 Scripte, eins zum Waveformzeichnen und das andere zum regeln der Geschwindigkeit.
Hab die beiden kombiniert und langsam ist das Programm dann gewachsen.
Leider hab ich zuviel herumprobiert, sodaß ich letztendlich den Überblick verloren hab...
d.h.: Es sind noch viele Bugs drinnen!
Will es euch aber dennoch mal zeigen...
Bei 2 Audiointerfaces kann man getrennt Abspielen und Vorhören.
Mit den Variablen $iMainDevice und $iMonDevice kann man das einstellen...
http://rapidshare.com/files/201769180/AMD.rar
Viel Spaß
ps.: Die CloneStr.dll (Pascal-Source ist dabei) hab ich mit Dev-Pascal compiliert.
Das $WS_POPUP kommt einen Beistrich vorher...
$WS... sind normale styles
$WS_EX... sind extended styles
lgE
Sowas?
Wenn du $WS_POPUP verwendest, ist nur mehr der Test da...
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
$hGui = GUICreate("", 300, 100, -1, -1, -1, $WS_EX_LAYERED)
GUISetBkColor(0xABCDEF)
$hLabel = GUICtrlCreateLabel("Test", 5, 5, 290, 90, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetFont($hLabel, 60)
GUICtrlSetColor($hLabel, 0x00FF00)
GUICtrlSetBkColor($hLabel, 0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
GUISetState()
While GUIGetMsg() <> -3
Sleep(5)
WEnd
Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
If Not $isColorRef Then
$i_transcolor = Hex(String($i_transcolor), 6)
$i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
EndIf
Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
Select
Case @error
Return SetError(@error, 0, 0)
Case $Ret[0] = 0
Return SetError(4, _WinAPI_GetLastError(), 0)
Case Else
Return 1
EndSelect
EndFunc ;==>_WinAPI_SetLayeredWindowAttributes
lgE
If the "data" corresponds to an already existing entry it is set as the default.
If the "data" starts with GUIDataSeparatorChar or is an empty string "" the previous list is destroyed.
In deinem Beispiel wird der Eintrag "Test" mit "test" als default gesetzt - scheint nicht casesensitive zu sein.
wenn du willst, daß der alte EIntrag überschrieben wird, dann:
GuiCtrlSetData(-1, "|" & $var)
[/autoit]zum hinzufügen:
[autoit]_GUICtrlListBox_AddString
[/autoit]lgE
Hi
ist eigentlich Geschmackssache, was du verwendest.
Select...Case...EndSelect ist etwas schneller als If...Then...Endif
Außer man verzichtet auf Endif
If $Var > 10 Then MsgBox(0,"","")
[/autoit], dann ist IF schneller.
Ich persönlich verwende nur IF, da ich dann den Code leichter lesen kann...
Und eben Switch, mit vielen Vergleichen bei nur einer Auswertung.
lgE
hi
[autoit]#include <GdiPlus.au3>
[/autoit][autoit][/autoit][autoit]$hGui = GUICreate("Test")
GUISetState()
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
_GDIPlus_GraphicsDrawStringColor($hGraphics, "TestString", 10, 10, "Arial", 20, 0, 0xFFFF6600)
MsgBox(0, "", "Fertig")
_GDIPlus_Shutdown()
Func _GDIPlus_GraphicsDrawStringColor($hGraphics, $sString, $nX, $nY, $sFont = "Arial", $nSize = 10, $iFormat = 0, $iBrush = 0xFF000000)
Local $hBrush, $iError, $hFamily, $hFont, $hFormat, $aInfo, $tLayout, $bResult
$hBrush = _GDIPlus_BrushCreateSolid($iBrush)
$hFormat = _GDIPlus_StringFormatCreate($iFormat)
$hFamily = _GDIPlus_FontFamilyCreate($sFont)
$hFont = _GDIPlus_FontCreate($hFamily, $nSize)
$tLayout = _GDIPlus_RectFCreate($nX, $nY, 0, 0)
$aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hFormat)
$bResult = _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $aInfo[0], $hFormat, $hBrush)
$iError = @error
_GDIPlus_FontDispose($hFont)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_BrushDispose($hBrush)
Return SetError($iError, 0, $bResult)
EndFunc ;==>_GDIPlus_GraphicsDrawStringColor
Die Funktion _GDIPlus_GraphicsDrawStringColor hab ich aus der GdiPlus.au3 rauskopiert und erweitert...
Vielleicht sollte man das mal anregen, daß ein Farbparameter gleich in die original Funktion integriert wird!
lgE
Schau dir die Funktion in der GDIPlus.au3 an und du wirst feststellen, daß dort mit:
[autoit]$hBrush = _GDIPlus_BrushCreateSolid()
[/autoit]
einfach ein schwarzer Brush erstellt wird...
Also Funktion in dein Script kopieren, umbenennen und einen Farbwert einfügen z.b.:
[autoit]$hBrush = _GDIPlus_BrushCreateSolid(0xFFEE9922)
[/autoit]Warum man den Farbwert nicht gleich als Parameter mitgeben kann ist mir ein Rätsel...
lgE
Hi
_StringBetween gibt im Array[0] NICHT die Anzahl der Einträge zurück (wie es bei vielen anderen Funktionen der Fall ist)
daher:
For $x = 0 to UBound($aArray1)-1
[/autoit]Weiters solltest du, wenn du öfters hintereinander etwas in eine Datei schreiben willst, diese vorher mit FileOpen öffnen.
(Bei deiner Version wird jedesmal die Datei geöffnet und wieder geschlossen...)
Und statt call("name") kannst du auch direkt name() aufrufen
lgE
Irgendwie haben die bei Avira wieder was geändert. Habe eben das neue Update bekommen, und Autoit wird nicht mehr als Trojanerverseucht gefunden
Kann ich nicht bestätigen!
Meine compilierten Autoitprogramme verursachen immer noch Warnmeldungen...
Hab Virendefinition und Programmupdates gemacht..
V8.02.00.83, 17.02.2009
V7.01.02.46, 19.02.2009
weiß jemand, wie man solche Updates rückgängig machen kann?
(außer von einem HDD-Image,
oder Antivir deinstallieren - neu installieren...)
lgE
Hi
wstr bei DllStructCreate gibt es nicht, sollte Char[255] oda so was sein.
Die Classlist, welche an OpenThemeData übergeben wird, muß mit Semikolons getrennt sein - WingetClasslist trennt mit @lf
Trotzdem gibt OpenThemeData kein ThemeHandle zurück...
Hier sind die Werte der Konstanten (z.b. TABP_BODY) zu finden:
http://co-project.lboro.ac.uk/users/codm2/wi…TBXUxThemes.pas
Weiter weiß ich jetzt auch grad nicht...
lgE
Schau dir mal die ersten Konstanten in der ProgressConstants.au3 an
lgE
Folgendes Script zeigt, wie man quasi "direkt" auf den Bildschirm malen kann.
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
HotKeySet("{Esc}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]Global $aPos[11][2], $iXOld, $iYOld
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("Mausverfolger", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST))
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
GUISetState(@SW_SHOW, $hGui)
_GDIPlus_Startup()
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFF9900)
$hBrushDel = _GDIPlus_BrushCreateSolid(0xFFABCDEF)
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
While 1
For $i = 0 To 9
$aPos[$i][0] = $aPos[$i + 1][0]
$aPos[$i][1] = $aPos[$i + 1][1]
Next
$iXOld = $aPos[10][0]
$iYOld = $aPos[10][1]
$aPos[10][0] = MouseGetPos(0)
$aPos[10][1] = MouseGetPos(1)
For $i = 0 To 10
If $i = 10 And $aPos[10][0] = $iXOld And $aPos[10][1] = $iYOld Then ContinueLoop
_GDIPlus_GraphicsFillRect($hGraphics, $aPos[$i][0], $aPos[$i][1], 2.5 * $i, 2.5 * $i, $hBrush)
Next
Sleep(10)
For $i = 0 To 10
If $i < 10 And $aPos[$i][0] = $aPos[10][0] And $aPos[$i][1] = $aPos[10][1] Then ContinueLoop
If $i = 10 And $aPos[10][0] = $iXOld And $aPos[10][1] = $iYOld Then ContinueLoop
_GDIPlus_GraphicsFillRect($hGraphics, $aPos[$i][0], $aPos[$i][1], 2.5 * $i, 2.5 * $i, $hBrushDel)
Next
WEnd
Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
If Not $isColorRef Then
$i_transcolor = Hex(String($i_transcolor), 6)
$i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
EndIf
Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
Select
Case @error
Return SetError(@error, 0, 0)
Case $Ret[0] = 0
Return SetError(4, _WinAPI_GetLastError(), 0)
Case Else
Return 1
EndSelect
EndFunc ;==>_WinAPI_SetLayeredWindowAttributes
Func _Exit()
Exit
EndFunc ;==>_Exit
Viel Spaß
E