Beiträge von BugFix
-
-
Die Funktion hat noch nie und konnte auch gar keinen Hex Wert zurückgeben.
Ein Hexwert wird bei der Rückgabe automatisch wieder zum Dezimalwert.
Nur Handle werden tatsächlich in Hexform zurückgegeben.
-
die neue SciTE-Version installiert (3.3.14.5)
Das ist nicht die SciTE-Version, sondern die von AutoIt. Den Rest deiner Fragestellung kann ich nicht nachvollziehen.
-
Bsp.:
AutoIt
Alles anzeigenOpt("GUIOnEventMode", 1) Global $hGui = GUICreate('Test') GUISetOnEvent(-3, '_End') Global $IDTab = GUICtrlCreateTab(10, 10, 300, 150) GUICtrlSetOnEvent(-1, '_TabEvent') Global $TabItem1 = GUICtrlCreateTabItem('Item 1') Global $TabItem2 = GUICtrlCreateTabItem('Item 2') GUICtrlCreateTabItem("") GUISetState() While True Sleep(50) WEnd Func _End() Exit EndFunc Func _TabEvent() Local $TabItemIndex = GUICtrlRead(@GUI_CtrlId) Switch $TabItemIndex Case 0 MsgBox(0, 'TabEvent', 'Item 1') Case 1 MsgBox(0, 'TabEvent', 'Item 2') EndSwitch EndFunc -
Schau dir doch mal genau das Hilfebsp. an. Du musst auf die Tab-ID reagieren und dann kannst du die ID des verantwortlichen Tab-Item abfragen.
-
Es steht dir völlig frei, den "Laden" wieder zu verlassen.
Aber vielleicht solltest du mal darüber nachdenken, warum wir bestimmte Dinge hinterfragen. Ich finde es ziemlich dreist, wenn du um Hilfe bittest und unsere Nachfragen/Hinweise dann als Zumutung empfindest. Unsere Nachfragen resultieren aus unseren Erfahrungen und dem Wissen, dass es vielen Usern schwer fällt, ihre Probleme mit allen erforderlichen Informationen darzustellen.
Dein Vergleich von unserem Forum mit einem Baumarkt hinkt nicht nur, sondern ist so ziemlich der größte geistige Dünschiss, der mir seit längerem unter gekommen ist. - Wir wollen nichts verkaufen. Wir tauschen uns aus, teilen unser Wissen. Und dazu bedarf es gewisser Informationen. Wenn du diese nicht zu geben gewillt bist - so what! Jeder ist seines Glückes Schmied.
-
Das befeuert natürlich auch wieder die Diskussion zur Sinnhaftigkeit von AV-Programmen. Man installiert es für den Fall, der in der Wahrscheinlichkeit eines Sechsers im Lotto auftritt. Die letzten 10 Jahre habe ich keinerlei (gültige) Funde gehabt. Was bringt es also, wenn man Brain.exe aktiviert hat?
-
Freut mich, wenn meine Tuts dir helfen konnten. Unterrichtet habe ich auch schon mal, macht auch Spaß. Aber mit knapp 60 möchte ich den Beruf nicht mehr wechseln.

Mir ist jetzt wieder eingefallen, womit ich das damals gelöst habe: Der File-Explorer von Windows 95!!
Alles, was danach kam wurde eigentlich nur verschlimmbessert.

