Sicher, dass er nicht in einer Zelle einige Zeichen fett und einige nicht möchte?
Er sprach vom gesamten Inhalt der Zelle, nicht von einzelnen Zeichen. - Man kann auch mehr hineininterpretieren, wenn man will... ![]()
Sicher, dass er nicht in einer Zelle einige Zeichen fett und einige nicht möchte?
Er sprach vom gesamten Inhalt der Zelle, nicht von einzelnen Zeichen. - Man kann auch mehr hineininterpretieren, wenn man will... ![]()
Vor vielen Jahren hab ich auch mal ein Skript erstellt um Listview-Item (und SubItem) per Doppelklick on-the-fly zu bearbeiten. Vielleicht kannst du es brauchen: https://autoit.de/index.php/Thre…49074#post49074
Aber was ist, wenn so ein sinnfreier Schwachsinn wie TuneUp&Co. auf dem Rechner des Endbenutzers ist, der alle naselang mal die Temp files löscht?
Nun, "C:\Users\USER\AppData\Local" ist aber kein Temp-Ordner. Unter AppData kann man beruhigt Dinge ablegen, die der User nicht versehentlich einfach mal wegsemmeln soll. Mit Standardeinstellungen ist dieser Ordnerzweig für den User nicht sichtbar (er wird auch nicht in die Windows-Suche einbezogen).
Ich meinte, dass die Registry sicherer ist als eine INI. Wo soll man die dann sinnvoll speichern?
Dafür gibt es das: C:\Users\USER\AppData\Local ![]()
jedoch wenn man diese Koordinaten hier errechnen will bekommt man ein falsches Ergebnis raus
Da kann niemals ein "richtiges" Ergebnis rauskommen, ist einer der Sonderfälle. Die Berechnung von atan beinhaltet eine Division durch 0.
Verwende Run - da bekommst du die PID und kannst damit das zugehörige Fenster ermitteln. Hast du das Fensterhandle, kannst du es ganz normal ausblenden.
Wende dich am Besten an den Autor der UDF im engl. Forum. Wenn beim händischen Eintragen ein falscher Wert kommt, scheint das Verarbeitungsproblem innerhalb der UDF zu liegen.
Passiert das auch, wenn du mal den PC neu startest und dann mit Wert 2 die Funktion aufrufst? - Wenn es dann klappt, wäre es ein Hinweis, dass intern die Variable mit der OID nicht änderbar ist, wenn sie einmal gesetzt ist (wäre ganz schön sinnfrei).
Eventuell die komplette Verzeichnisstruktur ein mal einlesen und dann die vorhandenen Ordnerzahlen durchgehen?
Genau, mach das. Und beim Bewegen zwischen den Ordnern nutzt du dann den Array-Index des Arrays mit allen Pfaden. Vereinfacht auch die Fehlerabfragen: kein If FileExists notwendig, Anfang und Ende sagen dir Index=0 (oder 1, je nachdem, ob du die Pfadanzahl an [0] führst oder nicht) und Ubound.
1. Klappt es, wenn du die Befehlsaufrufe einzeln schreibst und nicht in einer Schleife?
2. Setze doch mal ein ConsoleWrite('$snmpOID = ' & $snmpOID & @CRLF) in die UDF, direkt unter den Funktionskopf von _SNMPBuildPacket um zu prüfen, ob der korrekte Wert in der Funktion landet. Wenn dem so ist (wovon ich eigentlich ausgehe), mußt du der internen Funktionsverarbeitung folgen um zu sehen, wo der Fehler auftritt.
Ich habe die Beispiele von der AutoIt.de online Hilfe genommen.
Irgendwie fühle ich mich veräppelt.
Wie schon gesagt, habe ich keine Einwände, wenn Beiträge/Tutorials von mir auch von anderen publiziert werden. Aber ein Verweis auf den Autor ist ein absolutes Muss.
Und wie im Folgenden zu sehen, hast du sowohl Beschreibung als auch Bsp. 1:1 aus meinem Tutorial entnommen. Wenn du die Bilder siehst kannst du dich eventuell auch wieder daran erinnern.
offenbar kann kann die SNMP-UDF insbesondere _SNMPBuildPacket offenbar (laut Kommentaren in der UDF) an der ersten Stelle (OID) kein Array nutzen... mache ich genau dieses wie vin BugFix vorgeschlagen, erhalten ich auch tatsächlich immer die selbe Ausgabe, obwohl eine andere OID übergeben wird.
Kann ich nicht nachvollziehen, den Gedanken.
In deinem Skript führst du die OID in einem Array, aber an den Aufruf der Funktion _SNMPBuildPacket übergibst du doch kein Array, sondern nur den Inhalt des jeweiligen Array-Elements, einen String.
Der Kommentar in der UDF verweist nur darauf, dass keine Unterstützung (mehr) für ein Array als Parameter für OID besteht.
ich habe keine Beispiele von water genommen.
Nein (hat auch nie wer behauptet) - aber von mir.
Kleine Ergänzung: Alle Attribute per Klick abrufbar.
Ich muß relativ häufig an Dateien das Erstelldatum ändern, weil dieses bei Speichervorgängen zwischen verschiedenen OS manchmal verändert wird (Datum auf NAS ist z.B. nach Spannungsausfall auf Werkseinstellung - Wird ein Dokument direkt dort abgelegt, bekommt es das falsche Datum).
Bei Dokumenten, die einer Revision unterliegen kommt es natürlich seltsam, wenn in der Fußzeile steht "Rev. 6 vom 05.03.2017" und das Erstelldatum sagt "01.01.2010"
Bisher habe ich dann schnell die Codezeile für FileSetTime händisch befüllt und die Daten korrigiert.
Nun habe ich das mal in eine kleine Oberfläche gepackt.
- Ordner wird ausgewählt (Dateien darin werden in ein Listview geladen mit Anzeige DateCreate, DateModified)
- Dateien mit den Attributen: Hidden, ReadOnly, System werden gleich rot eingefärbt - bei R und S ist das Ändern des Datums sowieso nicht möglich und versteckte Dateien sind sicher nicht umsonst versteckt. Falls diese Dateien doch markiert sind, werden sie vom Tool ignoriert.
- In den Datumsfeldern werden die gewünschten Datumswerte(+ Uhrzeit) gewählt und mit "Datum Setzen" für alle markierten Dateien (selektive Mehrfachauswahl ist möglich) angewendet. Anschliessend wird das Listview neu geladen - die Änderungen sind also sofort sichtbar.
EDIT: [v0.2] Da ich die Attribute sowieso auslese, speichere ich sie zwischen und mit Klick auf eine Datei werden deren Attribute als Tooltip gezeigt.
EDIT: [v0.3]
- NEU: (optional) automatische Übernahme Erstellungsdatum auch als Änderungsdatum
- NEU: Datum aus markierter Datei in Datums-Control übernehmen
- FIXED: Bisher keine Fehlermeldung bei versuchter Änderung einer offenen Datei. Jetzt [FILE-IN-USE] Meldung.
;-- TIME_STAMP 2017-03-30 10:51:41 v 0.3
;-- charset=UTF-8
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <StructureConstants.au3>
#include <WindowsConstants.au3>
Global $hListView, $iIndexClicked = -1, $aAttrib, $fSameDate = False
_Main()
Func _Main()
Local $hGui = GUICreate('Erstellungs- /Änderungsdatum setzen', 600, 480)
GUICtrlCreateLabel('Verzeichnis', 15, 18, 60)
Local $idPath = GUICtrlCreateInput('', 80, 15, 478, 20, BitOR($ES_AUTOHSCROLL, $ES_READONLY))
GUICtrlSetBkColor(-1, 0xFFFFFF)
Local $idSelect = GUICtrlCreateButton('...', 563, 14, 22, 22)
GUICtrlCreateLabel('Erstellt', 15, 48, 40)
Local $idDateCreate = GUICtrlCreateDate(StringFormat('%s/%s/%s %s:%s:%s', @Year, @Mon, @MDay, @Hour, @Min, @Sec), 55, 45, 140, 22, $DTS_SHORTDATEFORMAT)
GUICtrlCreateLabel('Geändert', 215, 48, 45)
Local $idDateChange = GUICtrlCreateDate(StringFormat('%s/%s/%s %s:%s:%s', @Year, @Mon, @MDay, @Hour, @Min, @Sec), 265, 45, 140, 22, $DTS_SHORTDATEFORMAT)
Local $sStyle = "dd.MM.yyyy HH:mm:ss"
GUICtrlSendMsg($idDateCreate, $DTM_SETFORMATW, 0, $sStyle)
GUICtrlSendMsg($idDateChange, $DTM_SETFORMATW, 0, $sStyle)
Local $idSet = GUICtrlCreateButton('Datum Setzen', 435, 75, 150, 22)
Local $idCurrentDate = GUICtrlCreateButton('Dateidatum übernehmen', 15, 75, 180, 22)
Local $idSameDate = GUICtrlCreateCheckbox(' Datum Änderung == Erstelldatum', 215, 75)
Local $idListview = GuiCtrlCreateListView('Datei|Erstellt|Geändert', 15, 105, 570, 360, _
BitXOR(BitOR($GUI_SS_DEFAULT_LISTVIEW,$LVS_SHOWSELALWAYS),$LVS_SINGLESEL), _
BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT,$LVS_EX_DOUBLEBUFFER))
_GUICtrlListView_SetColumnWidth($idListview, 0, 340)
_GUICtrlListView_SetColumnWidth($idListview, 1, 100)
_GUICtrlListView_SetColumnWidth($idListview, 2, $LVSCW_AUTOSIZE_USEHEADER)
$hListview = GUICtrlGetHandle($idListview)
Local $sSelect, $sDateCreate, $sDateChange, $iIndex
Local $sPattern = '(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2}):(\d{2})'
Local $sRepl = '$3$2$1$4$5$6'
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ; bei Left-Click auf Item werden Attribute als Tooltip gezeigt
GUISetState()
While True
Switch GUIGetMsg()
Case -3
Exit
Case $idSelect
$sSelect = FileSelectFolder('Bitte einen Ordner auswählen', @HomeDrive & '\' & @HomePath)
If $sSelect <> '' Then
GUICtrlSetData($idPath, $sSelect)
If __FillListview($idListview, $sSelect) = 0 Then MsgBox(16, 'Fehler', 'Der gewählte Ordner enthält keine Dateien!')
EndIf
Case $idSet
$sDateCreate = StringRegExpReplace(GUICtrlRead($idDateCreate), $sPattern, $sRepl)
$sDateChange = StringRegExpReplace(GUICtrlRead($idDateChange), $sPattern, $sRepl)
; Plausibilität Create<=Change prüfen (nur wenn beide Daten gesetzt werden)
If Number($sDateCreate) > Number($sDateChange) And (Not $fSameDate) Then
MsgBox(16, 'Fehler', 'Änderungsdatum liegt vor Erstellungsdatum!')
Else
__SetDate(GUICtrlRead($idPath), $idListview, $sDateCreate, $sDateChange)
__FillListview($idListview, GUICtrlRead($idPath))
EndIf
Case $idCurrentDate
Local $aSel = _GUICtrlListView_GetSelectedIndices($idListview, True)
If $aSel[0] = 0 Then
MsgBox(16, 'Fehler', 'Es wurde keine Datei ausgewählt!')
Else
_SetDateCtrl($idDateCreate, _GUICtrlListView_GetItemText($idListview, $aSel[1], 1))
_SetDateCtrl($idDateChange, _GUICtrlListView_GetItemText($idListview, $aSel[1], 2))
EndIf
Case $idSameDate
If BitAND(GUICtrlRead($idSameDate), $GUI_CHECKED) Then
$fSameDate = True
GUICtrlSetState($idDateChange, $GUI_DISABLE)
Else
$fSameDate = False
GUICtrlSetState($idDateChange, $GUI_ENABLE)
EndIf
EndSwitch
WEnd
EndFunc
Func _SetDateCtrl($iID, $sDate)
$sDate = StringRegExpReplace($sDate, '(\d{2})\.(\d{2})\.(\d{4}) (.+)', '$3/$2/$1 $4')
GUICtrlSetData($iID, $sDate)
EndFunc
Func __FillListview($idLV, $sPath)
Local Static $aColor[2] = [0xE5EEFF,0xBCC3FF], $iColWarning = 0xFF93B4
If Not FileExists($sPath) Then Return
Local $aFiles = _FileListToArray($sPath, '*', 1)
If @error Then Return 0
_GUICtrlListView_BeginUpdate($idLV)
_GUICtrlListView_DeleteAllItems($idLV)
Local $sItem, $sPatt = '(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})', $sAttrib
Local $aAttr[$aFiles[0]]
For $i = 1 To $aFiles[0]
$sItem = StringFormat('%s|%s|%s', $aFiles[$i], _
StringRegExpReplace(FileGetTime($sPath & '\' & $aFiles[$i], 1, 1), $sPatt, '$3.$2.$1 $4:$5:$6'), _
StringRegExpReplace(FileGetTime($sPath & '\' & $aFiles[$i], 0, 1), $sPatt, '$3.$2.$1 $4:$5:$6'))
GUICtrlCreateListViewItem($sItem, $idLV)
$sAttrib = FileGetAttrib($sPath & '\' & $aFiles[$i])
$aAttr[$i-1] = $sAttrib
If StringInStr($sAttrib, 'H') Or StringInStr($sAttrib, 'R') Or StringInStr($sAttrib, 'S') Then
GUICtrlSetBkColor(-1, $iColWarning)
Else
GUICtrlSetBkColor(-1, $aColor[Mod($i,2)])
EndIf
Next
$aAttrib = $aAttr
_GUICtrlListView_EndUpdate($idLV)
Return $aFiles[0]
EndFunc
Func __SetDate($sFolder, $idLV, $sCreate, $sChange)
If $sFolder = '' Then Return
Local $aSel = _GUICtrlListView_GetSelectedIndices($idLV, True)
If $aSel[0] = 0 Then Return MsgBox(16, 'Fehler', 'Es wurde keine Datei ausgewählt!')
Local $sFile, $sAttrib, $sErr = '', $iOK
For $i = 1 To $aSel[0]
$sFile = $sFolder & '\' & _GUICtrlListView_GetItemText($idLV, $aSel[$i])
$sAttrib = FileGetAttrib($sFile)
If StringInStr($sAttrib, 'R') Then
$sErr &= '[READONLY] ' & $sFile & @CRLF
ContinueLoop
ElseIf StringInStr($sAttrib, 'S') Then
$sErr &= '[SYSTEM] ' & $sFile & @CRLF
ContinueLoop
ElseIf StringInStr($sAttrib, 'H') Then
$sErr &= '[HIDDEN] ' & $sFile & @CRLF
ContinueLoop
EndIf
$iOK = 0
$iOK += FileSetTime($sFile, $sCreate, 1)
$iOK += FileSetTime($sFile, ($fSameDate ? $sCreate : $sChange), 0)
If $iOK < 2 Then $sErr &= '[FILE-IN-USE] ' & $sFile & @CRLF
Next
If $sErr <> '' Then Return MsgBox(16, 'Fehler', 'Folgende Dateien wurden nicht bearbeitet:' & @CRLF & $sErr)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
If HWnd(DllStructGetData($tNMHDR, "hWndFrom")) = $hListView And _
DllStructGetData($tNMHDR, "Code") = $NM_CLICK Then
Local $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
$iIndexClicked = DllStructGetData($tInfo, "Index")
AdlibRegister('__TipAttrib')
EndIf
Return $GUI_RUNDEFMSG
EndFunc
Func __TipAttrib()
If $iIndexClicked = -1 Then Return
AdlibUnRegister('__TipAttrib')
Local $sText = $aAttrib[$iIndexClicked]
_ToolTipMouseExit($sText, 1700, -1, -1, 'Attribute', 1, 1)
$iIndexClicked = -1
EndFunc
Func _ToolTipMouseExit($TEXT, $TIME=-1, $x=-1, $y=-1, $TITLE='', $ICON=0, $OPT='')
; Standard ToolTip, ergänzt um Schließen nach Zeit oder bei Mausbewegung
If $TIME = -1 Then $TIME = 3000
Local $start = TimerInit()
Local $pos, $pos0 = MouseGetPos()
If ($x = -1) Or ($y = -1) Then
ToolTip($TEXT, $pos0[0], $pos0[1], $TITLE, $ICON, $OPT)
Else
ToolTip($TEXT, $x, $y, $TITLE, $ICON, $OPT)
EndIf
Do
Sleep(50)
$pos = MouseGetPos()
Until (TimerDiff($start) > $TIME) Or _
(Abs($pos[0] - $pos0[0]) > 10 Or _
Abs($pos[1] - $pos0[1]) > 10)
ToolTip('')
EndFunc ;==>_ToolTipMouseExit
Alles anzeigen
Wenn du eine dynamische Anzahl an Controls verwendest, ist es durchaus sinnvoll, die GUI auch dynamisch anzupassen. Hier mal ein Bsp. dafür:
Global $GUI, $aInput[2] = [1], $btAdd
$GUI = GUICreate('Test', 400, 50)
$aInput[1] = GUICtrlCreateInput('', 10, 10, 300, 21)
GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
$btAdd = GUICtrlCreateButton('Add Input', 320, 10, 70, 21)
GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
GUISetState()
While 1
Switch GUIGetMsg()
Case -3
Exit
Case $btAdd
_NewCtrl()
EndSwitch
WEnd
Func _NewCtrl()
Local $iDiff = 31 ; == Abstand + Höhe ==> 10 + 21
Local Static $iY = 10 ; == Startwert vom ersten Ctrl
$iY += $iDiff
$aInput[0] += 1
ReDim $aInput[$aInput[0]+1]
Local $aWin = WinGetPos($GUI)
WinMove($GUI, '', $aWin[0], $aWin[1], $aWin[2], $aWin[3] + 31)
$aInput[$aInput[0]] = GUICtrlCreateInput('', 10, $iY, 300, 21)
GUICtrlSetResizing(-1, 802) ; $GUI_DOCKALL
EndFunc
Alles anzeigen
Grundsätzlich habe ich nichts dagegen, wenn du Passagen aus meinem Array-Tut wortwörtlich verwendest. Aber es gehört zum guten Ton, dies vorab mit dem Ersteller zu klären, ebenso wie das Anbringen entsprechender Quellenangaben.
Wenn dir sowas mit anderen Veröffentlichungen passiert, kannst du mal schnell Post vom Abmahnanwalt bekommen. Also sei vorsichtig mit C&P.
Also, ich kann beim besten Willen keinen Bezug zwischen Nippelboard und Jingles herstellen.
Bei mir entstehen da völlig andere Assoziationen. ![]()
Deine Variablen-Entschlüsselung kann nicht funktionieren, aus "$var" & 1 wird nicht die Variable $var1, sondern der String "$var1".
Das löst man so:
;~ Global $oid1 = "iso.3.6.1.2.1.1.1.0"
;~ Global $oid2 = "iso.3.6.1.2.1.1.6.0"
Global $aOID[2] = ["iso.3.6.1.2.1.1.1.0", "iso.3.6.1.2.1.1.6.0"]
UDPStartup()
;~ For $i = 1 To 2
For $i = 0 To 1
$Socket = UDPOpen('192.168.x.x', $Port)
$test1 = _SNMPBuildPacket($aOID[$i], $SNMP_Community, $SNMP_Version, $SNMP_ReqID, "A1")
UDPSend($Socket, $test1)
_StartListener()
;~ ConsoleWrite($result[1][1]&@LF)
Next
Alles anzeigen
Du musst beachten, dass das Zeichnen dem auf einer Leinwand gemalten ähnelt. D.h., bereits gemaltes verschwindet nicht einfach bzw. läßt sich nicht ohne Weiteres verschieben. Ich würde dir raten, vielleicht eher mit GDIplus zu zeichnen. Die Funktionen sind etwas vielfältiger.