Mach es so:
[autoit]
;~ $path = GUICtrlRead($importPath)
$path = 'c:\Programme\AutoIt3\AutoIt3.exe' ; <- zum testen
$trim = StringRegExpReplace($path, '(.+\\).*', '$1')
MsgBox(0, "Test", $trim)
Mach es so:
[autoit]
;~ $path = GUICtrlRead($importPath)
$path = 'c:\Programme\AutoIt3\AutoIt3.exe' ; <- zum testen
$trim = StringRegExpReplace($path, '(.+\\).*', '$1')
MsgBox(0, "Test", $trim)
Um den Pfad zum Windows-Verzeichnis universell zu halten, sollte man die Makros (hier: @WindowsDir) verwenden:
[autoit]Run(@WindowsDir & '\explorer.exe ::{208D2C60-3AEA-1069-A2D7-08002B30309D}')
[/autoit]Da das Windows-Verzeichnis aber auch im normalen Suchpfad vorhanden ist, sollte auch das ausreichen:
[autoit]ShellExecute('::{208D2C60-3AEA-1069-A2D7-08002B30309D}')
[/autoit]Manche lernen es nie...
[Thread closed]
Naja, Stilgar ist ja nicht irgendein User, sondern unsere Koryphäe in Sachen "Firefox und AutoIt" und er bietet einen unermüdlichen Support bei allen Fragen, die zu seiner Firefox-Automatisierung auftauchen.
Von daher ist Deine User-Bewertung schon ok und ich möchte mich Deinen Worten anschließen. Ein: Dankeschön an Stilgar! ![]()
Das geht aber auch noch kürzer (und mit GUISetAccelerators):
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
Opt('GUIOnEventMode', 1)
Global $aButtons[17] = ['7', '8', '9', '+', '4', '5', '6', '-', '1', '2', '3', '*', 'C', '0', '.', '/', '=']
Global $aKeys[17] = [ _
'{NUMPAD7}', '{NUMPAD8}', '{NUMPAD9}', '{NUMPADADD}', _
'{NUMPAD4}', '{NUMPAD5}', '{NUMPAD6}', '{NUMPADSUB}', _
'{NUMPAD1}', '{NUMPAD2}', '{NUMPAD3}', '{NUMPADMULT}', _
'{DEL}', '{NUMPAD0}', '{NUMPADDOT}', '{NUMPADDIV}', _
'{ENTER}']
Global $aAccelKeys[17][2], $ahButtons[17]
$hGui = GUICreate('Taschenrechner', 290, 380)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
$hOutput = GUICtrlCreateLabel('', 32, 20, 234, 28, $SS_RIGHT, $WS_EX_STATICEDGE)
GUICtrlSetFont(-1, 18)
GUICtrlSetBkColor(-1, 0xFFFFAA)
For $i = 0 To 16
If $i = 16 Then
$ahButtons[$i] = GUICtrlCreateButton($aButtons[$i], 96, 72 + Int($i / 4) * 64, 106, 32)
Else
$ahButtons[$i] = GUICtrlCreateButton($aButtons[$i], 32 + Mod($i, 4) * 64, 72 + Int($i / 4) * 64, 42, 42)
EndIf
GUICtrlSetFont(-1, 16, 600)
GUICtrlSetOnEvent(-1, '_Input')
$aAccelKeys[$i][0] = $aKeys[$i]
$aAccelKeys[$i][1] = $ahButtons[$i]
Next
GUISetAccelerators($aAccelKeys, $hGui)
GUISetState()
While True
Sleep(50)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _Input()
Local $iPressed = @GUI_CtrlId - $ahButtons[0]
Switch $iPressed
Case 16 ; "=" gedrückt
GUICtrlSetData($hOutput, Execute(GUICtrlRead($hOutput)))
Case 12 ; "C" gedrückt
GUICtrlSetData($hOutput, '')
Case Else ; restliche Tasten
GUICtrlSetData($hOutput, GUICtrlRead($hOutput) & $aButtons[$iPressed])
EndSwitch
EndFunc ;==>_Input
Das liegt wohl daran, dass es in 99% der Fälle (Erfahrungswert), in denen das Wort PixelSearch auftaucht, um irgendeinen Gamebot geht.
Bei XP klappt's!
Vielleicht mal mit
#RequireAdmin
[/autoit]
am Scriptanfang versuchen?!
TimBlo: Ich glaube nicht, dass Du das zu entscheiden hast. Im übrigen hat Raupi recht. Sowas gehört hier ins Talk-Forum. In den anderen Foren ist das Spam und führt dazu, dass das hierher verschoben wird. Im Extremfall zu einer Verwarnung usw...
ich verstehe weniger etwas von Hardware
...und dann selber zusammenbauen.
Davon würde ich dann dringend abraten. Oder Du solltest Dir jemanden suchen, der Ahnung hat und Dir beim zusammenbauen helfen kann.
Andernfalls führt das schnell zu einem vorzeitigen Ableben Deines neuen Rechners oder er wird erst gar nicht zum Leben erweckt.
Ansonsten musst Du eine Entscheidung treffen, ob AMD- oder Intel-System und ATI- oder NVidia-Grafikkarte.
Ich bin AMD-/ATI-Fan, aber einige schwören ja auf Intel und/oder NVidia. ![]()
Dann mach ich mal ein wenig weiter:
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
Opt('GUIOnEventMode', 1)
$hGui = GUICreate('Link ClipGet Detektor', 640, 480)
GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
$hListView = GUICtrlCreateListView('Link', 5, 5, 630, 400, $LVS_SHOWSELALWAYS)
GUICtrlCreateButton('markierte Einträge löschen', 5, 420, 150, 25)
GUICtrlSetOnEvent(-1, '_DeleteItems')
GUISetState()
GUIRegisterMsg($WM_NOTIFY, 'WM_NOTIFY')
$sOld = ''
ClipPut($sOld)
While True
$sClipboard = ClipGet()
If $sClipboard <> $sOld Then
$sOld = $sClipboard
$aLink = StringRegExp($sClipboard, '(http://[a-zA-Z0-9_\-\+\?\.\=\|/&%$#]+)', 3)
If IsArray($aLink) Then
$sOldSep = Opt('GUIDataSeparatorChar', ' ')
For $i = 0 To UBound($aLink) - 1
GUICtrlCreateListViewItem($aLink[$i], $hListView)
Next
Opt('GUIDataSeparatorChar', $sOldSep)
_GUICtrlListView_SetColumnWidth($hListView, 0, $LVSCW_AUTOSIZE)
EndIf
EndIf
Sleep(100)
WEnd
Func _End()
Exit
EndFunc ;==>_End
Func _DeleteItems()
_GUICtrlListView_DeleteItemsSelected($hListView)
EndFunc ;==>_DeleteItems
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView = $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, 'hWndFrom'))
$iIDFrom = DllStructGetData($tNMHDR, 'IDFrom')
$iCode = DllStructGetData($tNMHDR, 'Code')
Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button
ShellExecute(_GUICtrlListView_GetItemTextString($hListView))
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY
Doppelklick auf einen Listview-Eintrag öffnet den Standard-Browser mit dem angeklickten Link.
Auch wenn es jetzt funktioniert.
Wenn Du nochmal eine Fehlfunktion feststellst, bitte möglichst viele Angaben zur möglichen Fehlerquelle machen. Dazu gehören:
- Welches Betriebssystem?
- Ausführung als Script oder compilierte Exe?
- Wie rufst Du die Funktion auf (am besten Dein Script posten)?
- Welche Fehlermeldung erscheint (die hast Du ja gepostet)?
So kann man dann leichter nachvollziehen, wie und warum dort ein Fehler auftritt. ![]()
@Xeno: Coole UDF!
Dann kann ich ja doch wieder alles auf AutoIt-only umstellen. ![]()
Das auslesen geschieht mit dieser Funktion:
#include <Array.au3>
$sPath = FileOpenDialog('Test', '', 'MP3 (*.mp3)')
$aInfo = _getID3Tag($sPath)
_ArrayDisplay($aInfo)
Func _getID3Tag($sPath)
Local $oShellApp, $oDir, $oFile, $aProperty[35], $aPath
$aPath = StringRegExp($sPath, '(.+)\\(.+)', 3)
$oShellApp = ObjCreate('shell.application')
$oDir = $oShellApp.NameSpace($aPath[0])
$oFile = $oDir.Parsename($aPath[1])
For $i = 0 To 34
$aProperty[$i] = $oDir.GetDetailsOf($oFile, $i)
Next
Return $aProperty
EndFunc ;==>_getID3Tag
und das speichern der ID3-Tags mit dieser Funktion (und einem externen Programm![]()
Func _ID3Save()
Local $Path, $Artist, $Title
$Path = GUICtrlRead($hFilePath)
$Artist = GUICtrlRead($hInterpret)
$Title = GUICtrlRead($hTitle)
RunWait(@ScriptDir & '\sys\id3.exe -12 -a "' & $Artist & '" -t "' & $Title & '" "' & $Path & '"', @ScriptDir, @SW_HIDE)
$aTmp = _getID3Tag($Path)
$aShowMP3[$ButtonPressed][0] = $aTmp[1]
$aShowMP3[$ButtonPressed][1] = $aTmp[0]
$tmp = StringReplace($aTmp[1], '&', '&&') & @CRLF & Chr(34) & StringReplace($aTmp[0], '&', '&&') & Chr(34)
GUICtrlSetData($aButton[$ButtonPressed], $tmp)
GUISetState(@SW_HIDE, $hGuiID3)
WinActivate($sTitle)
EndFunc ;==>_ID3Save
"*.avi" ist nicht automatisch ein Platzhalter.
Du musst schon auf die Dateiendung testen:
Func _Mediaplay()
If StringRight($File, 3) = "avi" Then
$Avi1 = GUICtrlCreateAvi($File, -1, 8, 8, 612, 344)
_GUICtrlAVI_Play($Avi1)
ElseIf StringRight($File, 3) = "mp3" Then
_SoundPlay($Opensound)
EndIf
EndFunc ;==>_Mediaplay
Func _MediaStop()
If StringRight($File, 3) = "avi" Then
_GUICtrlAVI_Stop($Avi1)
_GUICtrlAVI_Close($Avi1)
ElseIf StringRight($File, 3) = "mp3" Then
_SoundStop($Open)
EndIf
EndFunc ;==>_MediaStop
Func _MediaPause()
If StringRight($File, 3) = "avi" Then
Sleep(100)
ElseIf StringRight($File, 3) = "mp3" Then
_SoundPause($Opensound)
EndIf
EndFunc ;==>_MediaPause
Wobei ich bezweifeln möchte, dass die _Soundbefehle funktionieren. Aber das kann man, ohne das restliche Script zu kennen, nicht endgültig sagen.
Herzlichen Glückwunsch auch von mir. ![]()
Und so wäre die Anzahl der Schleifendurchläufe immer gleich:
[autoit]
Local $aRandom[40]
For $i = 1 To 40
$aRandom[$i - 1] = $i
Next
$sRandom = ''
For $i = 0 To 4
$random = Random(0, 39 - $i, 1)
$sRandom &= $aRandom[$random] & ';'
$aRandom[$random] = $aRandom[39 - $i]
Next
ConsoleWrite(StringTrimRight($sRandom, 1) & @CRLF)
[/autoit]Win XP, Zune-Style, AMD Phenom II X4 940 (4x3.0 GHz), 4GB (3.25) RAM, ATI HD3870 (1920x1200)
Bei False ist der Balken zu 100% im grünen Bereich und bei True ca. zu 25% im grünen Bereich. Jeweils mit maximaler Fenstergröße.
Die Funktion "_OnlineCheck" würde ich lieber so schreiben:
Func _OnlineCheck()
TCPStartup()
If TCPNameToIP("Maximilian") <> "" Then
GUICtrlSetData($Max, "Online")
GUICtrlSetColor($Max, 0x00ff00)
Else
GUICtrlSetData($Max, "Offline")
GUICtrlSetColor($Max, 0xff0000)
EndIf
If TCPNameToIP("Franziska") <> "" Then
GUICtrlSetData($Franziska, "Online")
GUICtrlSetColor($Franziska, 0x00ff00)
Else
GUICtrlSetData($Franziska, "Offline")
GUICtrlSetColor($Franziska, 0xff0000)
EndIf
If TCPNameToIP("BENNE-PC") <> "" Then
GUICtrlSetData($Benedikt, "Online")
GUICtrlSetColor($Benedikt, 0x00ff00)
Else
GUICtrlSetData($Benedikt, "Offline")
GUICtrlSetColor($Benedikt, 0xff0000)
EndIf
If TCPNameToIP("VICI-PC") <> "" Then
GUICtrlSetData($Victoria, "Online")
GUICtrlSetColor($Victoria, 0x00ff00)
Else
GUICtrlSetData($Victoria, "Offline")
GUICtrlSetColor($Victoria, 0xff0000)
EndIf
If TCPNameToIP("SYLVIA-PC") <> "" Then
GUICtrlSetData($Mama, "Online")
GUICtrlSetColor($Mama, 0x00ff00)
Else
GUICtrlSetData($Mama, "Offline")
GUICtrlSetColor($Mama, 0xff0000)
EndIf
TCPShutdown()
EndFunc ;==>_OnlineCheck
TCPNameToIP ist deutlich schneller als Ping. Wenn der PC online ist ganz besonders.
Naja, Performance spielt hier ja eher keine Rolle, aber an sich hast Du recht. Der Befehl muss ja nicht jedes Mal ausgeführt werden:
#include <Constants.au3>
TCPStartup()
$Ziel = TCPNameToIP('www.google.de')
$PING_ret = Run(@ComSpec & " /c PING " & $Ziel, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$line = ''
Do
Sleep(50)
$line = $line & StdoutRead($PING_ret)
Until @error
$line = StringRegExpReplace($line, '\v{2,}', @CRLF)
MsgBox(0, 0, $line)
TCPShutdown()
Der Sleepwert ist auch etwas hoch gewesen (verzögert nur das Ende der Schleife) und sollte hinter dem If stehen, damit die Schleife sofort nach dem @error verlassen werden kann.
Edit: Oder mit Do...Until.
Vielleicht so:
#include <Constants.au3>
TCPStartup()
$Ziel = TCPNameToIP('www.google.de')
$PING_ret = Run(@ComSpec & " /c PING " & $Ziel, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
$line = ''
While 1
Sleep(1000)
$line = $line & StdoutRead($PING_ret)
If @error Then ExitLoop ; wenn ein Fehler beim Lesen aufgetreten ist verlassen
$line = StringRegExpReplace($line, '\v{2,}', @CRLF)
WEnd
MsgBox(0, 0, $line)
TCPShutdown()