-
Hatte mal ein ähnliches Problem. Da es auf einem 32-Bit System war konnte ich eine Datei aus Windows 2000 zum Setzen der Rechte verwenden. Es liessen sich ausnahmslos alle Rechte setzen/löschen. Allerdings ist das so lange her, dass ich gerade den Namen nicht parat habe. Ich werde mal suchen, ob ich es noch finde.
-
Habe es mit ControlClick probiert bekomme es mit dem Wininfo nicht hin.
AutoIt
Alles anzeigen#cs >>>> Window <<<< Title: Winitas Class: OMain >>>> Control <<<< Class: NetUIHWND Instance: 1 ClassnameNN: NetUIHWND1 Advanced (Class): [CLASS:NetUIHWND; INSTANCE:1] #ce ; Handle abfragen mit Titel Global $hWnd = WinGetHandle('Winitas') ; oder Klasse Global $hWnd = WinGetHandle('[CLASS:OMain]') ; Controlclick ControlClick($hWnd, '', '[CLASS:NetUIHWND; INSTANCE:1]') -
Ich habe vor etlichen Jahren mal getestet, wie sich GUI und Controls in VBA erstellen und anwenden lassen. Mein Fazit war: Wenn viel in Excel abzuarbeiten ist, sollte man die Grafik auch gleich in VBA machen. Die Objekte lassen sich leicht erstellen, sind über ihre Properties gut zu händeln und bieten optische Features, die man in AutoIt nicht (oder nicht ohne Weiteres) realisieren kann - z.B. lassen sich hinter alle Control auch Grafiken legen.
Der Objektkatalog im VBA-Editor (Alt+F11) listet dir alle verfügbaren Methoden, Properties und Konstanten auf. Im Editor kann man sich super mit den Objekten vertraut machen und mal mit spielen.
Leider kann ich mein Bsp. nicht mehr auffinden, ist bei einem Forenupdate mit vielen anderen Konversationen verloren gegangen.
-
Was (BugFix #23) geschrieben hat kann nicht funktionieren.
Du machst also alles mit AutoIt ausser dem Makro? Führe das (also den Inhalt!) doch auch mit AutoIt aus. dann läuft alles in einer Ebene und du hast keine Probleme. Der VBA-Code des Makros kann völlig problemlos in AutoIt-Code übersetzt werden. Womit wir wieder beim Stichwort Excel-UDF sind.

EDIT:
Wenn du natürlich extrem umfangreiche xlsm erstellt hast, kann das etwas aufwändig sein. Ich würde es aber bevorzugen, weil man dann unabhängig von den xlsm wird.
-
Wenn AutoIt Excel startet, solltest du das Beenden auch von AutoIt erledigen lassen (logische Konsistenz). Wenn da das Makro zwischenfunkt, führt das nur zu Fehlern.
-
Einige dieser Diagramme sind Temperatur/Zeit-Kurvendiagramme die in PDF gespeichert vor mir liegen. Um diese Kurven auszulesen dachte ich mir: ich setze die PDF als Hintergrund einer GUI, einen Slider unter diese PDF, richte ihn an Kurvenanfang u –ende aus und den Sliderwert nutz ich zur Verhältnisgleichung um die Uhrzeit zu berechnen und in Excel zu speichern
Da verstehe ich nur Bahnhof. Das funktioniert doch nur bei einer linearen Funktion, niemals bei einer Kurve. Und wie "richtest du aus"? Slider per Maus ziehen und dann Position Speichern?
Du solltest ein Skript bereit stellen, das auf das reine Problem reduziert und lauffähig ist. Da du hier spezifische Dateien verwendest kann das Skript von uns so nicht getestet werden.
-
Wenn du ein IE-Objekt erstellst, wird natürlich der Internet Explorer gestartet.
Firefox-Automatisierung ist derzeit fast unmöglich. Such mal nach "WebDriver", damit kann man arbeiten. Ist aber alles andere als trivial.
-
Ich finde die Erstellung aller Fenster am Programmstart und dann mit SHOW und HIDE irgendwie nicht sehr elegand?
Glaub mir, es ist die eleganteste Variante überhaupt. Denn elegant hat auch was mit Effizienz zu tun. Abgesehen davon, dass du mit deiner Variante dein Skript früher oder später crashst, musst du alle anzuzeigenden Elemente ständig neu erstellen. Das frisst Zeit und Speicher - wie kann das elegant sein?
-
Ich habe mal noch eine universale Lösung für das Speichern von 1D oder 2D Array in einem 1D-Array:
AutoIt
Alles anzeigenLocal $aIntern1[] = [1,2,3] Local $aIntern2[] = [4,5,6] Local $aExtern1[] = [$aIntern1,$aIntern2] Local $aIntern3[][] = [[1,2,3],[4,5,6]] Local $aIntern4[][] = [[11,12,13],[14,15,16]] Local $aExtern2[] = [$aIntern3,$aIntern4] ; abfragen Index1 in Array Intern2 (5) ConsoleWrite(_SubArrayValue($aExtern1, 1, 1) & @CRLF) ; Wert ändern Index1 in Array Intern2 _SubArrayValue($aExtern1, 1, 1, 555) ConsoleWrite(_SubArrayValue($aExtern1, 1, 1) & @CRLF) ; abfragen in Array Intern4 [1][2] (16) ConsoleWrite(_SubArrayValue($aExtern2, 1, '1,2') & @CRLF) ; Wert ändern in Array Intern4 [1][2] _SubArrayValue($aExtern2, 1, '1,2', 666) ConsoleWrite(_SubArrayValue($aExtern2, 1, '1,2') & @CRLF) ; wenn interne Array 1D sind: IndexValue als Ziffer, bei 2D als String: 'IndexDim1,IndexDim2' Func _SubArrayValue(ByRef $_aParent, $_IndexArray, $_IndexValue, $_Value=Null) Local $IndexD1 = $_IndexValue, $IndexD2 = Null, $aSub = $_aParent[$_IndexArray] If IsString($_IndexValue) Then ; internes Array ist 2D Local $aD = StringSplit($_IndexValue, ',', 2) If UBound($aD) <> 2 Then Return SetError(1,0,0) $IndexD1 = $aD[0] $IndexD2 = $aD[1] EndIf If $_Value = Null Then If $IndexD2 = Null Then Return $aSub[$IndexD1] Else Return $aSub[$IndexD1][$IndexD2] EndIf Else If $IndexD2 = Null Then $aSub[$IndexD1] = $_Value Else $aSub[$IndexD1][$IndexD2] = $_Value EndIf $_aParent[$_IndexArray] = $aSub EndIf EndFuncEDIT:
-
Die beste Übersicht wirst du behalten, wenn du für den Zugriff auf innere Arrays eine Funktion erstellst. Hier mal ein Bsp. für 1D-Array:
AutoIt
Alles anzeigenLocal $aIntern1[] = [1,2,3] Local $aIntern2[] = [4,5,6] Local $aExtern[] = [$aIntern1,$aIntern2] ; abfragen Index1 in Array Intern2 (5) ConsoleWrite(_SubArrayValue($aExtern, 1, 1) & @CRLF) ; Wert ändern Index1 in Array Intern2 _SubArrayValue($aExtern, 1, 1, 555) ConsoleWrite(_SubArrayValue($aExtern, 1, 1) & @CRLF) Func _SubArrayValue(ByRef $_aParent, $_IndexArray, $_IndexValue, $_Value=Null) Local $aSub = $_aParent[$_IndexArray] If $_Value = Null Then Return $aSub[$_IndexValue] Else $aSub[$_IndexValue] = $_Value $_aParent[$_IndexArray] = $aSub EndIf EndFunc -
und bevor jetzt irgendjemand schreibt das ich erstmal googeln soll ich kämpfe mit dem Problem seid 2 Monaten ohne erfolg.
Schreib die gewünschten Dinge (Treeview Explorer) einfach in die Forumssuchfunktion - schon hast du unter vielen anderen Lösungen auch das: Treeview FileExplorer
-
Ein schreibender Zugriff über gekapselte Indizes ist nicht möglich. Wenn du ein Array im Array speicherst, musst du es zum Modifizieren separat behandeln. Ob du das mit einem temporären Array löst oder eine ByRef Lösung bevorzugst, bleibt dir überlassen.
Ich finde es meist übersichtlicher, das Array in eine temporäre Variable auszulagern und nach Änderung zurück zu schreiben.