Du musst die Änderungen auch in das Label schreiben:
[autoit]GUICtrlSetData($status_label, $status_label_text)
[/autoit]Du musst die Änderungen auch in das Label schreiben:
[autoit]GUICtrlSetData($status_label, $status_label_text)
[/autoit]Bei mir funktioniert das Script.
Was für ein OS ist auf dem Rechner installiert, wo es nicht läuft?
Achso, bei WMI brauchte man doch das .NET-Framework, soweit ich weiß. Ist das vielleicht nicht installiert?
Hast Du an dem Script von mir noch was geändert?
Wenn ja, poste doch mal Dein Script, wie es jetzt ist.
Achso!
Wenn der Anwender auf [Abbrechen] klickt, dann wird das @error-Makro auf 1 gesetzt und die Variable $sFile erhält einen Leerstring.
Ansonsten ist @error = 0 und die Variable $sFile bekommt den kompletten Pfad plus Dateiname der ausgewählten Datei zugewiesen.
Beachten solltest Du außerdem diesen Hinweis:
Zitat@WorkingDir wird bei erfolgreichem Rückgabewert geändert.
Das bedeutet, wenn Du danach eine Datei ohne kompletten Pfad verwendest (relative Pfadangabe, z.B.: "settings.ini"), dann wird die Datei in dem ausgewählten Pfad gesucht und vermutlich nicht gefunden.
Deswegen ist es ratsam, immer den kompletten Pfad anzugeben (absolute Pfadangaben, z.B.: @ScriptDir & "\settings.ini"), um solche möglichen Fehlerquellen schon im Vorfeld zu vermeiden.
Die Frage habe ich nicht verstanden.
Was willst Du denn machen?
Nun, vermutlich machen die Hersteller das, um es den Cheatern etwas schwerer zu machen. ![]()
Für fehlende Includes solltest Du Dir "OrganizeIncludes" von Xeno installieren.
Das fehlerhafte Script stammt aber offensichtlich noch aus "alten Tagen", weil einige der UDF-Befehle mittlerweile umbenannt wurden.
Speziell die _GUICtrlListView-Befehle besitzen nun einen zusätzlichen Unterstrich.
Beispiel:
_GUICtrlListViewSetColumnWidth (vorher) --> _GUICtrlListView_SetColumnWidth (jetzt)
Warum über eine InputBox?
FileOpenDialog ist für den Anwender doch wesentlich komfortabler:
$sFile = @ScriptDir & '\test.exe'
If Not FileExists($sFile) Then
$sFile = FileOpenDialog('Bitte Datei auswählen...', @ScriptDir, '(*.exe)')
If @error Then Exit
MsgBox(0, 'Ausgewählte Datei', $sFile)
EndIf
Für die Jahres-Eingabe würde ich GUICtrlCreateDate benutzen:
#include <GUIConstantsEx.au3>
#include <DateTimeConstants.au3>
GUICreate("My GUI get date", 200, 200, 800, 200)
$date = GUICtrlCreateDate(@YEAR, 10, 10, 70, 25, $DTS_UPDOWN)
GUICtrlSetFont(-1, 12)
$DTM_SETFORMAT_ = 0x1032
$style = "yyyy"
GUICtrlSendMsg($date, $DTM_SETFORMAT_, 0, $style)
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
MsgBox(0, "Time", GUICtrlRead($date))
[/autoit]Sieht besser aus, man hat ein Up-/Down-Control und man kann kein "falsches" Jahr eingeben.
Möglichkeiten gibt es viele: TreeView, ListView, ListBox, Editfeld...
Was sind das für Daten und wie sieht die Struktur aus? More Input, please. ![]()
aber random ist nur für zahlen oda ?!
Ja, aber es gibt ja Chr():
[autoit]MsgBox(0,0,Chr(Random(65, 90, 1)))
[/autoit]Die Menü-Titel kannst Du nicht per Event ansprechen. Das funktioniert nur bei den Items.
Zu 1.: Ich weiß nicht genau wie AutoIt die Garbage-Collection handhabt, aber ich denke, wenn Du der Variablen einen Leerstring zuweist, sollte der Speicher wieder freigegeben werden.
Zu 2.: Mit GUICtrlRead das Editfeld auslesen und dann mit StringInStr nach der Zeichenfolge suchen. Highlighten müsste mit _GUICtrlEdit_SetSel machbar sein.
Und wenn man Dein Script debugt, dann geht es plötzlich:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_Obfuscator=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
Opt('TrayMenuMode', 1)
Opt('TrayOnEventMode', 1)
TrayCreateItem ("Beenden")
TrayItemSetOnEvent(-1, "_Beenden" )
While 1
Sleep (100)
WEnd
Func _Beenden()
Exit
EndFunc
Na, das sieht doch schon ganz gut aus.
Wie schneidet denn diese Variante ab?
#include <Array.au3>
$oDictionary = ObjCreate('Scripting.Dictionary')
$aFile = StringSplit(FileRead(@ScriptDir & '/ip_zaehler.txt'), @CRLF, 1)
For $i = 1 To $aFile[0]
If $oDictionary.Exists($aFile[$i]) Then
$iVal = $oDictionary.Item($aFile[$i])
$oDictionary.Item($aFile[$i]) = $iVal + 1
Else
$oDictionary.Add($aFile[$i], 1)
EndIf
Next
Global $aIPAdress[$oDictionary.Count][2], $iCount = 0
For $strKey In $oDictionary.Keys
$aIPAdress[$iCount][0] = $strKey
$aIPAdress[$iCount][1] = $oDictionary.Item($strKey)
$iCount += 1
Next
_ArraySort($aIPAdress, 1, 0, 0, 1)
_ArrayDisplay($aIPAdress)
Stilgar: Teste doch mal diese Version:
#include <Array.au3>
Global $aFile = StringSplit(FileRead(@scriptdir & '/ip_zaehler.txt'), @CRLF, 1)
Global $iCount = 0
If $aFile[0] > 1 Then
Global $aIPAdress[$aFile[0]][2]
For $j = 1 To $aFile[0]
For $i = 0 To UBound($aIPAdress) - 1
If $aFile[$j] = $aIPAdress[$i][0] Then
$aIPAdress[$i][1] += 1
ContinueLoop 2
EndIf
Next
$aIPAdress[$iCount][0] = $aFile[$j]
$aIPAdress[$iCount][1] = 1
$iCount += 1
Next
ReDim $aIPAdress[$iCount][2]
_ArraySort($aIPAdress, 1, 0, 0, 1)
_ArrayDisplay($aIPAdress)
EndIf
Script fehlt! Muss man wieder raten...
Erstellst Du die Grafiken mit GUICtrlCreatePic?
Wenn ja, dann die ID in einem Array speichern und den Bildern mit GUICtrlSetOnEvent eine Klick-Funktion zuweisen.
Innerhalb der Funktion bekommst Du dann mit @GUI_CtrlId die ID des angeklickten Bildes.
AdlibEnable mit 10 ms ist aber übertrieben.
1000 ms oder, wenn man den Sekundenwechsel eher mitkriegen will, 500 ms reichen doch aus.
Ich hatte das mal gepostet. Speziell die _WMIDateStringToDate hatte ich nämlich so geändert.
Macht aber nichts. Dafür ist das Forum ja da.
Hier mal Dein Script mit ein paar Änderungen:
; Includes
#include <Date.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <Constants.au3>
; Declares
Global $hour, $mins, $secs, $hour1, $mins1, $secs1, $hourb, $minsb, $secsb
Global $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
;#################Programm#################
; GUI
$Form1 = GUICreate("Uhrzeit", 580, 20, -1, 0, $WS_POPUP, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)
; Uhrzeit
GUICtrlCreateLabel("Uhrzeit:", 5, 3, 40, 17)
$Label1 = GUICtrlCreateLabel("", 45, 3, 59, 17)
GUICtrlSetColor(-1, 0xFF0000)
; Datum
GUICtrlCreateLabel("Datum:", 120, 3, 38, 17)
$Label2 = GUICtrlCreateLabel("", 158, 3, 57, 17)
GUICtrlSetColor(-1, 0xFF0000)
;System upTime
GUICtrlCreateLabel("System upTime:", 250, 3, 150, 17)
$Label3 = GUICtrlCreateLabel("", 330, 3, 58, 17)
GUICtrlSetColor(-1, 0xFF0000)
;Boot Time
GUICtrlCreateLabel("Boot Time:", 410, 3, 150, 17)
$Label4 = GUICtrlCreateLabel(_BootTime(), 465, 3, 110, 17)
GUICtrlSetColor(-1, 0xFF0000)
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]_Update()
AdlibEnable("_Update", 1000)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _Update()
GUICtrlSetData($Label1, StringFormat("%02i:%02i:%02i", @HOUR, @MIN, @SEC))
GUICtrlSetData($Label2, StringFormat("%02i.%02i.%02i", @MDAY, @MON, @YEAR))
_TicksToTime(TimerDiff(0), $hour, $mins, $secs)
GUICtrlSetData($Label3, StringFormat("%02i:%02i:%02i", $hour, $mins, $secs))
EndFunc ;==>_Update
Func _BootTime()
Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem', 'WQL', 0x30)
If IsObj($colItems) Then
For $objItem In $colItems
$Output = _WMIDateStringToDate($objItem.LastBootUpTime)
Next
Else
$Output = ''
EndIf
Return $Output
EndFunc ;==>_BootTime
Func _WMIDateStringToDate($dtmDate)
Return StringRegExpReplace($dtmDate, '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2}).*', '$3.$2.$1 / $4:$5:$6')
EndFunc ;==>_WMIDateStringToDate
P.S.: Bitte benutze bei längeren Scripten zusätzlich die Spoiler-Tags. Hab's bei Dir mal hineineditiert.