@slin: Das Forum hier heißt Skripte und nicht Links zu Downloads.
Wenn du uns etwas zeigen willst, kannst du es hier auch posten.
Beiträge von BugFix
-
-
Mich wundert immer Welche Tollen Ideen du doch Hast.
Mich auch
Scherz beiseite, ich habe eine Projektliste, in der ich meine Ideen verewige. Und die wird immer länger. Solch kleine Sachen, wie das hier macht man ja mal nebenbei. Aber etwas komplexeres, wie z.B. meine ListviewFormat-UDF hat insgesamt etwa 1/2 Jahr Arbeit geschluckt.
Und der Tag hat leider nur 24 h.
-
Da man im Windows XP Home ja keine Gruppenrichtlinien hat um den Autostart der Laufwerke zu managen, habe ich mal ein kleines Tool dafür erstellt, das den entsprechenden Registryeintrag ausliest und neu setzt.
Standardmäßig wird auf Eintrag unter HKCU geprüft, falls dort nichts steht, wird HKLM verwendet.
Gerade für Wechseldatenträger (die meisten USB-Sticks werden als solche erkannt) und USB-Festplatten (werden als Festplatten erkannt) macht es Sinn den Autorun zu deaktivieren.
Steckt man z.B. eine 500 GB externe Platte an, die auch noch voll ist, kann man Kaffe trinken gehen, bis die vom Autorun eingelesen wurde.
Zum Anderen bietet die autorun.inf gerne Schädlingen Unterschlupf
(Möchte nicht wissen, wie oft Conficker sich allein durch Anstöpseln von USB-Sticks vermehrt hat.)Edit: Nicht vergessen - geänderte Einstellungen werden erst mit einem Neustart aktiv.

Edit 2: Ich bin grad total perplex. :wacko: Hab das an einem andren PC probiert - ohne Wirkung.
Kann jemand von euch Erfolg vermelden?Hier der kleine Helfer:
Spoiler anzeigen
[autoit]#cs
[/autoit] [autoit][/autoit] [autoit]
Bit Wert Bedeutung Standardwert7 128 reserviert und immer gesetzt 1
[/autoit] [autoit][/autoit] [autoit]
6 64 Autostart für RAM-DISK 0
5 32 Autostart für CD-ROM 0
4 16 Autostart für Netzwerklaufwerke 1
3 8 Autostart für feste Datenträger (Festplatte) 0
2 4 Autostart für wechselbare Datenträger (z.B. Diskettenlaufwerk) 1
1 2 Laufwerk ohne Root 0
0 1 Autostart für unbekannte Laufwerkstypen 1Hex-Wert: Standard 95
[/autoit] [autoit][/autoit] [autoit]
#ce#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
Opt("GUIOnEventMode", 1)Global $aCB[7][2]
[/autoit] [autoit][/autoit] [autoit]
Global $RegKey = 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
Global $Value = "NoDriveTypeAutoRun"
Global $CurrentSet = RegRead($RegKey, $Value)
If @error Then $RegKey = 'HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
$CurrentSet = RegRead($RegKey, $Value)
If @error Then $CurrentSet = 0x00000095$GUI = GUICreate("Autorun - Settings", 392, 252, 266, 134)
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "GUIClose")
$Group1 = GUICtrlCreateGroup("", 15, 9, 360, 226)
$aCB[0][0] = GUICtrlCreateCheckbox("RAM-Disk", 45, 39, 80, 17)
$aCB[1][0] = GUICtrlCreateCheckbox("CD-ROM", 45, 66, 100, 17)
$aCB[2][0] = GUICtrlCreateCheckbox("Netzlaufwerke", 45, 93, 100, 17)
$aCB[3][0] = GUICtrlCreateCheckbox("Festplatte", 45, 120, 100, 17)
$aCB[4][0] = GUICtrlCreateCheckbox("Wechseldatenträger", 45, 147, 140, 17)
$aCB[5][0] = GUICtrlCreateCheckbox("Laufwerk ohne Root", 45, 174, 140, 17)
$aCB[6][0] = GUICtrlCreateCheckbox("Unbekannte Laufwerke", 45, 201, 140, 17)
$btSet = GUICtrlCreateButton("Neu Setzen", 240, 39, 110, 20, $WS_GROUP)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetOnEvent(-1, "btSetClick")
GUICtrlCreateGroup("", -99, -99, 1, 1)
For $i = 0 To 6
GUICtrlSetOnEvent($aCB[$i][0], "cbClick")
$aCB[$i][1] = 2^(6-$i)
Next
GUISetState(@SW_SHOW)_MarkCB()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(100)
WEndFunc GUIClose()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc cbClick()
[/autoit] [autoit][/autoit] [autoit]
If BitAND(GUICtrlGetState($btSet), $GUI_DISABLE) Then GUICtrlSetState($btSet, $GUI_ENABLE)
EndFuncFunc btSetClick()
[/autoit] [autoit][/autoit] [autoit]
Local $val = 0
For $i = 0 To 6
If BitAND(GUICtrlRead($aCB[$i][0]), $GUI_CHECKED) Then
$val += $aCB[$i][1]
EndIf
Next
RegWrite($RegKey, $Value, 'REG_DWORD', '0x' & Hex($val+128, 8))
GUICtrlSetState($btSet, $GUI_DISABLE)
EndFuncFunc _MarkCB()
[/autoit]
For $i = 0 To 6
If BitAND($CurrentSet, $aCB[$i][1]) Then
GUICtrlSetState($aCB[$i][0], $GUI_CHECKED)
Else
GUICtrlSetState($aCB[$i][0], $GUI_UNCHECKED)
EndIf
Next
EndFunc -
Tweaky: Bitte keine MsgBoxen in eine WM_Funktion.
Das crasht gern. -
Ein laufender Prozess hat ein
eineindeutigesHandle und eine ebenso eineindeutige PID.
Je nach Funktion wird die PID oder das Handle benötigt.
Hier mal ein Bsp., wie du das Handle eines Prozesses erhalten kannst. (Die PID zu erhalten ist ja bekannt)Edit: Sehe grad, ich habe etwas daneben gelegen ;). Das Handle wird nur erstellt, wenn es angefordert wird und anschließend verworfen. Es ist also nicht geeignet zur Identifikation.
[autoit]Const $PROCESS_QUERY_INFORMATION = 0x400
[/autoit][autoit][/autoit][autoit]$PID = Run('calc.exe')
[/autoit][autoit][/autoit][autoit]
$hProcess = OpenProcess($PROCESS_QUERY_INFORMATION, False, $PID)
ConsoleWrite('$hProcess "calc.exe": ' & $hProcess & @CRLF)Func OpenProcess($dwDesiredAccess, $bInheritHandle, $dwProcessId)
[/autoit]
Local $ret = DllCall("kernel32", 'long', 'OpenProcess', 'long', $dwDesiredAccess, _
'long', $bInheritHandle, 'long', $dwProcessId)
Return $ret[0]
EndFunc -
Es gibt auch noch andere Möglichkeiten
Registry-Funktionen per Objekt -
[autoit]
If Not StringRegExp($input, '\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b') Then _
[/autoit]
MsgBox(0, '', 'Das ist keine IP!') -
(meistens ja 1 und nicht 0)
Meine Arrays gehen bei 0 los.
Werd ich mal noch einbauen, kein Problem. -
[autoit]
Paßt alles in eine Zeile:MsgBox(0, 'Ergebnis', InputBox('Potenzrechnung', 'Basis') ^ InputBox('Potenzrechnung', 'Exponent'))
[/autoit]und das hier ist auch viel flexibler.

