Beiträge von BugFix
-
-
Im Label gar nicht. Unterschiedliche Formatierung innerhalb eines Controls kannst du im RichEdit Control vornehmen. Näheres findest du in der Hilfe.
-
Das funktioniert doch nur mit Programmen welche auch explizit und bewusst ein COM-Objekt zur Verfügung stellen.
Das ist schon klar, aber für genau diese kann man das so lösen. Für den Rest braucht es dann etwas mehr Arbeit.
-
Ich habe doch schon gesagt, wie es einfach geht. Einfach den Pfad auslesen über das Objekt:
[autoit]$oExcel = ObjGet("","Excel.Application") ; Referenz auf die offene Excelanwendung
[/autoit]
$oBook = $oExcel.ActiveWorkbook() ; das aktive Workbook ermitteln
ConsoleWrite('Pfad des aktuellen Workbooks: ' & $oBook.Path() & '\' & $oBook.Name() & @CRLF)
Analaog gilt das auch für Word und Access. Welche Methoden/Eigenschaften verwendet werden, verrät uns Tante Google (Suchbegriff: Anwendung Objekt Methoden)
Damit es multiprogrammfähig ist, brauchst du doch nur versuchen Referenzen auf die unterschiedlichen Objekte zu erhalten. Klappt es nicht, ist auch die Anwendung nicht offen. Kannst du dann einfach per Switch durchwandern.
Edit:
Ich hab mal schnell solche Funktion erstellt, kannst du ja noch erweitern. Infos zu den Objekten findest du hier.
Spoiler anzeigen
[autoit]ConsoleWrite(_GetPathFromApp('Powerpoint') & @CRLF)
[/autoit] [autoit][/autoit] [autoit]Func _GetPathFromApp($_sApp)
[/autoit]
Local $o
Switch $_sApp
Case 'Word'
$o = ObjGet("","Word.Application")
If Not IsObj($o) Then Return ''
Return $o.ActiveDocument.Path() & '\' & $o.ActiveDocument.Name()
Case 'Excel'
$o = ObjGet("","Excel.Application")
If Not IsObj($o) Then Return ''
Return $o.ActiveWorkbook.Path() & '\' & $o.ActiveWorkbook.Name()
Case 'Access'
$o = ObjGet("","Access.Application")
If Not IsObj($o) Then Return ''
Return $o.CurrentProject.FullName() ; kann ich mangels Access nicht testen
Case 'Powerpoint'
$o = ObjGet("","Powerpoint.Application")
If Not IsObj($o) Then Return ''
Return $o.ActivePresentation.FullName()
EndSwitch
EndFunc -
Hmm, ich merke schon, da habe ich wohl einiges verschlimmbessert. :wacko:
Naja, das nächste WE kommt bestimmt, dass ich mich nochmal intensiv reinknien kann. -
Nimm doch lieber gleich StringReplace.
Ansonsten reicht ein Blick in die Hilfe, sehr ausgiebig erklärt. -
Für Word und Excel kannst du dir mit den UDF direkt die Liste der Fenster geben lassen inklusive Pfade der geöffneten Dateien.
-
Wenn deine Anfrage damit erledigt ist, setze bitte in deinem Startpost das Präfix auf "gelöst".
-
So Tweaky, nun sollte das auch passen.
Aber wenn du mehr entdeckst - immer her damit. -
Oh, wie peinlich, ein Array-Fehler.

OK, das ist behoben. Aber da läuft nochwas nicht ganz rund. Wenn keine Includes vorhanden sind, arbeitet das Skript, soweit ich das sehe, fehlerfrei. Aber bei bereits vorhandenen Includes paßt es nicht immer.
Aber ich hoffe, das werde ich noch alles beheben.
Eure Unterstützung beim Fehler finden hilft da sehr.
-
Ahh, Danke. Die Fehlermeldung war wichtig, damit kann ich was anfangen.
Bist ein guter Tester
Gleich mal schauen, wie das entstehen kann. -
Allerdings wird die "ManageIncludes.lua" nicht überschrieben wenn sie bereits existiert.
Da hatte ich das Überschreib-Flag vergessen - gefixed.
Wäre es nicht sinnvoller die Datei die in "...\AppData\Roaming" geschrieben werden in ein Unterordner zu packen, damit man die Dateien später besser zuordnen kann?
Ich lasse den FileSelectFolder-Dialog mit dem Button "Neuer Ordner" anzeigen, damit das jeder nach eigenem Geschmack handhaben kann. Natürlich ist ein Unterordner sinnvoll. Ich mag es immer lieber, wenn ich dann selbst festlegen kann wie was heißt.

Die Includes werden immer in die 3. Zeile geschrieben auch wenn in der ersten Zeile Code steht. Ist dies so gewollt?
Ist jetzt auch gefixed.
Wenn ich die Tastenkombination erneut drücke verschwinden die Zeilen mit dem include wieder.
Ich poste es nur noch einmal, da ich nicht weiß ob du schon versucht hast ihn zu behebenDiesen Fehler konnte ich noch nicht nachbilden.
Beschreib mal genau:
Passiert das bei allen Skripten? Welches OS hast du?
Bei mir, Win7 Pro 64 passiert das nicht. -
Sorry BugFix, aber bei mir ist keine Datei "Install_ManageIncludes.au3", sondern nur
Hatte ich vergessen mit zu packen, jetzt ist es vorhanden. -
Neue (aber noch nicht optimale) Version erstellt.
- mit Installer auch für Update -
Danke progandy
Nun kann man auch etwas anspruchsvollere Lua-Bibliotheken im Standard-SciTE nutzen. Ich hatte bisher in der lua.properties auf meine externe Lua-Installation verlinkt, was aber nur auf meinem Rechner sinnvoll ist.
Na dann schaun wir mal, was sich da noch für interessante Symbiosen ergeben. -
Hi, du solltest bei der Include-Suche noch die Reihenfolge der Suchpfade beachten
Bei Anführungszeichen wird zuerst im Skriptverzeichnis, dann in den User-Verzeichnissen und zueltzt im Includeverzeichnis gesucht, bei Klammern umgekehrt.Ja, das ist das, was ich mit der Pfadvielfalt meinte. Da bin ich noch am Suchen, wie ich das am elegantesten einbaue.
PS: Brauchst du eine FileGetTime-Funktion für LUA? Ich hätte eine mit alien und Windows-API
Ich habe auch einige Bibliotheken, die ich per Alien nutzen könnte - aber ich habe es noch nicht geschafft Alien mit dem Lua zu nutzen, dass im SciTE integriert ist. Bei mir klappt dass nur, wenn ich auf meine externe Lua-Installation verweise. Insofern für allgemeine Verwendung wenig nützlich.
PPS: Kannst du MILua nicht nach @AppData schreiben? Ins SciTE-Verzeichnis ist bei Windows-7 nicht so prickelnd.
Macht bei mir keine Probleme. Aber wenn das z.Teil Probleme bereitet, soll es daran nicht scheitern.
Ich erstelle gerade das Installationsskript, inkl. rudimentärem HotKey-Generator. Werde ich hoffentlich noch heute Nacht fertig bekommen.

Aber die Anpassungen mit den Pfaden werden noch etwas dauern. -
Ein Installer würde das Procedere wesentlich vereinfachen....
OK, werde ich noch erstellen.Tweaky:
Habe jetzt auch die Ursache für die von dir ermittelten Fehler gefunden und beseitigt. Ich probiere mal noch die Pfadgeschichte hinzubekommen und aktualisiere dann (mit Installer). -
Wenn ich die Tastenkombination erneut drücke verschwinden die Zeilen mit dem include wieder. Ist dies so gewollt

Konnte ich noch nicht reproduzieren.
dass man bei Änderung der includes die Datei löschen soll, damit diese neu angelegt werden kann. Geht dies nicht automatisch?
Da muss ich mal testen, wie der Zeitaufwand ist. Vermutlich erheblich, insofern eine nicht sehr optimale Variante.
in welchen Ordner die Datei liegen die geändert werden müssen.
Die Dateien liegen alle im Ordner: "..SciTE\Lua\MILua\"
Die Bsp. werde ich mal testen, Danke schon mal fürs Probieren.
-
Bug gefixed.
Aktuelle Version: v0.13 -
Hi,
ich hatte ja schon mein 'Osterei' für euch angekündigt:
hier nun mein erstes größeres Projekt mit Lua: ManageIncludesSicher kennt ihr OrganizeIncludes von Xenobiologist. Damit lassen sich die Includes für das aktuelle Skript in SciTE ermitteln und einfügen.
Das tut auch mein Lua-Skript. Mit einem wesentlichen Unterschied:
Lua ist deutlich schneller als AutoIt. Selbst für ein 20.000 Zeilen-Skript habe ich unter einer Sekunde beim Testen benötigt.
Weiterhin ermittele ich die rekursiv eingebundenen Includes (Includes aus den Includes aus den Includes...), was zu einer Reduzierung der Includes im Skript führt.
Beim erstmaligen Start des Skripts werden Dateien erstellt mit Zusammenstellung von Funktionen und Konstanten der existierenden Includes (Prod, sofern installiert Beta, wenn in den properties angegeben: User-Includes). Das dauert etwas länger, je nach Rechner bis zu 6..8 Sekunden.Die Dateien liegen alle im Ordner: "..SciTE\Lua\MILua\". Ab jetzt könnt ihr beim Installen/Updaten das Verzeichnis selbst wählen. Vorgabe bei Auswahl ist @AppData.
Wenn ihr Veränderungen bei Prod/Beta/User-Includes habt, einfach die Dateien in diesem Ordner löschen. Beim nächsten Skriptaufruf wird, wie beim ersten mal, alles neu erstellt. Ein Auto-Updater ist in Arbeit.
Eine genaue Beschreibung des Skriptes findet ihr auch im Skriptheader.
Nebenbei bekommt ihr noch in die Konsole ausgegeben:
- alle deklarierten Funktionen
- verwendete Konstanten und Funktionen mit zugehörigem Include
- Includes im Skript
- Erforderliche Includes für das Skript
- Includes, die per Rekursion eingebunden sind
- Nicht benötigte Includes
- Fehlende IncludesDie Includes werden nach folgender Priorität eingefügt (ist ein Punkt nicht zutreffend greift der nächste):
1. Eintrag an Position nach String der in den properties hinterlegt ist (s. Installations-Info)
2. Eintrag an der Position des ersten gefundenen Includes
3. Eintrag nach letzter Kompilerdirektive (#AutoIt3Wrapper..)
4. Eintrag am SkriptanfangWichtig: Schreibt bitte keine Includes in Zeile 1!gefixed
----------------------------------------------------------------------------------------------------------------------------------
-- Installation oder Update
--
-- "ManageIncludes.lua" und "shell.dll" zusammen mit Installationsskript "Install_ManageIncludes.au3" in einen Ordner packen
-- "Install_ManageIncludes.au3" ausführen
-- Bereits vorhandene Installationsdaten werden übernommen und können konfiguriert werden
-- Keinerlei Einträge von Hand erforderlich
----------------------------------------------------------------------------------------------------------------------------------Ich habe das Skript mehrfach um- und ausgebaut (was ihr auch an der hohen Versionsnr. seht). Da kann sich durchaus auch mal ein Fehler eingeschlichen haben.
Sollte das Skript also mal mit einem Fehler abbrechen, bitte mir die Fehlermeldung posten. Eigentlich sollte maximal ein nicht abgefangener 'nil'-Wert so etwas verursachen.
Also testet fleißig und gebt mir Rückmeldung.Das Skript poste ich dieses mal nicht (> 800 Zeilen). Es ist zusammen mit der shell.dll im Anhang.
Edit 09.04.2012
Da hatte sich noch ein Kopierfehler eingeschlichen für den propertie-Eintrag der Stringdefinition (s. Durchgestrichenes in Installationsanleitung).Edit 09.04.2012 #2
- Habe noch einen Bug entdeckt, wenn kein Include im Skript - gefixt.
- Etwas Codekosmetik durchgeführt.
Das Pfadproblem ist etwas tricky und wird noch dauern.
Aktuelle Version: v0.13Edit 10.04.2012
Das Skript ist noch nicht optimal, ein paar Fehler habe ich beseitigt.
Neu: Installationsprogramm, auch um bereits vorhandene Version upzudaten. Bereits verwendete Einstellungen werden erkannt und übernommen.
Install_MI.zip enthält den Ordner mit Install_ManageIncludes.au3, ManageIncludes[v0.14].lua und shell.dll
Einfach die .au3 aus dem Ordner heraus ausführen, sowohl bei Erstinstallation, als auch bei Update.
Aktuelle Version: v0.14
Grr, jetzt hatte ich vergessen das Installationsskript mit zu packen. :wacko:Jetzt separat im AnhangNun mit verpackt.
Im Installer war noch ein kleiner Fehler beim Lesen des Include-Types. Aber jetzt paßt es.Noch mal aktualisiert
- Installer hatte alte ManageInclude.lua nicht überschrieben
- jetzt werden Includes (wenn keine andere Eigenschaften festgelegt sind) in die erste Zeile geschriebenUnd ein weiteres Fehlerchen gefixed.
Aktuelle Version: v0.16Und noch eine Korrektur.
Aktuelle Version: v0.17==== ToDo ====
Da ich die Include-angaben immer streng trenne (aus Prod-/Beta-/Userverzeichnis eingefaßt in < >, andere Includes mit absolutem Pfad in Quotierung), hatte ich bisher nicht berücksichtigt, dass z.B. Pfade im aktuellen Skriptordner nur mit Angabe des Dateinamens möglich sind. Ebenso ist die Verwendung von Quotierung oder < > variabler als mir lieb ist.
Diese Fälle werden also im Moment noch nicht berücksichtigt, hierfür werde ich noch eine Pfadauflösung implementieren.
==============DL bisher: 30