Jo, funktioniert bei mir auch, aber das Sleep kannst Du weglassen (wegen GUIGetMsg):
[autoit]
Do
_traffic(GUICtrlRead($netzwerkadapter))
;~ Sleep(50)
Until GUIGetMsg() = -3
Jo, funktioniert bei mir auch, aber das Sleep kannst Du weglassen (wegen GUIGetMsg):
[autoit]
Do
_traffic(GUICtrlRead($netzwerkadapter))
;~ Sleep(50)
Until GUIGetMsg() = -3
Ich habe ebenfalls Win7 und bei mir funktioniert das (sowohl Stable als auch Beta). Auch ohne #RequireAdmin.
Andy, im Prinzip gebe ich Dir ja recht, aber die WMI-Abfragen zu verstehen ist als Anfänger nicht so einfach.
Und wenn man dann als Neuling sowas aus einem Script "rauslesen" soll, kann das schon eine Nummer zu groß sein.
Da finde ich die Fragen, die man allein durch lesen der Hilfe hätte lösen können, viel schlimmer.
Letztendlich helfen wir doch gern (sonst wären wir nicht hier) und außerdem habe ich heute gute Laune. ![]()
Funktioniert bei mir (Win7, 64 Bit, UAC eingeschaltet) einwandfrei (sowohl vom Explorer als auch vom TotalCommander). Sogar ohne UAC-Nachfrage.
Wenn Du hinter einem Router hängst, dann bekommst Du die gesamten Werte (LAN und WAN) des Netzwerkadapters. Das läßt sich doch auch gar nicht unterscheiden, denn der Router entscheidet ja, ob die Pakete ins LAN oder ins WAN gehen.
Andy: Nicht gleich so streng sein. Er ist doch noch neu und mein Script ist auch nicht soo übersichtlich.
@halloman: Weil heute Sonntag ist, bekommst Du ein fertiges Script.
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = 'localhost'
$Output=""
$Output &= 'Computer: ' & $strComputer & @CRLF
$Output &= '==========================================' & @CRLF
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')
Global $CurrentClockSpeed, $MaxClockSpeed, $GPUAdapterRAM, $TotalRAM, $sOut
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Processor', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$CurrentClockSpeed = $objItem.CurrentClockSpeed
$MaxClockSpeed = $objItem.MaxClockSpeed
Next
Endif
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_VideoController', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$GPUAdapterRAM = $objItem.AdapterRAM
Next
Endif
$TotalRAM = MemGetStats()
[/autoit] [autoit][/autoit] [autoit]$sOut = 'CPU = ' & $CurrentClockSpeed & ' Hz (max. ' & $MaxClockSpeed & ' Hz)' & @CR
$sOut &= 'GPU-RAM = ' & _ByteAutoSize($GPUAdapterRAM, 0) & @CR
$sOut &= 'RAM = ' & _ByteAutoSize($TotalRAM[1] * 1024, 0)
MsgBox(0, 'Ergebnis', $sOut)
[/autoit] [autoit][/autoit] [autoit];===============================================================================
; Function Name: _ByteAutoSize($iSize[, $iRound][, $iFormat][, $bThousands])
; Description:: Gibt einen Bytewert in einer bestimmten Einheit zurück
; Parameter(s): $iSize = Größe in Byte übergeben
; $iRound = Anzahl der Nachkommastellen (0...8)
; $iFormat = bestimmt den Rückgabewert
; 0 = Automatisch (je nach übergebenen Wert)
; 1 = in Byte
; 2 = in KByte
; 3 = in MByte
; 4 = in GByte
; $bThousands = Rückgabe mit Tausendertrennzeichen (True/False)
; Requirement(s): #include <String.au3>
; Author(s): Oscar (http://www.autoit.de)
;===============================================================================
Func _ByteAutoSize($iSize, $iRound = 2, $iFormat = 0, $bThousands = True)
Local $aSize[4] = [' Byte', ' KByte', ' MByte', ' GByte'], $sReturn
If $iFormat < 0 Or $iFormat > 4 Then $iFormat = 0
If $iRound < 0 Or $iRound > 8 Then $iRound = 2
If Not IsBool($bThousands) Then $bThousands = False
$iSize = Abs($iSize)
If $iFormat = 0 Then
For $i = 30 To 0 Step -10
If $iSize > (2 ^ $i) Then
$iFormat = $i / 10 + 1
ExitLoop
EndIf
Next
EndIf
If $iFormat = 0 Then $iFormat = 1
$sReturn = StringFormat('%.' & $iRound & 'f', Round($iSize / (2 ^ (($iFormat - 1) * 10)), $iRound))
If $bThousands Then $sReturn = _StringAddThousandsSep($sReturn, '.', ',')
Return $sReturn & $aSize[$iFormat - 1]
EndFunc ;==>_ByteAutoSize
Func _StringAddThousandsSep($sString, $sThousands = -1, $sDecimal = -1)
Local $sResult = "" ; Force string
Local $rKey = "HKCU\Control Panel\International"
If $sDecimal = -1 Then $sDecimal = RegRead($rKey, "sDecimal")
If $sThousands = -1 Then $sThousands = RegRead($rKey, "sThousand")
;~ Local $aNumber = StringRegExp($sString, "(\d+)\D?(\d*)", 1)
Local $aNumber = StringRegExp($sString, "(\D?\d+)\D?(\d*)", 1) ; This one works for negatives.
If UBound($aNumber) = 2 Then
Local $sLeft = $aNumber[0]
While StringLen($sLeft)
$sResult = $sThousands & StringRight($sLeft, 3) & $sResult
$sLeft = StringTrimRight($sLeft, 3)
WEnd
;~ $sResult = StringTrimLeft($sResult, 1) ; Strip leading thousands separator
$sResult = StringTrimLeft($sResult, StringLen($sThousands)) ; Strip leading thousands separator
If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
EndIf
Return $sResult
EndFunc ;==>_StringAddThousandsSep
Die Idee ist doch super!
Das kannst Du noch weiter ausbauen (zufällige Anordnung der Kästen, mehrere Level, nicht gleich beenden, sondern Fehlersound/-Anzeige, Punkte-/Zeitanzeige).
Also nur zu, das Spiel hat was.
Geht auch per WMI:
; Generated by AutoIt Scriptomatic
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = 'localhost'
$NetworkAdapter = 'Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller' ; hier den Namen des Netzwerkadapters eintragen
$Output=""
$Output &= 'Computer: ' & $strComputer & @CRLF
$Output &= '==========================================' & @CRLF
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')
While True
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfFormattedData_Tcpip_NetworkInterface', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
If $objItem.Name = $NetworkAdapter Then
$Output = 'BytesReceivedPersec: ' & $objItem.BytesReceivedPersec & @CRLF
$Output &= 'BytesSentPersec: ' & $objItem.BytesSentPersec & @CRLF
$Output &= 'BytesTotalPersec: ' & $objItem.BytesTotalPersec & @CRLF
ToolTip($Output, @DesktopWidth / 2 - 200, 20, 'Network-Traffic')
EndIf
Next
Else
$Output &= 'No WMI Objects Found for class: ' & 'Win32_PerfFormattedData_Tcpip_NetworkInterface'
Endif
Sleep(50)
WEnd
Wenn Du z.B. ein Programm schreibst, bei dem der User die Eingabe einer EMail-Adresse vornehmen soll, dann willst Du vielleicht verhindern, dass er eine ungültige Adresse einträgt. Um das abzufragen benutzt Du einen Filter (RegExp).
Und wo vorher der Filter eine einstellige de-Domain als ungültig erkannt hat, darf das jetzt nicht mehr passieren.
Ein Script von mir: Computer-Info
Ich habe gerade in der aktuellen c't gelesen, dass es jetzt auch 1stellige (und weitere 2stellige) de-Domains geben wird.
Dazu habe ich im INet noch diesen Artikel gefunden: Ein- und zweistellige de-Domains freigegeben
Ok, ist tatsächlich schon vor fast einem Monat gewesen. Ich hab's aber erst jetzt bemerkt. ![]()
Naja, was ich eigentlich erwähnen wollte, ist, dass man bei seinen Programmen jetzt evtl. den Filter anpassen muss (so man einen verwendet hat).
Hmmm...meinst Du eher so:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $iV = 1
[/autoit] [autoit][/autoit] [autoit]$Form1 = GUICreate("Form1", 50, 30, 100, 0, -1, BitOR($WS_EX_TOOLWINDOW, $WS_EX_WINDOWEDGE))
GUISetState(@SW_SHOW)
WinSetOnTop($Form1, '', 1)
AdlibEnable('_FallDown', 10)
[/autoit] [autoit][/autoit] [autoit]While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func _FallDown()
Local $aWinPos = WinGetPos($Form1), $aTaskbar = _GetTaskbarProp()
If $aWinPos[1] + $aWinPos[3] + 6 + $iV < $aTaskbar[1] Then
WinMove($Form1, '', $aWinPos[0], $aWinPos[1] + $iV)
$iV += 1
Else
WinMove($Form1, '', $aWinPos[0], $aTaskbar[1] - ($aWinPos[3] + 6))
$iV = 1
EndIf
EndFunc
Func _GetTaskbarProp()
Local $iOpt, $aPos
$iOpt = Opt('WinTitleMatchMode', 4)
$aPos = WinGetPos('classname=Shell_TrayWnd')
Opt('WinTitleMatchMode', $iOpt)
Return $aPos
EndFunc
Benutze statt _NowDate lieber NowCalcDate, dann passt es:
[autoit]
If _NowCalcDate() >= "2009/12/01" Then
$Pic1 = GuiCtrlCreatePic("pw1.jpg", 50, 380, 150, 150)
EndIf
Das liegt daran, dass hier die Reihenfolge (Jahr/Monat/Tag) besser für Vergleiche dieser Art geeignet ist.
Was hast Du denn damit vor?
Wenn Du das auf eine eigene GUI (Input-/Editcontrol) beschränkst, dann gäbe es noch andere Möglichkeiten.
Das würde zu einem Keylogger führen. Dafür gibt es hier keinen Support.
Und schon wieder eine Geburtstagsparty.
AutoBert, alles Gute zum Geburtstag. Wie alt bist Du geworden?
Arraydeklaration und -zuweisung bei zwei Dimensionen geht so:
[autoit]
Dim $array[5][2] = [['a', 1],['b', 2],['c', 3],['d', 4],['e', 5]]
_ArrayDisplay($array)
So:
[autoit]
#include <Array.au3>
#include <File.au3>
Global $aNames, $sOut, $aOut
_FileReadToArray(@ScriptDir & '\names.txt', $aNames)
For $i = 1 To $aNames[0]
If Not StringInStr($sOut, $aNames[$i]) Then $sOut &= $aNames[$i] & '|'
Next
$aOut = StringSplit(StringTrimRight($sOut, 1), '|')
_ArrayDisplay($aOut)
Du überschreitest den Zahlenbereich der Integer-Variablen. Dafür haben wir in einem µIT mal BigInt-Funktionen erstellt.
Hier mal Dein Script mit meiner BigInt_Add:
#include <Array.au3>
Global $fib_fol[901]
$fib_fol[0] = 0
$fib_fol[1] = 1
For $i = 2 To 900
$fib_fol[$i] = _BigInt_Add($fib_fol[$i - 1], $fib_fol[$i - 2])
Next
_ArrayDisplay($fib_fol)
Func _BigInt_Add($sAdd1, $sAdd2)
If StringLen($sAdd1) <= 18 And StringLen($sAdd2) <= 18 Then Return Int($sAdd1) + Int($sAdd2)
Local $sOut, $sTemp, $iCarry = 0
If StringLen($sAdd1) < StringLen($sAdd2) Then
$sTemp = $sAdd1
$sAdd1 = $sAdd2
$sAdd2 = $sTemp
EndIf
Local $aAdd1 = StringRegExp($sAdd1, '\A\d{' & Mod(StringLen($sAdd1), 18) & '}|\d{18}+', 3), $iCountAdd1 = UBound($aAdd1) - 1
Local $aAdd2 = StringRegExp($sAdd2, '\A\d{' & Mod(StringLen($sAdd2), 18) & '}|\d{18}+', 3), $iCountAdd2 = UBound($aAdd2) - 1
For $i = 0 To $iCountAdd1
If $i <= $iCountAdd2 Then
$sTemp = Int($aAdd1[$iCountAdd1 - $i]) + Int($aAdd2[$iCountAdd2 - $i]) + $iCarry
Else
$sTemp = Int($aAdd1[$iCountAdd1 - $i]) + $iCarry
EndIf
$iCarry = Int($sTemp/1000000000000000000)
$sOut = StringRight('000000000000000000' & $sTemp, 18) & $sOut
Next
Return StringRegExpReplace($sOut, '(\A0+)(\d+)', '$2')
EndFunc
Was für Namen?
Wo werden die aufgelistet?
Was willst Du an den Namen korrigieren?
Wo sind die Namen gespeichert?
Oder einfach: Poste Dein Script! ![]()