Wenn du zwischendurch per Hand rumklickst, stimmt in deinem Skript logischerweise die Zuordnung zum IE nicht mehr, da mit _IEAttach auf die vorige Webseite referenziert wurde.
Du mußt also den Bezug aktualisieren (Referenz auf die jetzt aktuelle Seite holen) oder besser nicht per Hand rumklicken, sondern alles automatisieren.
Beiträge von BugFix
-
-
Oops - da hatte ich zu schnell geschrieben. Habe nur den Text gelesen und das etwas fehlinterpretiert. Naja - ist ja noch früh am Morgen.

-
Durch das obige Script werden die Sections-Namen aus der INI ausgelesen und als Data-Werte an die Como übergeben.
[autoit]
Wärst du da nicht besser bedient mit:IniReadSectionNames
[/autoit] -
Jo, das ist korrekt. Die Codes sehen optisch unterschiedlich aus - haben aber denselben Inhalt! (einfach mal den QR-Code Scanner draufhalten)
Das liegt an den verwendeten Qualitätsleveln. In Wikipedia wurde mit dem niedrigsten Level verschlüsselt, die Dll im Skript nutzt als Standard imho ein höheres Qualitätslevel = mehr Bildpunkte. -
????
Laut Wikipedia wird NICHTS ausgegeben und mein Skript gibt etwas aus? Muß ich das verstehen?
Btw.: Mein Skript generiert keinen QR-Code selber, sondern nutzt dafür die quricol32.dll. Und diese basiert auf dem QR Code Encoder von Kentaro Fukuchi.
-
Also der Begriff "Multiarray" ist in AutoIt nicht vorhanden und beschreibt auch nicht dein vorhaben.
Du hast zwei 2-Dimensionale Array, die du zu einem 2-Dimensionalen Array zusammenfügen möchtest unter Erweiterung einer "Spalte" in der die Quelle hinterlegt wird.
Das einfachste ist die Arrays jeweils um eine Spalte zu erweitern ( ReDim ) und in die neue Spalte den von dir gewünschten Quellnamen bei jedem Element einzutragen ( For-Schleife ). Dann hast du zwei Arrays die du nur noch zusammenfügen mußt, wie bereits von Alcros beschrieben. Oder du nutzt meine Funktion _Array2DJoin()
-
Wenn man für die schwarzen "Blöcke" kleine Grafiken nehmen könnte oder z.B. noch weiße Punkte (wirkt cool) in die Blöcke setzen könnte ;)...
Und/oder einfach alles direkt einfärben
Ob es cool wäre ist vom Betrachter abhängig - auf jeden Fall wäre es ziemlich bescheuert, da dann der Code nicht mehr (sicher) gelesen werden kann.
Alle Barcodetypen basieren auf dem maximalen Kontrast zwischen Codeelement und Umgebung. Daher auch immer ein weißes Label mit schwarzem Code. 
-
Eine ganz simple Methode neben StringFormat ist z.B. folgendes:
[autoit]
[/autoit]
$zahl = ...
;== 3-stellig mit Vornullen
$zahl = StringRight("00" & $zahl, 3) -
_IELoadWait dient nicht dazu auf den Ladestatus zu prüfen. Diese Funktion lädt eine Seite und stoppt das Skript solange, bis die Seite fertig geladen ist.
[autoit]
Auf eine bestehende IE-Instanz kannst du mit_IEAttach
[/autoit]zugreifen. Mit der Funktion
[autoit]_IEPropertyGet
[/autoit]hast du Zugriff auf die Eigenschaften der IE-Instanz. Inwiefern damit auch der Seitenladestatus angezeigt werden kann ("readystate" klingt zumindest plausibel) weiß ich nicht, da ich mit IE nicht arbeite.
-
Hast du mal getestet, ob
[autoit]$check = Ping($start,250)
[/autoit]tatsächlich nach 250 ms abgebrochen wird? Nach meiner Erfahrung schert sich der Aufruf einen Dreck um den Zeitparameter. Die Funktion wird erst als beendet betrachtet, wenn Ping tatsächlich nach mehreren Versuchen die IP nicht erreicht. Und das dauert dann min 1 s. Inzwischen hat Adlib bereits den nächsten Funktionsaufruf angeschoben. Das ganze überlagert sich dann weiter und weiter.
Wäre für mich eine schlüssige Erklärung.
Ich halte es für einen weniger guten Weg, die anderen Rechner anzupingen, um zu wissen ob sie erreichbar sind. Einfach den Spieß umdrehen: Auf alle Clients läuft ein Programm, dass jede Minute aufwacht und ein PONG an den Server sendet.
-
Ich hatte mir für selbiges Problem einen Launcher geschrieben, der beim Menüaufruf die markierte(n) Dateien ausliest und dann anch Bedarf weiterverarbeitet.
Hier die Funktion zum Auslesen des Explorers:
Spoiler anzeigen
[autoit];===============================================================================
[/autoit]
; Function Name....: _ActiveExplorer_GetFilesSelected
; Description......: Erstellt ein Array mit
; - Anzahl der markierten Dateien
; - dem Pfad des aktiven Explorerfensters und
; - dem/den Pfad/en der markiert/en Datei/en
; Parameter(s).....: keine
; Requirement(s)...: offenes Explorerfenster
; Return Value(s)..: Array mit den Daten, $a[0] = Anzahl, $a[1] = Ordnerpfad, $a[2..] = Dateiname
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _ActiveExplorer_GetFilesSelected()
Local $oShell = ObjCreate("Shell.Application")
Local $oExplorer, $sPath, $oFolderView, $iCount = 0, $sSelectedFiles = '', $n = 2
For $i = 0 To $oShell.Windows.Count - 1
$oExplorer = $oShell.Windows($i)
$sPath = StringReplace(StringReplace(StringTrimLeft($oExplorer.LocationURL, 8), '%20', ' '), '/', '\')
If WinGetTitle('[ACTIVE]') = $sPath Then ExitLoop
Next
$oFolderView = $oExplorer.Document.SelectedItems()
$iCount = $oFolderView.Count
Local $aOut[$iCount +2]
$aOut[0] = $iCount
$aOut[1] = $sPath
If $iCount = 0 Then
ReDim $aOut[3]
$aOut[2] = 'NO FILE SELECT'
Else
For $oFolderItem In $oFolderView
$aOut[$n] = $oFolderItem.Name
$n += 1
Next
EndIf
Return $aOut
EndFunc ; ==>_ActiveExplorer_GetFilesSelectedEdit:
Hier mal das ganze Skript, ich hatte Menüpunkte im Kontextmenü eingefügt um Werte(Dateinamen / Pfade) in die Zwischenablage zu kopieren.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
; ===============================================================
; == Registrieren im Kontextmenü des Explorers für alle Dateien
; == Schlüssel: HKEY_CLASSES_ROOT\*\shell\CMD
; == Wert: (Standard) = "Name_des_Menüeintrages"
; == Schlüssel: HKEY_CLASSES_ROOT\*\shell\CMD\COMMAND
; == Wert: (Standard) = "Pfad_zum_kompilierten_Skript"
; ===============================================================#Region - TimeStamp
[/autoit] [autoit][/autoit] [autoit]
; 2011-09-11 13:37:20 v 1.0
#EndRegion - TimeStamp
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>_Singleton(@ScriptName) ; == sonst erfolgt Skriptaufruf für jede markierte Datei
[/autoit] [autoit][/autoit] [autoit]Opt('GUIOnEventMode', 1)
[/autoit] [autoit][/autoit] [autoit]
Local $aDeskSize[2] = [@DesktopWidth,@DesktopHeight]
Local $aMPos = MouseGetPos()
Local $x = $aMPos[0], $y = $aMPos[1]
Local $iWGUI = 120, $iHGUI = 85
If $x + $iWGUI > $aDeskSize[0] Then
$x = $aDeskSize[0] - $iWGUI
EndIf
If $y + $iHGUI > $aDeskSize[1] Then
$y = $aDeskSize[1] - $iHGUI
EndIf
Local $GUI = GUICreate('', $iWGUI, $iHGUI, $x, $y, BitOR($WS_POPUP,$WS_BORDER))
GUISetOnEvent($GUI_EVENT_CLOSE, '_close')
Local $cLV = GuiCtrlCreateListView('LV', 0, 0, $iWGUI, $iHGUI, BitOR($LVS_NOCOLUMNHEADER,$LVS_SINGLESEL), BitOR($LVS_EX_GRIDLINES,$LVS_EX_FULLROWSELECT))
_GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($cLV), 0, $LVSCW_AUTOSIZE_USEHEADER)
Local $cFull = GUICtrlCreateListViewItem('kpl. Dateipfade', $cLV)
GUICtrlSetOnEvent(-1, '_OnClick')
Local $cFile = GUICtrlCreateListViewItem('Dateinamen', $cLV)
GUICtrlSetOnEvent(-1, '_OnClick')
Local $cPath = GUICtrlCreateListViewItem('Pfadname', $cLV)
GUICtrlSetOnEvent(-1, '_OnClick')
Local $cSize = GUICtrlCreateListViewItem('Dateigrößen', $cLV)
GUICtrlSetOnEvent(-1, '_OnClick'); == Markierte Datei(en) auslesen
[/autoit] [autoit][/autoit] [autoit]
Global $aSelected = _ActiveExplorer_GetFilesSelected()
Switch $aSelected[0]
Case 0
Exit MsgBox(0, 'Achtung', 'Keine Datei ausgewählt im Ordner' & @CRLF & $aSelected[1])
Case 1
GUICtrlSetData($cFull, 'kpl. Dateipfad')
GUICtrlSetData($cFile, 'Dateiname')
GUICtrlSetData($cSize, 'Dateigröße')
EndSwitchGUISetState()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
Sleep(50)
WEndFunc _close()
[/autoit] [autoit][/autoit] [autoit]
Exit
EndFuncFunc _OnClick()
[/autoit] [autoit][/autoit] [autoit]
Local $sRet = ''
Switch @GUI_CtrlId
Case $cFull
For $i = 2 To $aSelected[0]+1
$sRet &= $aSelected[1] & '\' & $aSelected[$i] & @CRLF
Next
Case $cFile
For $i = 2 To $aSelected[0]+1
$sRet &= $aSelected[$i] & @CRLF
Next
Case $cPath
$sRet = $aSelected[1]
Case $cSize
For $i = 2 To $aSelected[0]+1
Local $iSize = FileGetSize($aSelected[1] & '\' & $aSelected[$i])
$sRet &= $aSelected[$i] & @TAB & $iSize & @CRLF
Next
EndSwitch
ClipPut($sRet)
_close()
EndFunc;===============================================================================
[/autoit]
; Function Name....: _ActiveExplorer_GetFilesSelected
; Description......: Erstellt ein Array mit
; - Anzahl der markierten Dateien
; - dem Pfad des aktiven Explorerfensters und
; - dem/den Pfad/en der markiert/en Datei/en
; Parameter(s).....: keine
; Requirement(s)...: offenes Explorerfenster
; Return Value(s)..: Array mit den Daten, $a[0] = Anzahl, $a[1] = Ordnerpfad, $a[2..] = Dateiname
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _ActiveExplorer_GetFilesSelected()
Local $oShell = ObjCreate("Shell.Application")
Local $oExplorer, $sPath, $oFolderView, $iCount = 0, $sSelectedFiles = '', $n = 2
For $i = 0 To $oShell.Windows.Count - 1
$oExplorer = $oShell.Windows($i)
$sPath = StringReplace(StringReplace(StringTrimLeft($oExplorer.LocationURL, 8), '%20', ' '), '/', '\')
If WinGetTitle('[ACTIVE]') = $sPath Then ExitLoop
Next
$oFolderView = $oExplorer.Document.SelectedItems()
$iCount = $oFolderView.Count
Local $aOut[$iCount +2]
$aOut[0] = $iCount
$aOut[1] = $sPath
If $iCount = 0 Then
ReDim $aOut[3]
$aOut[2] = 'NO FILE SELECT'
Else
For $oFolderItem In $oFolderView
$aOut[$n] = $oFolderItem.Name
$n += 1
Next
EndIf
Return $aOut
EndFunc ; ==>_ActiveExplorer_GetFilesSelected -
Einen kleine Bitte hätte ich noch, da es mir "auf die Schnelle" noch schwer fällt, mich in den Code einzulesen.
Ich hoffe es ist nicht zu unverschämt, wenn ich Euch bitte sowas noch einzubauen.
Da stellt sich mir ernsthaft die Frage: Was treibst du hier im Forum? Bist du überhaupt gewillt deinen Wissensstand zu erweitern oder willst du nur auf die Betteltour die Arbeit von anderen erledigen lassen?Und ja, ich finde es verdammt unverschämt, wenn man andere für sich werkeln läßt!
Aus diesem Grunde:
Dieser Thread wird vorerst geschlossen, damit der TE die Muße hat, das Skript von Oscar zu lesen, zu verstehen und mit dem Plus an Wissen kann er auch ohne unsere Hilfe den Rest erledigen.
Btw.: Tauchen in den nächsten Tagen Threads zur selben Thematik auf, kannst du sicher sein, dass diese geschlossen werden.[CLOSED]
-
Egal, wie du es löst (bei _StringBetween ist das Endelement logischerweise nicht @CRLF sondern @CR, da immer nur ein Zeichen der Begrenzer ist) - du wirst immer ein Array erhalten und kannst erst im zweiten Schritt auf den Inhalt zugreifen. Was also spricht gegen StringSplit als einfachste Variante?
-
- Warum erstellst du das Array Global?
Die Zugriffe erfolgen ausschließlich über die Funktion, somit wäre es sinnvoll das Array als Local Static zu erstellen. Allerdings hast du dann keine dynamische Größenveränderung des "Mutter-Arrays" mehr, da statisch erstellte Arrays in der Dimension nicht verändert werden können. Aber die Anzahl Container auf vorab 128 (oder ähnlich) festzulegen sollte eigentlich ausreichen. Die enthaltenen Element-Array sind ja weiterhin dynamisch.
- Beim Hinzufügen eines Elementes ist nicht ersichtlich, welchen Index es im internen Array erhält (Return True). Insofern kann man nicht wieder auf das Element zugreifen. Hier solltest du den Array-Index zurückgeben.
- "Container Löschen" ist etwas missverständlich, denn er existiert ja weiter als 1-Element-Array. Unter Löschen würde ich das kpl. Entfernen verstehen. - Besser wäre "Löschen aller Inhalte des Containers"Alternativ könntest du den Zugriff noch variabel gestalten, indem du als Index auch zusätzlich einen String zuläßt. Intern in einem Dictionary (wiederum Local Static) verweist du dann mit "String=Index" auf den Array Index.
Da hier Array-In-Array verwendet wird, was leider keinen direkten Zugriff erlaubt, sondern immer das extrahieren des internen Arrays erfordert, wäre vielleicht auch interessant, dieselbe Funktion über ein Array mit ArrayList-Elementen zu realisieren.
Ich habe das mal testweise erstellt. Es sind noch nicht alle Fehlerabfragen enthalten, aber zur Funktionsdemonstration reicht es:Spoiler anzeigen
[autoit]$C1 = _Container()
[/autoit] [autoit][/autoit] [autoit]
$C2 = _Container()
ConsoleWrite('Anzahl Container: ' & _Container(0, -1, Default, 3) & @LF)$index1_1 = _Container($C1, -1, 'Neuer Wert1')
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("'" & _Container($C1, $index1_1) & "' in $C1 an Index=" & $index1_1 & " angefügt" & @LF)$index1_2 = _Container($C1, -1, 'Neuer Wert2')
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("'" & _Container($C1, $index1_2) & "' in $C1 an Index=" & $index1_2 & " angefügt" & @LF)ConsoleWrite('Anzahl Werte in $C1: ' & _Container($C1, -1, Default, 3) & @LF)
[/autoit] [autoit][/autoit] [autoit]_Container($C1, $index1_2, 'Geänderter Wert2')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('Wert nach Änderung: ''' & _Container($C1, $index1_2) & "'" & @LF)$index2_1 = _Container($C2, -1, 'Neuer Wert1')
[/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("'" & _Container($C2, $index2_1) & "' in $C2 an Index=" & $index2_1 & " angefügt" & @LF)$index2_2 = _Container($C2, -1, 'Neuer Wert2')
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite("'" & _Container($C2, $index2_2) & "' in $C2 an Index=" & $index2_2 & " angefügt" & @LF)Func _Container($indexContainer=0, $indexValue=-1, $Value=Default, $iFlag=0) ; $iFlag: 1=Delete Item/Delete Container, 2=Delete All Item/Container, 3=Count Item in Container/Count Container
[/autoit] [autoit][/autoit] [autoit]
Local Static $aContainer[256] = [0] ; Statische Variablen können nicht mit ReDim verändert werden! Deshalb vordefinieren
Local Static $indexLast = 0Select
[/autoit] [autoit][/autoit] [autoit]
Case $indexContainer = 0 And $iFlag = 0 ; neuer Container
$aContainer[0] += 1
$indexLast += 1
$aContainer[$indexLast] = _ObjAListCreate() ; ArrayList als Element erstellen
Return $indexLast ; Rückgabe Index ContainerCase $indexContainer > 0 And $indexValue = -1 And $iFlag = 1 ; Delete Container
[/autoit] [autoit][/autoit] [autoit]
$aContainer[$indexContainer] = 0 ; dadurch ändert sich Index der verbleibenden Container nicht
$aContainer[0] -= 1Case $indexContainer > 0 And $indexValue = -1 And $iFlag = 2 ; Delete All Container
[/autoit] [autoit][/autoit] [autoit]
$aContainer[0] = 0
For $i = 1 To UBound($aContainer) -1
$aContainer[$i] = 0
NextCase $indexContainer = 0 And $indexValue = -1 And $iFlag = 3 ; Count Container
[/autoit] [autoit][/autoit] [autoit]
Return $aContainer[0]Case $indexContainer > 0 And $iFlag = 3 ; Count Item in Container
[/autoit] [autoit][/autoit] [autoit]
Return $aContainer[$indexContainer].CountCase IsKeyword($Value) And $iFlag = 0 ; Get Value
[/autoit] [autoit][/autoit] [autoit]
Return _ObjAListGetItem($aContainer[$indexContainer], $IndexValue)Case IsKeyword($Value) And $iFlag = 1 ; Delete Value
[/autoit] [autoit][/autoit] [autoit]
_ObjAListDelByIndex($aContainer[$indexContainer], $IndexValue)Case IsKeyword($Value) And $iFlag = 2 ; Delete All Value
[/autoit] [autoit][/autoit] [autoit]
_ObjAListClear($aContainer[$indexContainer])Case Not IsKeyword($Value) And $indexValue = -1 ; Add Item
[/autoit] [autoit][/autoit] [autoit]
Return _ObjAListAdd($aContainer[$indexContainer], $Value) ; Rückgabe Index aus ArrayListCase Not IsKeyword($Value) And $indexValue > -1 ; Set Value
[/autoit] [autoit][/autoit] [autoit]
_ObjAListSetItem($aContainer[$indexContainer], $indexValue, $Value)EndSelect
[/autoit] [autoit][/autoit] [autoit]EndFunc
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit];==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name: _ObjAListCreate()
; Return: Erfolg: Handle des Arraylist-Objektes
; Fehler: -1
; Fehlerwert: 1 Objekt konnte nicht erzeugt werden
;==================================================================================================
Func _ObjAListCreate()
Local $obj = ObjCreate("System.Collections.ArrayList")
If (Not IsObj($obj)) Then
Return SetError(1, 0, -1)
Else
Return $obj
EndIf
EndFunc ;==>_ObjAListCreate;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name: _ObjAListAdd($ObjList, $Value)
; Parameter: $ObjList - Handle des Arraylist-Objektes
; $Value - Wert
; Return: Erfolg: Index des angefügten Item
; Fehler: -1
; Fehlerwert: 1 Objekt existiert nicht
; 2 Wert ohne Inhalt übergeben
; 3 Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListAdd(ByRef $ObjList, $VALUE = '')
If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
If $VALUE = '' Then Return SetError(2, 0, -1)
$ObjList.Add($VALUE)
If @error Then Return SetError(3, 0, -1)
Return $ObjList.Count - 1
EndFunc ;==>_ObjAListAdd;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name: _ObjAListGetItem($ObjList, $Index)
; Parameter: $ObjList - Handle des Arraylist-Objektes
; $Index - Index des zurückzugebenden Wertes
; Return: Erfolg: 0
; Fehler: -1
; Fehlerwert: 1 Objekt existiert nicht
; 4 Index außerhalb Bereich
;==================================================================================================
Func _ObjAListGetItem(ByRef $ObjList, $Index)
If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
If ($Index = -1) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
Return $ObjList.Item($Index)
EndFunc ;==>_ObjAListGetItem;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name: _ObjAListSetItem($ObjList, $Index, $Value)
; Parameter: $ObjList - Handle des Arraylist-Objektes
; $Index - Index des zurückzugebenden Wertes
; $Value - Neuer Wert des Item
; Return: Erfolg: 0
; Fehler: -1
; Fehlerwert: 1 Objekt existiert nicht
; 4 Index außerhalb Bereich
;==================================================================================================
Func _ObjAListSetItem(ByRef $ObjList, $Index, $Value)
If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
If ($Index = -1) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
$ObjList.Item($Index) = $Value
Return 0
EndFunc ;==>_ObjAListGetItem;==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name: _ObjAListDelByIndex($ObjList, $Index)
; Parameter: $ObjList - Handle des Arraylist-Objektes
; $Index - Index des zu löschenden Wertes
; Return: Erfolg: 0
; Fehler: -1
; Fehlerwert: 1 Objekt existiert nicht
; 3 Aktion fehlgeschlagen
; 4 Index außerhalb Bereich
;==================================================================================================
Func _ObjAListDelByIndex(ByRef $ObjList, $Index = -1)
If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
If ($Index = -1) Or ($Index > $ObjList.Count - 1) Then Return SetError(4, 0, -1)
$ObjList.RemoveAt($Index)
If @error Then Return SetError(3, 0, -1)
Return 0
EndFunc ;==>_ObjAListDelByIndex;==================================================================================================
[/autoit]
; Name: _ObjAListClear($ObjList)
; Parameter: $ObjList - Handle des Arraylist-Objektes
; Return: Erfolg: 0
; Fehler: -1
; Fehlerwert: 1 Objekt existiert nicht
; 3 Aktion fehlgeschlagen
;==================================================================================================
Func _ObjAListClear(ByRef $ObjList)
If (Not IsObj($ObjList)) Then Return SetError(1, 0, -1)
$ObjList.Clear
If @error Then Return SetError(3, 0, -1)
Return 0
EndFunc ;==>_ObjAListClearEdit:
Es ist zwar praktisch, wenn man nur eine Funktion aufrufen muß und über die Parameter(-kombination) dann unterschiedliche Funktionen ausgeführt werden - aber so richtig übersichtlich ist es nicht.
Was spricht dagegen, die Aufrufe für die Einzelaktionen in extra Funktionen auszulagern ( Contaier_New, Container_SetVal, Container_GetVal, .... )? Das erleichtert die Lesbarkeit des Skripts ungemein.
Alternativ wäre auch möglich eine Funktion zu verwenden mit einem Cmd-String als Parameter " Func Container($sCmd, $param1, $param2,...) " und als $sCmd= "new", "addVal", "getVal", "setVal" usw.
-
Kann dein Skript nicht testen, aber was ich sehe:
- Du nutzt die Funktion _GUICtrlTreeView_SelectItem mit einem String? ($sTVItem), es wird aber das Handle des zu selektierenden Item erwartet.
- Du verwendest die Ctrl-ID, nach meiner Erfahrung ist auch beim Treeview das Handle angebrachter.
- Und nur als Tipp: probiere als 3.ten Parameter $TVGN_CARET, mir gefällt es besser
-
@Mod/Admin: bitte wegen mangenlder Selbstbeteiligung schliessen
Kann ich zwar nachvollziehen, aber das geht dann doch etwas über unsere eigenen Regeln hinaus.@TE:
Wenn du im Internet durch Rumgeklicke Geld verdienen möchtest, ist das deine Sache.
Wenn das rechtlich zulässig ist, interessiert es mich auch nicht weiter.
Aber:
Ich sehe keinen Grund, dass wir dir dabei helfen Geld zu verdienen. Wir sind nicht die Wohlfahrt und unser Einsatz hier im Forum ist für umme.
Und solange du kein Skript lieferst an dem du ein Problem hast, ist dieses hier tatsächlich der falsche Platz für deine Frage.Es liegt nun an dir, ob und wie es weiter geht. Die entsprechenden Entscheidungswege wurden dir hier aufgezeigt.
-
Also bei mir geht das bzw die verlinkten beispiele von dir nicht Andy,
Wir danken für die äußerst präzise Problemdarstellung und empfehlen den Kauf einer Kristallkugel.

-
Darüber bin ich auch schon gestolpert, sowie du von der reinen GUI-Fläche auf ein Control wechselst bekommst du keine Infos mehr von WM_MOUSEMOVE.
Im Moment habe ich keine Idee, wie man das elegant lösen kann. -
Evtl. Aufrufkonvention beachten? ('cdecl' statt Standard 'stdcall')
-
Es ist als grenzwertig zu betrachten und ermöglicht einen Verstoß gegen die AGB des Betreibers.
Insofern: CLOSED