Wie kommst Du denn bei Hex 0x0000C03F auf 1.5000?
Bei mir sind das 49215.
Wie kommst Du denn bei Hex 0x0000C03F auf 1.5000?
Bei mir sind das 49215.
Vielleicht verstehst Du es so besser:
[autoit]
If $CmdLine[0] > 0 Then
For $i = 1 To $CmdLine[0]
If FileExists($CmdLine[$i]) Then SoundPlay($CmdLine[$i], 1)
Next
Else
MsgBox(0, 'Fehler', 'Keine Datei übergeben!')
EndIf
Das Skript musst Du compilieren und dann der Exe beim Start die Pfade zu den MP3s übergeben (durch Leerzeichen getrennt).
Such mal in der Hilfe nach "Command Line Parameters"! Dort findest Du die Erklärung zu dem speziellen Array: $CmdLine
Und wenn die Leertaste kaputt ist, braucht man auch eine Endlosschleife (mit variabler Geschwindigkeit) zum senden. Alles klar!
Die Ausreden der Botter werden auch immer besser... ![]()
Das sieht eher nach einem (Game-)Bot aus. Demzufolge gehört das überhaupt nicht hierher.
Bitte Forenregeln beachten!
magnifier512 hat wahrscheinlich ein 64Bit-Firefox!? ![]()
Bei einem 32Bit-Firefox und Win7 64Bit wäre der RegPfad: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox 3.6
Wichtig ist das "Wow6432Node" dazwischen.
Deine Textdatei heißt bei mir "treeview-baum.txt" und liegt im Scriptverzeichnis.
Und hier ist dann das Script zum darstellen als Treeview:
#include <GuiTreeView.au3>
Global $sFile, $aItems, $aSubItems, $oDictionary, $hGui, $hTreeView, $hParent
Opt('GUIDataSeparatorChar', '\')
$sFile = FileRead(@ScriptDir & '\treeview-baum.txt') ; <- Dateiname/-Pfad evtl. anpassen!
$aItems = StringSplit($sFile, @CRLF, 1)
If Not IsArray($aItems) Then Exit
$hGui = GUICreate('test', 300, 400)
$hTreeView = GUICtrlCreateTreeView(10, 10, 280, 380)
$hWndTreeView = GUICtrlGetHandle($hTreeView)
For $i = 1 To $aItems[0]
$hParent = $hWndTreeView
$sSearch = $aItems[$i]
Do
$hParent = _GUICtrlTreeView_FindItemEx($hWndTreeView, $sSearch)
If Not $hParent Then $sSearch = StringRegExpReplace($sSearch, '(.+)\\.+', '$1')
Until $hParent Or $sSearch = StringRegExpReplace($aItems[$i], '(.+?)\\.+', '$1')
If $hParent Then
_GUICtrlTreeView_CreatePath($hWndTreeView, $hParent, StringTrimLeft($aItems[$i], StringLen($sSearch) + 1))
Else
_GUICtrlTreeView_CreatePath($hWndTreeView, $hParent, $aItems[$i])
EndIf
Next
GUISetState()
Do
Until GUIGetMsg() = -3
Func _GUICtrlTreeView_CreatePath($hTreeView, $hParent, $sPath)
Local $sItem
If $sPath = '' Then Return
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$sItem = StringRegExpReplace($sPath, '(.+?)\\.*', '$1')
$hParent = _GUICtrlTreeView_AddChild($hTreeView, $hParent, $sItem)
_GUICtrlTreeView_CreatePath($hTreeView, $hParent, StringRegExpReplace($sPath, '.+?\\(.*)', '$1'))
EndFunc
Poste bitte Dein Script, dann können wir Dir auch helfen.
"Geht nicht" ist übrigens die am meisten gehasste Fehlerbeschreibung. ![]()
Bots sind hier in erster Linie verboten, weil Botcoder schlecht für das Forum sind.
Sie frustrieren die "Stamm"-User, weil sie immer und immer wieder die gleichen Fragen stellen. Sie melden sich hier an, stellen ihre Frage "Brauche Hilfe bei Bot xyz" und wenn sie dann ihre Antwort "abgegrast" haben sind sie wieder weg.
Natürlich hat keiner vorher auch nur einen Beitrag im Forum gelesen oder gar die Forumsuche nach der Frage benutzt. Dann wäre die Frage nämlich schon min. ein dutzend mal beantwortet gewesen.
So war das, als wir hier noch ein Botforum hatten, dass dann aber (zum Glück) abgeschafft wurde.
Hinzu kommt, dass auch die rechtliche Lage schwer zu beurteilen ist. Wenn die Betreiber dieser Online-Games das automatisieren in ihren AGBs verbieten, macht man sich dann "mitschuldig", wenn man bei den Bots hilft?
Führt das evtl. zu Abmahnungen oder ähnlichen, wenn solche Bots hier angeboten werden? Auch das war und ist ein Kriterium gegen Botcoding hier auf https://autoit.de/www.autoit.de!
Und wenn man dann noch die Argumente der Fairness (wer nicht fair spielen kann, sollte es lassen) hinzufügt, dann hast Du einen Überblick darüber, warum wir hier keine Bots wollen.
Du hast das hier vergessen:
[autoit]Global $B_DESCENDING[_GUICtrlListView_GetColumnCount($hListView)]
[/autoit]
denn Du kannst hier nicht einfach True eintragen:
_GUICtrlListView_SimpleSort($GuiList,True, 0)
[/autoit]Es geht aber auch so:
#include <GuiListView.au3>
Const $programm = 'Test'
[/autoit] [autoit][/autoit] [autoit]GUICreate($programm, 500, 250)
$GuiBut_beenden = GUICtrlCreateButton('Beenden', 5, 5)
$GuiList = GUICtrlCreateListView('Datei|Zuletzt Bearbeitet|Größe', 80, 20, 400, 200, 0x0001, BitOR(0x00000001, 0x00000020, 0x00010000))
GUICtrlCreateListViewItem('A|qwer|zuio', $GuiList)
GUICtrlCreateListViewItem('B|asdf|hjkl', $GuiList)
GUICtrlCreateListViewItem('C|yxcv|vbnm', $GuiList)
GUISetState()
Global $hWndListView = GUICtrlGetHandle($GuiList)
_GUICtrlListView_RegisterSortCallBack($hWndListView)
Do
$aktion = GUIGetMsg()
Switch $aktion
Case $GuiList
_GUICtrlListView_SortItems($hWndListView, GUICtrlGetState($GuiList))
Case $GuiBut_beenden
ContinueCase
Case -3
_GUICtrlListView_UnRegisterSortCallBack($hWndListView)
Exit
EndSwitch
Until 0
Alles Gute zu Deinem Geburtstag, eukalyptus!
Bleib gesund und munter und schreib' weiter solch tolle Skripte. ![]()
Statt Google hättest Du einfach mal das Beispiel zu TCPRecv durchschauen müssen. Dort gibt es diese, von Dir gesuchte, Funktion bereits:
Func SocketToIP($SHOCKET)
Local $sockaddr, $aRet
$sockaddr = DllStructCreate("short;ushort;uint;char[8]")
$aRet = DllCall("Ws2_32.dll", "int", "getpeername", "int", $SHOCKET, _
"ptr", DllStructGetPtr($sockaddr), "int*", DllStructGetSize($sockaddr))
If Not @error And $aRet[0] = 0 Then
$aRet = DllCall("Ws2_32.dll", "str", "inet_ntoa", "int", DllStructGetData($sockaddr, 3))
If Not @error Then $aRet = $aRet[0]
Else
$aRet = 0
EndIf
$sockaddr = 0
[/autoit] [autoit][/autoit] [autoit]Return $aRet
EndFunc ;==>SocketToIP
Upps, da war noch ein kleiner Fehler. So geht's:
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <Misc.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
GUICreate("TreeView Edit Text", 400, 300)
$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, BitOr($GUI_SS_DEFAULT_TREEVIEW, $TVS_EDITLABELS))
$hWndTreeView = GUICtrlGetHandle($hTreeView) ; <-- das ist wichtig! Die UDFs am besten immer mit dem Handle aufrufen.
GUISetState()
Dim $hItem[6], $iEditItem
For $x = 0 To 5
$hItem[$x] = _GUICtrlTreeView_Add($hWndTreeView, 0, StringFormat("[%02d] New Item", $x + 1))
Next
GUIRegisterMsg(0x004E, "MY_WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]; Loop until user exits
Do
If _IsPressed("0D") Then _GUICtrlTreeView_EndEdit($hWndTreeView) ; <-- zum beenden des Editierens mit [Enter]
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func MY_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
;~ #forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
;~ ConsoleWrite($hWnd & @TAB & $iMsg & @TAB & $iwParam & @TAB & $ilParam & @TAB & $iIDFrom & @CRLF)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTreeView
Switch $iCode
Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
ConsoleWrite("Doppelklick" & @CRLF)
Return 1 ; nonzero to not allow the default processing
;~ Return 0 ; zero to allow the default processing
Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
$iEditItem = _GUICtrlTreeView_GetEditControl($hWndTreeView) ; <-- das muss natürlich hier hin, nicht bei Doppelklick
_GUICtrlTreeView_EditText($hWndTreeView, $iEditItem)
ConsoleWrite("Edit angefangen" & @CRLF)
;~ Return 1 ; nonzero to not allow the default processing
Return 0 ; zero to allow the default processing
Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
ConsoleWrite("Edit beendet" & @CRLF)
_GUICtrlTreeView_EndEdit($hWndTreeView)
Return 1 ; zero to allow the default processing
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_NOTIFY
So funktioniert Dein Beispiel von oben:
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <StructureConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
GUICreate("TreeView Edit Text", 400, 300)
$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, BitOr($GUI_SS_DEFAULT_TREEVIEW, $TVS_EDITLABELS))
$hWndTreeView = GUICtrlGetHandle($hTreeView) ; <-- das ist wichtig! Die UDFs am besten immer mit dem Handle aufrufen.
GUISetState()
Dim $hItem[6], $iEditItem
For $x = 0 To 5
$hItem[$x] = _GUICtrlTreeView_Add($hWndTreeView, 0, StringFormat("[%02d] New Item", $x + 1))
Next
GUIRegisterMsg(0x004E, "MY_WM_NOTIFY")
[/autoit] [autoit][/autoit] [autoit]; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
Func MY_WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
;~ #forceref $hWnd, $iMsg, $iwParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
;~ ConsoleWrite($hWnd & @TAB & $iMsg & @TAB & $iwParam & @TAB & $ilParam & @TAB & $iIDFrom & @CRLF)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hWndTreeView
Switch $iCode
Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
$iEditItem = _GUICtrlTreeView_GetEditControl($hWndTreeView)
_GUICtrlTreeView_EditText($hWndTreeView, $iEditItem)
ConsoleWrite("Doppelklick" & @CRLF)
Return 1 ; nonzero to not allow the default processing
;~ Return 0 ; zero to allow the default processing
Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
ConsoleWrite("Edit angefangen" & @CRLF)
;~ Return 1 ; nonzero to not allow the default processing
Return 0 ; zero to allow the default processing
Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
ConsoleWrite("Edit beendet" & @CRLF)
_GUICtrlTreeView_EndEdit($hWndTreeView)
Return 1 ; zero to allow the default processing
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>MY_WM_NOTIFY
So, es gibt schon wieder eine neue Version (Post#1).
Dort habe ich Deine Vorschläge soweit umgesetzt, UEZ. Allerdings konnte ich mich nicht dazu durchringen standardmäßig abwechselnde Farben einzustellen. Gefällt mir nicht so, aber man kann das jetzt in der Ini anpassen.
Die Idee mit dem Tooltip ist mir noch eingefallen. Das finde ich eigentlich ganz gut. ![]()
Alina: Ja, über mehrere Adressbücher habe ich auch schon nachgedacht. Kommt evtl. in einer späteren Version.
Noch ein Hinweis: Beim Befehl "If" spricht man von einer Anweisung, nicht von einer Schleife. Zwischen "If" und "Then" stehen die Bedingungen. Schleifen sind: "For...Next", "While...WEnd" und "Do...Until".
![]()
@unknown: suchst Du sowas: Netview in AutoIt?
Also mit WMI bekomme ich bei mir (Win7, 64Bit) die gleichen Werte, wie im Taskmanager:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
$hGui = GUICreate('Process-Memory', 640, 480)
$hListview = GUICtrlCreateListView('Process|PID|Mem (privat)|Mem (peak)', 5, 5, 630, 440)
GUICtrlSendMsg($hListview, $LVM_SETCOLUMNWIDTH, 0, 150)
GUICtrlSendMsg($hListview, $LVM_SETCOLUMNWIDTH, 1, 80)
GUICtrlSendMsg($hListview, $LVM_SETCOLUMNWIDTH, 2, 120)
GUICtrlSendMsg($hListview, $LVM_SETCOLUMNWIDTH, 3, 120)
$hWndListview = GUICtrlGetHandle($hListview)
$hRefresh = GUICtrlCreateButton('Refresh', 280, 450, 80, 25)
_RefreshListview()
GUISetState()
While True
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $hRefresh
_RefreshListview()
EndSwitch
WEnd
Func _RefreshListview()
Local $wbemFlagReturnImmediately, $wbemFlagForwardOnly, $colItems, $strComputer
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = 'localhost'
Local $objWMIService, $colItems, $sItem
_GUICtrlListView_DeleteAllItems($hWndListview)
$objWMIService = ObjGet('winmgmts:\\' & $strComputer & '\')
$colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_PerfRawData_PerfProc_Process', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
For $objItem In $colItems
$sItem = ''
$sItem &= $objItem.Name & '|' & $objItem.CreatingProcessID & '|'
$sItem &= _ByteAutoSize($objItem.WorkingSetPrivate, 0, 2) & '|' & _ByteAutoSize($objItem.WorkingSetPeak, 0, 2)
GUICtrlCreateListViewItem($sItem, $hListview)
Next
EndFunc ;==>_RefreshListview
;===============================================================================
; 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
; #FUNCTION# ====================================================================================================================
; Name...........: _StringAddThousandsSep
; Description ...: Returns the original numbered string with the Thousands delimiter inserted.
; Syntax.........: _StringAddThousandsSep($sString[, $sThousands = -1[, $sDecimal = -1]])
; Parameters ....: $sString - The string to be converted.
; $sThousands - Optional: The Thousands delimiter
; $sDecimal - Optional: The decimal delimiter
; Return values .: Success - The string with Thousands delimiter added.
; Author ........: SmOke_N (orignal _StringAddComma
; Modified.......: Valik (complete re-write, new function name)
; ===============================================================================================================================
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?(\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, StringLen($sThousands)) ; Strip leading thousands separator
If $aNumber[1] <> "" Then $sResult &= $sDecimal & $aNumber[1]
EndIf
Return $sResult
EndFunc ;==>_StringAddThousandsSep
Es gibt eine neue Version (Änderungen, BugFixes)! Siehe Post#1.