-
Hi,
ich hatte mal eine Stoppuhr gebastelt, da kannst du dir anschauen, wie es geht.
Der Code ist noch etwas verbugt (hatte nicht weitergemacht), aber das Prinzip wird deutlich.Spoiler anzeigen
[autoit]#include<EditConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<GUIConstantsEx.au3>
Global $start, $UsedTime, $diff_Alt = 0
Global $SetTime = False, $Break = False, $Pause = False, $Run = True
Global $colBG = 0x0000FF, $colFont = 0xFFEA00$GUI = GUICreate('Stoppuhr', 400, 100, -1, -1)
[/autoit] [autoit][/autoit] [autoit]
$Time = GUICtrlCreateInput('00:00:00,000', 100, 20, 200, 20, BitOR($ES_CENTER,$ES_READONLY))
GUICtrlSetBkColor(-1, $colBG)
GUICtrlSetColor(-1, $colFont)
$bStart = GUICtrlCreateButton('Start', 40, 60, 80, 20)
$bBreak = GUICtrlCreateButton('Unterbrechen', 160, 60, 80, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
$bPause = GUICtrlCreateButton('Pause', 280, 60, 80, 20)
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetState()While True
[/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
If $SetTime Then $UsedTime = SetTime()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $bStart ; Start/Stop Messung absolut
$Run = Not $Run
If $Run Then
$SetTime = False
SetTime()
GUICtrlSetData($bStart, 'Start')
GUICtrlSetState($bBreak, $GUI_DISABLE)
GUICtrlSetState($bPause, $GUI_DISABLE)
Else
GUICtrlSetData($Time, '00:00:00,000')
$SetTime = True
$start = TimerInit()
GUICtrlSetData($bStart, 'Stop')
GUICtrlSetState($bBreak, $GUI_ENABLE)
GUICtrlSetState($bPause, $GUI_ENABLE)
EndIf
Case $bBreak ; nur Anzeige wird angehalten (z.B. Rundenmessung)
$Break = Not $Break
If $Break Then
$SetTime = False
GUICtrlSetData($bBreak, 'Fortsetzen')
GUICtrlSetState($bPause, $GUI_DISABLE)
Else
$SetTime = True
GUICtrlSetData($bBreak, 'Unterbrechen')
GUICtrlSetState($bPause, $GUI_ENABLE)
EndIf
Case $bPause ; Messung wird angehalten (Additionsmessung)
$Pause = Not $Pause
If $Pause Then
$diff_Alt = $UsedTime ; abgelaufene Zeit aufaddieren
$SetTime = False
GUICtrlSetData($bPause, 'Weiter')
GUICtrlSetState($bBreak, $GUI_DISABLE)
Else
$SetTime = True
$start = TimerInit() ; Zeitmessung neu initialisieren
GUICtrlSetData($bPause, 'Pause')
GUICtrlSetState($bBreak, $GUI_ENABLE)
EndIf
EndSwitch
WEndFunc SetTime()
[/autoit]
Local $diff = TimerDiff($start)/1000 + $diff_Alt
Local $hour = 0
Local $min = 0
Local $sec = Floor($diff)
Local $rest = ($diff-$sec)*1000
Local $secShow, $minShow, $hourShow
If $sec > 59 Then
$min = Floor($sec/60)
$secShow = Mod($sec, 60)
ElseIf $sec > 3599 Then ; ???? testen
$hourShow = Mod(Mod($sec,3600),60)
$minShow = Floor(Mod($sec,3600)/60)
$secShow = Floor($sec/3600)
Else
$secShow = $sec
$minShow = $min
$hourShow = $hour
EndIf
GUICtrlSetData($Time, StringFormat('%02u', $hourShow) & ':' & StringFormat('%02u', $minShow) & ':' & StringFormat('%02u', $secShow) & ',' & StringFormat('%03u', $rest))
Return $diff ; gibt abgelaufene Zeit als absolute Differenz zurück
EndFunc -
Da gibt es eine einfachere Lösung (statt $text halt "FileRead(deine_Datei)")
[autoit]#include <array.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$text = _
'10/02/2009 02:00:00 2 ankauf 12 1 ' & @CRLF & _
'13/02/2009 08:00:00 2 verkauf 13 0 0' & @CRLF & @CRLF & _
'14/02/2009 05:00:00 5 ankauf 14 1 ' & @CRLF & _
'14/02/2009 10:00:00 5 verkauf 12 0 0' & @CRLF & @CRLF & _
'16/02/2009 06:00:00 6 ankauf 12 1 ' & @CRLF & _
'18/02/2009 12:00:00 6 verkauf 13 0 0' & @CRLF & @CRLF & _
'19/02/2009 07:00:00 7 ankauf 12 1 ' & @CRLF & _
'19/02/2009 08:00:00 8 verkauf 14 0 0'$pattern = '(\d{2}:\d{2}:\d{2})(?:\s+\d+\s+)(\w+)'
[/autoit][autoit][/autoit][autoit]
$ret = StringRegExp($text, $pattern, 3)
;~ _ArrayDisplay($ret)MsgBox(0, 'Letzte Zeile', $ret[UBound($ret)-2] & ' ' & $ret[UBound($ret)-1])
[/autoit]Falls die Leerbereiche evtl. Tabs enthalten, müßte das Pattern im RegEx angepaßt werden.
-
Und noch mal zum Sinn:
Somit kann man auch jedem Control ein Kontextmenü zuordnen (das geht nämlich standardmäßig nur bei wenigen) und das macht sehr viel Sinn.
Bsp.: Individuelle Gestaltung einer GUI durch den User
- Rechtsklick auf den Hintergrund: wird ihm Farbwechsel oder Hintergrundbild angeboten
- Rechtsklick auf Button: Farbwechsel oder Image
usw. -
Es gibt in AutoIt eine hervorragend dokumentierte Hilfe. Vielleicht solltest du dir mal die Mühe machen und in SciTE 'For' eintippen, mit dem Cursor draufgehen und F1 drücken. Dann kannst du alles nachlesen.
-
Du kannst eine Schleife verwenden:
[autoit]For $i = 1 To 5
[/autoit]
; dein Befehl
Next -
In Bezug auf Send?
z.B. sende 5 mal 's' : Send('{s 5}') -
[autoit]Send("$deinevariable")
Send($deinevariable)
[/autoit] -
Der Name 'Schnellöffner' ist hier wohl etwas irreführend.

-
Mit PixelChecksum solltest du dem Ziel näher kommen.
-
Die Karte hatte mal irgendwer empfohlen:
http://www.velleman.eu/product/view/?lang=de&id=351346Damit kannst du z.B. Relais ansteuern, die für deine erforderliche Schaltlast ausgelegt sind.
Edit
Relaiskarten findest du dort auch. Hier für 3A Ausgang: http://www.velleman.eu/ot/de/product/view/?id=9069 -
also ich habe es mit beidem schon mal gemacht und hat einwandfrei geklappt
Nun, wenn das so ist, solltest du sofort beim Papst für eine Audienz zur Heiligsprechung nachsuchen.

Ich helfe dir gern nochmal auf die Sprünge mit einem Auszug aus der Hilfe
ZitatThe source file must be a string and not a variable so that the compiler can extract the filename to include. The source cannot contain wildcards.
Wenn du sagst, bei dir klappt das: Wow, dann hast du dir wohl einen eigenen Compiler erstellt, der das bringt.