warum geht das denn net?
Beiträge von Unicom
-
-
aber echt
-
Ich kenn den VLC Player nicht, aber ausprobieren ob sich der Programmname beim Abspielen ändert.
Einfach mal den VLC starten und mit Shutdown-Tool sich mal den aktuellen Namen raussuchen.
Dann irgendeine Mediadatei mit dem VLC abspielen und währendessen auf den "Aktualisieren" Button des Shutdown-Tools klicken und schauen ob und wie nun der VLC Player heisst. Nachdem die Mediendatei zu ende/bzw. gestoppt ist nochmal via Aktualisieren den exakten VLC Player Namen kontrollieren.Wenn sich die Namen ändern kann das Shutdown-Tool dies überwachen.
-
Laß dir mal den Wert von
[autoit]$hInstance = _WinAPI_LoadLibraryEx ($ressource, $LOAD_LIBRARY_AS_DATAFILE)
[/autoit]in die Konsole ausgeben. Falls $hInstance = 0 ist, dann hast du die cards.dll nicht auf dem PC. Allerdings ist die ab Win98 definitiv dabei, bei Vista weiß ich nicht.
Gleiches Problem bei mir - aber ich verwende Vista, und habe die cards.dll nicht auf dem Rechner...
$hInstance ist hier 0x00000000 -
Ja das Look & Feel ist etwas experimentell
Mit der Comboliste wählt man ein zu überwachendes Programm aus,
dann drückt man den Button Monitor und der vollständige Name wird angezeigt (unter der ComboBox). Ändert sich dieser Programmname fährt der Rechner runter.
Drückt man auf den Monitorbutton nochmals (der jetzt "Stopp" heißt), wird das Programm nicht mehr überwacht.Zum Testen würde ich statt einen Shutdown eine Messagebox anzeigen lassen
-
Ja sowas gibt es hier jetzt zum drittenmal
Ich habe ein kleines Prog geschrieben, dass durch einen Countdown den Rechner herunterfährt.Eine Neuerung gegenüber anderen Shutdown-timern ist, dass auch die Veränderung eines Programmnamens als Shutdown-event hinzugezogen wird.
Dadurch ist es z.B. möglich, dass nach Beenden eines Audiofiles in Winamp der Rechner herunterfährt.Bewerkstelligt wird dieses durch Kontrolle des Programmnamens, d.h. wenn z.B. Programme ihren Namen ändern.
Mit dem Button "Monitor" wird das in der ComboBox angezeigte Programm überwacht. Ein weiterer Click beendet die Überwachung.
Der Countdown und die Programmüberwachung laufen voneinander unabhängig.
Mit dem Button "Aktualisieren" werden für die AuswahlComboBox die gegenwärtigen aktiven Programme erneuert.
Mit dem Button "Minimieren" wird dieses Timer-tool im Systray versteckt.Wer mit diesem Programm rumexperimentieren will sollte die Shutdown-anweisung rausnehmen und stattdessen eine Messagebox verwenden
Spoiler anzeigen
[autoit]#include <Date.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#Include <Constants.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>$g_szVersion = "Shut-Down-Scheduler"
[/autoit] [autoit][/autoit] [autoit]
$progname=$g_szVersionIf WinExists ($g_szVersion) Then Exit
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
AutoItWinSetTitle ($g_szVersion)
Break (0)
TraySetState ()
TraySetToolTip ($progname);=======================GUI===========================================
[/autoit] [autoit][/autoit] [autoit]$statusdefault=" none selected"
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$main = GUICreate ($progname, 200, 220)
[/autoit] [autoit][/autoit] [autoit];ComboBox
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$Combo1 = GUICtrlCreateCombo ("---- wähle ----", 10, 10, 180, 200)
Dim $ignorelist[3]
$ignorelist[0] ="Program Manager"
updatecombo()
;-----------------------------
$infolabel= GUICtrlCreateLabel($statusdefault,12,35,180,55)$update = GUICtrlCreateButton ("Aktualisieren", 10, 90, 85) ; Update-Button
[/autoit] [autoit][/autoit] [autoit];Monitor
[/autoit] [autoit][/autoit] [autoit]
$monitor=GUICtrlCreateButton ("Monitor", 105, 90, 85) ;Monitor-Button;Timer-Eingabe
[/autoit] [autoit][/autoit] [autoit]
$labelblank=GUICtrlCreateLabel("Hours Mins",12,130)$inputhour = GUICtrlCreateInput ("2",10,150, 40, 25, 0x0800) ;$ES_READONLY)
[/autoit] [autoit][/autoit] [autoit]
$updown = GUICtrlCreateUpdown($inputhour)
$inputmin = GUICtrlCreateInput ("00",60,150, 40, 25)
$updown = GUICtrlCreateUpdown($inputmin,$ES_NUMBER)
$timerlabel = GUICtrlCreateLabel("--:--",110,155,180)
$Shutdownon = GUICtrlCreateButton ("Start Timer", 10, 182, 85);Minimize
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$min = GUICtrlCreateButton ("Minimieren", 105, 182, 85) ;Minimize-buttonGUISetState (@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]
;=============================GUI-Ende==================================$timer=0
[/autoit] [autoit][/autoit] [autoit]
$monitoron=0While 1
[/autoit] [autoit][/autoit] [autoit]
sleep(50);Überwachung über Programmnamen
[/autoit] [autoit][/autoit] [autoit]
If $monitoron=1 Then
$found=0
$wl = WinList ()
For $i = 1 To $wl[0][0]
if $wl[$i][0] = $monitorhit Then $found=1
Next
If $found=0 then
Shutdown(9)
;MsgBox(0,"shutdown now","now")
Exit
EndIf
EndIf
;Shutdown-Timer
If $timer=1 Then
$diff=TimerDiff($begin)
$countdown=$alarmtime-$diff
GUICtrlSetData ( $timerlabel, int($countdown/1000) );Zeige
If $diff>$alarmtime Then
Shutdown(9)
;MsgBox(0,"shutdown now","now")
$timer=0
Exit
EndIf
EndIf
$msg = GuiGetMsg ()
$tmsg = TrayGetMsg ()
Select
Case $tmsg = $TRAY_EVENT_PRIMARYDOUBLE
updatecombo ()
WinSetState ($progname, "", @SW_SHOW)
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $msg = $GUI_EVENT_MINIMIZE
WinSetState ("SetTrans", "", @SW_HIDE)Case $msg = $update
[/autoit] [autoit][/autoit] [autoit]
updatecombo()case $msg = $inputhour
[/autoit] [autoit][/autoit] [autoit]
$hour=GUICtrlRead($inputhour)
If $hour<0 Then GUICtrlSetData($inputhour,0)
Case $msg = $min
WinSetState ($progname, "", @SW_HIDE)
case $msg = $inputmin
$minus=GUICtrlRead($inputmin)
If $minus<0 Then GUICtrlSetData($inputmin,0)
If $minus>59 Then GUICtrlSetData($inputmin,59)
case $msg= $Shutdownon
If $timer=0 Then
$timer=1
$alarmtime=1000*60*(GUICtrlRead($inputhour)*60+GUICtrlRead($inputmin))
$begin = TimerInit()
GUICtrlSetData ( $Shutdownon, "Stop Timer")
Else
$timer=0
GUICtrlSetData ( $timerlabel, "--:--")
GUICtrlSetData ( $Shutdownon, "Start Timer")
EndIf
Case $msg = $monitor
$monitorprog=GUICtrlRead ($Combo1) ;Gewähltes Programm aus der Combo auslesen
If $monitoron=0 Then
$monitorhit=find_prog($monitorprog) ;Vollständiger Name für das gewählte Programm
If $monitorhit<>"error" Then
GUICtrlSetData ( $infolabel, $monitorhit)
GUICtrlSetData ( $monitor, "Stop")
$monitoron=1
EndIf
Else
$monitoron=0
GUICtrlSetData ( $infolabel, $statusdefault)
GUICtrlSetData ( $monitor, "Monitor")
EndIfEndSelect
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Wend
ExitFunc find_prog($name)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$wl = WinList ()
For $i = 1 To $wl[0][0]
if StringLeft($wl[$i][0],30) = $name Then Return $wl[$i][0]
Next
Return "error"
EndFuncFunc updatecombo () ;aktualisiert die Combolist
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetData ($Combo1, "")
$wl = WinList ()
$setcomb = "---- wähle ----|"
For $i = 1 To $wl[0][0]
if $wl[$i][0] <> "" And IsVisible($wl[$i][1]) AND myArraySearch($ignorelist, $wl[$i][0])=0 Then
$split = StringSplit($wl[$i][0],"|")
$setcomb = $setcomb & StringLeft ($split[1], 30) & "|"
EndIf
Next
GUICtrlSetData ($Combo1, $setcomb, "---- wähle ----")
EndFuncFunc myArraySearch($feld, $value)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$result = 0
$split = StringSplit($value,"|")
$value = $split[1]
for $i = 0 to UBound($feld)-1
If StringLeft ($value,30) = StringLeft($feld[$i],30) Then
$result=1
ExitLoop
EndIf
Next
Return $result
EndFuncFunc IsVisible ($handle)
[/autoit]
If BitAnd (WinGetState ($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc -
Zitat
Mein Problem besteht darin, dass ich keine Lösung gefunden habe, wie der Text Buchstabe für Buchstabe ausgelesen werden kann.
Schau mal in der Hilfedatei folgende Themen an:
FileRead: Das dortige Beispiel zeigt wie du einzelne Zeichen aus einer (Text-)Datei auslesen kannst.
_FileReadToArray: Das Beispiel dort wandelt eine Datei in ein Array um - was du vielleicht zu deiner weiteren Auswertung verwenden kannst. -
Ich habs mal so gemacht:
Code
Alles anzeigenOpt("WinTitleMatchMode", 1) Run("RunDll32.exe Shell32.dll,Control_RunDLL desk.cpl") WinWaitActive("Anzeigeeinstellungen") Send("2!e") Send("^{tab}{tab}{END}") WinActivate("Eigenschaften von") ControlFocus("Eigenschaften","",1) Send("{tab 2} ") WinActivate("Anzeigeeinstellungen") ControlFocus("Anzeigeeinstellungen","",1) ControlClick("Anzeigeeinstellungen","",1)
-
Wie kann ich die Bildschirmwiederholfrequenz für einen 2ten Monitor mittels Skript einstellen?
Wenn ich einen 2ten Monitor anschliesse dann vergißt Vista immer die alte Einstellung.
Und das Durchclicken von RM-click-auf-Desktop: Anpassen-Anzeige-2terBildschirm-erweiterte Einstellungen-Monitor-Bildschirmwiederholfrequenz ist etwas umständlich... -
Nette Sache
Wäre interessant, ob es dir auch gelänge rauszufinden welche Münzen oder Noten man überhaupt bräuchte um möglichst mit wenig Geldstücken einen Betrag darzustellen.
Wäre es nicht vielleicht gut ein 25 cent stück zu haben? Und das 2 Cent Stückl abzuschaffen?
Z.B. 1,32 € ist durch ein eurostück und ein 20 cent und 10 cent und eine 2 centmünzen bezahlbar (andere möglichkeiten brauchen noch mehr münzen z.B. 132 ein-cent münzen)Kein Plan, ich denke die Münzen- und Notenverteilung die wir haben wird schon das Optimum sein.
-
oh gut
das ist tatsächlich was ich brauche.Ich hatte immer irgendwie nen Fehler wohl dadrin ...
$main = GUICreate ($GUIname, $gui_x, $gui_y, -1, -1,BitOr($GUI_SS_DEFAULT_GUI, $WS_OVERLAPPEDWINDOW, $WS_SIZEBOX, $WS_SYSMENU) )
$GUI_SS_DEFAULT_GUI muß wohl $WS_SYSMENU überlagert haben...
Vielen dank
-
Nein - das ist bestenfalls nervig lol!
Man kann damit Fenster immer noch minimieren - lediglich werden sie wieder geöffnet - das ist zwar ein Workaround (die ich derzeit so ähnlich auchnütze) aber es z.B. abhängig machen wie oft die while-schleife aktiviert wird.
Folge: Fenster lassen sich damit immer noch minimieren, und "springen" lediglich wieder zurück,
-
Ich suche eine Möglichkeit bestimmte Fenster (bzw. ein au3-skript) davor zu bewahren, dass sie minimiert werden können.
D.h. z.B. wenn Windowstaste+m gedrückt wird, dieses Fenster/Programm nicht in die Task-bar minimiert wird. Das Systemuhrzeit-Fenster hat diese Eigenschaft - insofern hat Windows diese Fähigkeit...
Einen AutoIT-Befehl bzw. Fenstereigenschaft (vglbar mit WinWinSetOnTop) gibt es dafür ja nicht.
Kennt jemand trotzdem eine Möglichkeit dies zu realisieren?Evtl. auch wieder diese Eigenschaft zu entfernen?
-
lol
nö das rentiert sich nicht wirklich,
alle shift+alt+strg Möglichkeiten noch dazu nehmen - am Schluss irgendwelche konfuse unicode Eingaben mit alt+ziffernblock...Ähnlich umständlich wäre es wenn man alle Verknüpfungen auf dem Desktop durchsieht und dort die Einstellung prüft...
Ich frag mich halt ob es nicht irgendwo ne Registry-Eintrags-Liste gibt (hab noch nichts gefunden). Leider keinen Plan wie Windows das überhaupt prüft (sonst könnte man ja den Speicher auslesen...)
-
Wie die meisten wohl wissen kann man Verknüpfungen/Links, die auf dem Desktop (oder im Startmenü oder im Ordner "Windows\Startmenü\Programme") sich befinden Tastenkürzel zugewissen werden.
Ich benütze für manches AutoIT-Skript also z.B. alt+F12 um es zu starten.
Gibt es nun irgendeine Möglichkeit sich eine Liste aller derzeit verwendeten Tastenkombis (mit den dazugehörigen Programmen) sich anzeigen zu lassen?
-
Jetzt meldet mein Virenwächter plötzlich, dass meine selbstgeschriebenen AutoIT Programme vom Sohanat.H Virus befallen seien
-
Der Tip mit dem DLLcall von Peethebee ist sicher interessant, aber mit den Win APIs kenn ich mich nicht aus - da weiß ich nicht mal nach was ich googlen müßte.
Ja Fremdprogramme kann ich natürlich auch verwenden, aber wenn man das in eine eigene Anwendung integrieren möchte ist es auch wieder doof.
So der Preis für die hilfreichste Antwort geht an gtaspider
Das Programm dort hat nur ein paar kleine Schwierigkeiten,
die erste ist, dass man für die richtige Zeitzonen den Registryeintrag ändern muss (Windows Systemsprache...) - und dann habe ich immer noch einen Fehler von einer Stunde (vermutlich Sommer/Winterzeitsache).Ich hab das Programm für meine Zwecke verbogen, so dass ich es in anderen Skripten verwenden kann:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Misc.au3>
#include <String.au3>
#include <Date.au3>Dim $a,$a1,$a3,$b,$b1,$b2,$recv, $g_IP
[/autoit] [autoit][/autoit] [autoit]$hour=2 ; GMT+1 +1Sommerwinterzeit
[/autoit] [autoit][/autoit] [autoit]
$min=0
$vz=1; Zeitverschiebung +1 oder -1 zu GMT
$update=1 ;bei 1: die Systemuhr wird aktualisert$a1=($hour*3600+$min*60)*$vz ;Zeitverschiebung zum Server (=GMT) in Sekunden
[/autoit] [autoit][/autoit] [autoit]
timeupdate()
ExitFunc timeupdate()
[/autoit] [autoit][/autoit] [autoit]
;Test auf Internetverbindung
$a3 = ping("www.yahoo.com",1000)
If $a3 = 0 Then
MsgBox(0,"Info","Internet Access is Required to Sync Time")
Return
EndIf$IP = StringSplit('129.6.15.28,129.6.15.29,132.163.4.101,132.163.4.102,132.163.4.103,' _
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
& '128.138.140.44,192.43.244.18,69.25.96.13,216.200.93.8,' _
& '208.184.49.9,207.126.98.204,64.236.96.53,68.216.79.113',',')$IP_UDP =StringSplit("131.107.1.10,207.200.81.113",",") ; Server die mit UDP arbeiten
[/autoit] [autoit][/autoit] [autoit]$g_IP=$IP[1] ;Index bestimmt einen Server - Bei Bedarf UDP Zeiten auswählen
[/autoit] [autoit][/autoit] [autoit]tcpsync()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
EndFuncFunc setpctime()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$b1=StringSplit(StringLeft(_DateAdd ( 's', $a, "1900/01/01 00:00:00"),10),'/')
$b2=StringSplit(StringRight(_DateAdd ( 's', $a, "1900/01/01 00:00:00"),8),':')
_SetTime($b2[1],$b2[2],$b2[3])
_SetDate($b1[3],$b1[2],$b1[1])
EndFuncFunc tcpsync()
[/autoit] [autoit][/autoit] [autoit]TCPStartUp()
[/autoit] [autoit][/autoit] [autoit]
$socket = TCPConnect( $g_IP, 37 )
If $socket = -1 Then
MsgBox(0,"RFC868 via TCP Failed - trying UDP",$g_IP )
udpsync()
EndIfWhile 1
[/autoit] [autoit][/autoit] [autoit]
If $socket > 0 Then
$recv = TCPRecv( $socket, 512 )
EndIf
If $recv <> "" Then
$a = Asc(StringMid($recv,1,1))*256^3+Asc(StringMid($recv,2,1))*256^2+Asc(StringMid($recv,3,1))*256+Asc(StringMid($recv,4,1))+$a1
If $update=1 Then setpctime()
ExitLoop
EndIf
WEnd
TCPCloseSocket ( $socket )
TCPShutdown ( )
EndFuncFunc udpsync()
[/autoit]
$a=UDPStartup()
$socket = UDPOpen($g_IP, 37)
If @error <> 0 Then Return
$begin = TimerInit()
While 1
If $socket[1] > 0 Then
UDPSend($socket, "")
$recv = UDPRecv( $socket, 512 )
EndIf
If $recv <> "" Then
$a = Asc(StringMid($recv,1,1))*256^3+Asc(StringMid($recv,2,1))*256^2+Asc(StringMid($recv,3,1))*256+Asc(StringMid($recv,4,1))+$a1
If $update=1 Then setpctime()
$socket[1] = 0
ExitLoop
EndIf
If TimerDiff($begin)>5000 Then
MsgBox(0,"RFC868 via UDP Failed","Please Choose Another Server and Try Again!")
Return
EndIf
WEnd
UDPCloseSocket($socket)
UDPShutdown()
EndFuncVielen Dank für euere Unterstützung
-
Ich möchte via AutoIT (innerhalb eines Scrips) die Systemzeit aktualisieren.
Gibt es eine Webseite wo man das einfach auslesen kann?
Ich bräuchte die exakte Zeit (PBT oder sowas).Evtl. ein Beispielskript, da ich mich mit der IE.au3 nicht so gut auskenne.
Gruß
-
FileReadtoArray ist noch besser als mein Beispiel
-
Warum nicht wie in dem Beispiel?
mit einer While Schliefe
[autoit]#include <Array.au3>
[/autoit][autoit][/autoit][autoit][/autoit][autoit]
$file = FileOpen("c:\test.txt", 0)If $file = -1 Then
[/autoit][autoit][/autoit][autoit]
MsgBox(0, "Error", "Unable to open file.")
Exit
EndIfDim $Computernamenarray[1]
[/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]$file = FileOpen("c:\test.txt", 0)
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
$line = FileReadLine($file)
If @error = -1 Then ExitLoop
$Computernamenarray[0]+=1
_ArrayAdd ( $Computernamenarray, $line )
Wend
FileClose($file)_ArrayDisplay($Computernamenarray,"Namen")
[/autoit][autoit][/autoit][autoit][/autoit]$Computernamenarray[0] enthält in meinem Beispiel die Anzahl der Zeilen/deine Computernamen