1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 28. November 2021 um 20:22

    Kannst Du so machen. :)

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 28. November 2021 um 17:26
    Zitat von water

    bzw. "identifier".

    :thumbup:

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 28. November 2021 um 13:48
    Zitat von water

    Es war ein klassischer Copy&Paste Fehler.

    Davor ist niemand gefeit. :rofl:

    Zumindest führt sowas zum tieferen Verständnis, ist ja auch was wert. Die Stunde also nicht wirklich verschenkt. :thumbup:

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 28. November 2021 um 10:14
    Zitat von water

    Für die engl. Übersetzung der Installationsanleitung brauche ich noch etwas.

    Hehe, die deutsche Version in DeepL kopieren und das Ergebnis minimal anpassen (die Übersetzung dort ist sowohl inhaltlich als auch grammatikalisch fast perfekt). Auf jeden Fall spart es die Arbeit sich selbst durch die korrekte SPO Struktur zu kämpfen. ^^

    Zitat von water

    Sollen wir in diesem Thema/Thread weitermachen oder ein neues Thema (wäre eher für diese Variante)?

    Neues Thema ist sinnvoll. Das hier war Entwicklung - Auslieferung ist ein anderer Schuh. :)

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 28. November 2021 um 09:17

    Eines noch:

    Da nicht jeder mit der Funktionsweise von Property Dateien vertraut ist, halte ich es für sinnvoll zu erwähnen, dass mit dem Eintrag ("command.help.$(au3)=") der Standardhilfeeintrag überschrieben wird.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 27. November 2021 um 22:26
    Zitat von Musashi

    Advanced.help

    Klangmäßig recht angenehm. ;)

  • Photoshop beginner!?

    • BugFix
    • 27. November 2021 um 19:54

    Auch wenn du im Off Topic Bereich postest, wäre eine Anfrage in einem PS Forum wohl zielführender.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 27. November 2021 um 19:52
    Zitat von water Zeile 19

    Kopien Sie

    Kleiner Typo: Kopieren Sie ;)

    Aber sonst passt alles.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 27. November 2021 um 15:31
    Zitat von water

    Kann ich irgendwas für Dich testen?

    Nein, passt schon. ;)

    Im Skript hole ich mir ja über die PID der gestarteten hh.exe das zugehörige Fensterhandle und setze damit (bzw dem Fenster Titel - Verhalten ist identisch) das Fenster auf maximiert. Egal in welcher Reihenfolge (Ol dann AD oder umgekehrt) - AD wird maximiert, OL nicht.

    Aber daran hänge ich nicht meine Seligkeit. Wenn es bei euch funktioniert ist das prima.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 26. November 2021 um 14:08
    Zitat von water

    Zu 1) Das können wir derzeit so lassen. Man ändert ja nicht laufend den Speicherort seiner UDFs. Derzeit läuft es ja und mehr fällt unter: Nice to have.

    OK

    Zitat von water

    Zu 2) Das wäre super, wenn man mehrere UDFs angeben könnte. Ausnahmen sind dann nicht notwendig, da ja alle Funktionen in beiden UDFs den selben Prefix haben.

    Ist hiermit getan.

    Zitat von water

    Zu 3) Ich habe auch schon an ein Auto-Skript gedacht. Da werde ich mich gleich dranmachen.

    Zu 4) Da habe ich an ProcessClose gedacht. Das obige AutoIt-Skript killt einfach alle HH Prozesse bevor es einen neuen startet.

    Und nun auch das AutoIt-Skript zum Hilfeaufruf. Dadurch poppt kein Cmd-Window auf. Die alternativen Hilfefenster schließe ich, wenn ein neuer Aufruf der Art erfolgt.

    Es gibt dadurch Veränderungen in den properties, bitte genau beachten.

    Code: alternate.help.properties
    #---------------------------------------------------------------------------------------------------
    #~  File:   alternate.help.properties
    #~
    #~  Save this file in the same folder as the "SciTEUser.properties" file.
    #~  This is normally: "C:\Users\_U_S_E_R_\AppData\Local\AutoIt v3\SciTE"
    #~
    #~  Add this line to the beginning of the "SciTEUser.properties" file:   import alternate.help
    #---------------------------------------------------------------------------------------------------
    
    #~ We assume that each UDF function has a prefix like: "_" & "1 or more literals" & "_".
    #~ The search for the assigned help file follows this pattern.
    #~ If there is no match, the default Autoit3Help is called.
    
    #~ We need to override the au3-help-call
    # Commands to for Help F1
    #~ command.help.$(au3)=$(SciteDefaultHome)\..\Autoit3Help.exe "$(CurrentWord)"
    #~ command.help.subsystem.$(au3)=2
    
    # New call:                       --- SET YOUR PATH HERE ---
    #~ command.help.$(au3)=dofile C:\\CODE\\Lua\\alternate.help.lua
    #~ command.help.subsystem.$(au3)=3
    command.help.$(au3)="C:\CODE\AutoIt\TEST\call.alternate.help.exe" "C:\CODE\Lua\alternate.help.lua"
    command.help.subsystem.$(au3)=2
    
    #~ You can define a folder where all your help files will be stored.
    chm.mainfolder=C:\CODE\AutoIt\helpfiles
    
    
    #~ Define all paths as: "chm.path.prefix_value=Path".
    #~ The "prefix_value" defines the specific first characters of the UDF functions ("_AD_, _OL_").
    #~ IMPORTANT! The path to the help file must never contain a space!!
    
    #~ Active Directory
    #~ If "chm.mainfolder" is used, you can apply it like this:
    chm.path._AD_=$(chm.mainfolder)\AD.chm
    #~ otherwise use the full path:
    #~ chm.path._AD_=C:\CODE\AutoIt\helpfiles\AD.chm
    udf.path._AD_=C:\CODE\AutoIt\FREMD_CODE\AD 1.6.0.0\AD.au3
    
    
    #~ OutlookEX
    chm.path._OL_=$(chm.mainfolder)\OutlookEX.CHM
    udf.path._OL_=C:\CODE\AutoIt\FREMD_CODE\OutlookEX 1.7.0.0\OutlookEX.au3|C:\CODE\AutoIt\FREMD_CODE\OutlookEX 1.7.0.0\OutlookEX_Base.au3
    
    #~ If you have a very long base path for multiple UDF, you can create a separate property just for that use for better readability:
    #~ udf.path.base=C:\CODE\AutoIt\FREMD_CODE\OutlookEX 1.7.0.0
    #~ udf.path._OL_=$(udf.path.base)\OutlookEX.au3|$(udf.path.base)\OutlookEX_Base.au3
    Alles anzeigen
    Code: alternate.help.lua - v 0.2
    -- TIME_STAMP   2021-11-26 13:52:54   v 0.2
    
    --[[    History
        v 0.2
        added:      Multiple UDF files for the same prefix
                    i.e.: "udf.path._OL_=C:\Code\AutoIt\udf\OutlookEX 1.7.0.0\OutlookEX.au3|C:\Code\AutoIt\udf\OutlookEX 1.7.0.0\OutlookEX_Base.au3"
        changed:    This script is now called from an executable *.au3 file.
                    Therefore, the resulting command line for calling the respective help is passed to the calling program for execution.
    ]]
    
    
    local tAU3Help = {}
    
    do
        tAU3Help.pattFunc = '([Ff][Uu][Nn][Cc]%s+[%w_]+%s-%b())'
        tAU3Help.pattFuncName = '([Ff][Uu][Nn][Cc]%s+)([%w_]+)(%s-%b())'
        tAU3Help.t_names = {}
    
        tAU3Help.Split = function(self, _s, _delim)
            if not _s:find(_delim) then return {_s} end
            local t_res = {}
            for v in (_s.._delim):gmatch("(.-)".._delim) do
                table.insert(t_res, v)
            end
            return t_res
        end
    
        tAU3Help.GetItemHelp = function(self, _item)
            local prefix = _item:match('^(_%w+_)')
            if prefix ~= nil then
                if self:Extract(prefix) then
                    if self.t_names[_item:upper()] then
                        self:CallHelp(prefix, _item)
                        return
                    end
                end
            end
            self:CallHelp('AU3', _item)
        end
    
        tAU3Help.Extract = function(self, _prefix)
            self.t_names = {}
            local func, fname, err, s, a, e = '', '', 0
            local t_udfpath = self:Split(props['udf.path.'.._prefix:upper()], '|')
            if #t_udfpath == 0 then return false end
            for i=1, #t_udfpath do
                local fh = io.open(t_udfpath[i])
                if fh == nil then
                    err = err + 1
                else
                    s = fh:read('*a') fh:close() e = 1
                    while e do
                        a, e, func = s:find(self.pattFunc , e)
                        if a then
                            _, _, _, fname = func:find(self.pattFuncName)
                            if fname:sub(1, _prefix:len()):upper() == _prefix:upper() then
                                self.t_names[fname:upper()] = true
                            end
                        end
                    end
                end
            end
            if err == #t_udfpath then return false end
            return true
        end
    
        tAU3Help.CallHelp = function(self, _prefix, _item)
            local path, cmd = props['chm.path.'.._prefix:upper()]
            if _prefix == 'AU3' then
                cmd = '"'..props['autoit3dir']..'\\Autoit3Help.exe" "'.._item..'"'
            else
                cmd = 'mk:@MSITStore:'..path..'::/funcs/'.._item..'.htm'
            end
            props['extender.result'] = cmd  -- Runtime property, is queried by the calling Au3 script.
        end
    
    end
    
    
    tAU3Help:GetItemHelp(props['CurrentWord'])
    Alles anzeigen

    Dieses ist das Aufrufskript, welches selbst erst das Lua-Skript startet und dann dessen Ergebnis (die Befehlszeile zum Aufruf) abfragt. Damit wird dann der erforderliche Hilfeaufruf gestartet.

    Ich nutze dazu das Interface mit SciTE ("DirectorExtension"). Dadurch ergibt sich eine minimale Verzögerung, aber nicht wirklich störend.

    Das Skript kompilieren und gemäß der Anweisung im Skript den Aufruf in die properties eintragen.

    EDIT

    Ich speichere jetzt die PID der aufgerufenen hh.exe in einer Property. Dadurch wird auch nur die von diesem Skript aufgerufenen PID gekillt und nicht evtl. eine später geöffnete hh.exe eines anderen Programms.

    Etwas unklar ist mir, wieso ich die AD-Hilfe maximieren kann, jedoch nicht die OL-Hilfe. - Vielleicht fällt dir ja was auf?

    AutoIt: call.alternate.help.au3
    ;-- TIME_STAMP   2021-11-26 17:22:14   v 0.1
    
    
    #cs
        File:         call.alternate.help.au3
        compile as:   call.alternate.help.exe
    
        Settings in your "alternate.help.properties":
        # Commands to for Help F1
        command.help.$(au3)="FULL_PATH\call.alternate.help.exe" "FULL_PATH\alternate.help.lua"
        command.help.subsystem.$(au3)=2
    
    #ce
    
    Global $g_SciTECmd
    GUIRegisterMsg(74, "MY_WM_COPYDATA")  ; $WM_COPYDATA = 74
    
    Global $sCmd, $au3, $param, $pos, $PID, $aWin, $hWnd, $last_hh = 0
    
    If Not $CmdLine[0] Then
        ShellExecute(StringTrimRight(@AutoItExe, 11) & 'Autoit3Help.exe')
    Else
        $sCmd = _GetCmdLine($CmdLine[1])
        If StringInStr($sCmd, '" "') Then
            $pos = StringInStr($sCmd, ' ', 0, -1)
            $au3  = StringLeft($sCmd, $pos -1)
            $param = StringTrimLeft($sCmd, $pos)
            ShellExecute($au3, $param)
        Else
            SendSciTE_Command("askproperty:hh.pid", 1)
            $last_hh = Number($g_SciTECmd)
            If ProcessExists($last_hh) Then ProcessClose($last_hh)
            $PID = ShellExecute(@WindowsDir & '\hh.exe', $sCmd)
            SendSciTE_Command("extender:dostring props['hh.pid'] = " & $PID)
            $aWin = WinList('[CLASS:HH Parent]')
            If $aWin[0][0] > 0 Then
                For $i = 1 To $aWin[0][0]
                    If WinGetProcess($aWin[$i][0]) = $PID Then
                        $hWnd = $aWin[$i][1]
                        ExitLoop
                    EndIf
                Next
                WinSetState($hWnd, '', @SW_MAXIMIZE)
            EndIf
        EndIf
    EndIf
    
    
    
    ; test results:
    ; "C:\Program Files (x86)\AutoIt3\Autoit3Help.exe" "ConsoleWrite"
    ; mk:@MSITStore:C:\CODE\AutoIt\helpfiles\OutlookEX.CHM::/funcs/_OL_ErrorNotify.htm
    ; mk:@MSITStore:C:\CODE\AutoIt\helpfiles\AD.chm::/funcs/_AD_DisableObject.htm
    Func _GetCmdLine($_sLuaFile)
        SendSciTE_Command("extender:dostring do dofile '" & StringReplace($_sLuaFile, '\', '/') & "' end", 1)
        SendSciTE_Command("askproperty:extender.result", 1)
        Return StringReplace($g_SciTECmd, '\\', '\')
    EndFunc
    
    
    ; by BugFix
    Func _GetHwndDirectorExtension()
        Local $hActive = WinGetHandle('[ACTIVE]')
        Local $PIDActive = WinGetProcess($hActive)
        Local $aExtension = WinList("DirectorExtension")
        Local $PIDExt
        For $i = 1 To $aExtension[0][0]
            $PIDExt = WinGetProcess($aExtension[$i][1])
            If $PIDExt = $PIDActive Then Return $aExtension[$i][1]
        Next
    EndFunc  ;==>_GetHwndDirectorExtension
    
    ; by Jos
    Func SendSciTE_Command($_sCmd, $Wait_For_Return_Info = 0)
        Local Static $My_Hwnd = GUICreate("AutoIt3-SciTE interface") ; Create GUI to receive SciTE info
        Local Static $My_Dec_Hwnd = Dec(StringTrimLeft($My_Hwnd, 2)) ; Convert my Gui Handle to decimal
        Local Const $SCI_GETLINE      = 0x0869 ;  2153
        Local Const $WM_COPYDATA      = 0x004A ;    74
        Local Const $WM_GETTEXT       = 0x000D ;    13
        Local Const $WM_GETTEXTLENGTH = 0xE224 ; 57892
    ;~     Local $Scite_hwnd = WinGetHandle("DirectorExtension") ; Get SciTE DIrector Handle
        Local $Scite_hwnd = _GetHwndDirectorExtension() ; Get SciTE DIrector Handle
        $_sCmd = ":" & $My_Dec_Hwnd & ":" & $_sCmd              ; Add dec my gui handle to commandline to tell SciTE where to send the return info
        Local $CmdStruct = DllStructCreate('CHAR[' & StringLen($_sCmd) + 1 & ']')
        DllStructSetData($CmdStruct, 1, $_sCmd)
        Local $COPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR')
        DllStructSetData($COPYDATA, 1, 1)
        DllStructSetData($COPYDATA, 2, StringLen($_sCmd) + 1)
        DllStructSetData($COPYDATA, 3, DllStructGetPtr($CmdStruct))
        $g_SciTECmd = ""
        DllCall('User32.dll', 'None', 'SendMessage', _
                'HWnd', $Scite_hwnd, _
                'Int', $WM_COPYDATA, _
                'HWnd', $My_Hwnd, _
                'Ptr', DllStructGetPtr($COPYDATA))
    ;~     GUIDelete($My_Hwnd)
        If $Wait_For_Return_Info Then
            For $x = 1 To 10
                If $g_SciTECmd <> "" Then ExitLoop
                Sleep(20)
            Next
            $g_SciTECmd = StringTrimLeft($g_SciTECmd, StringLen(":" & $My_Dec_Hwnd & ":"))
            $g_SciTECmd = StringReplace($g_SciTECmd, "macro:stringinfo:", "")
            Return $g_SciTECmd
        EndIf
    EndFunc  ;==>SendSciTE_Command
    
    
    Func MY_WM_COPYDATA($hWnd, $msg, $wParam, $lParam)
        Local $COPYDATA = DllStructCreate('ULONG_PTR;DWORD;PTR', $lParam)
        Local $SciTECmdLen = DllStructGetData($COPYDATA, 2)
        Local $CmdStruct = DllStructCreate('CHAR[255]', DllStructGetData($COPYDATA, 3))
        $g_SciTECmd = StringLeft(DllStructGetData($CmdStruct, 1), $SciTECmdLen)
    EndFunc  ;==>MY_WM_COPYDATA
    Alles anzeigen

    Dateien

    alternate.help.lua 2,76 kB – 285 Downloads call.alternate.help.au3 4,32 kB – 303 Downloads
  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 25. November 2021 um 22:49
    Zitat von water

    BTW: Habe gerade gesehen, dass Jos die AutoItHelp für SciTE "missbraucht". Vielleicht könnte man die auch für unsere CHMs verwenden und hätte somit das Instanzen-Problem erschlagen.

    Das sollte sich erledigen, wenn ich als Main-Skript eine Exe nutze. Im SciTE - Command Aufruf wird dann die Laufzeitumgebung auf Windows (2) festgelegt und dann sollte das automatisch mit der Prozessverwaltung durch SciTE funktionieren.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 25. November 2021 um 22:14
    Zitat von water

    Wie kann ich angeben, dass z.B. die AD.au3 im User Include Directory liegt (wie über SciTEConfig konfiguriert)?

    Da die Lösung ja allgemeingültig sein soll, wäre das etwas tricky. Denn:

    In der Property openpath.$(au3) sind die Includ-Pfade !! hinterlegt. Somit möglicherweise mehrere Ordner. Das wäre nicht so günstig zum Abfragen.

    Ist dort nur ein Pfad, kannst du die Variable $(openpath.$(au3)) als Verweis auf diesen Pfad nutzen. Oder du schreibst halt den realen Pfad zur Property.

    Zitat von water

    Fein wäre es, wenn man noch Ausnahmen definieren könnte.
    Konkret habe ich die Outlook-Funktionen in 2 UDFs: OutlookEX.au3 und OutlookEX_Base.au3 (hier sind die Konstanten definiert und die Basisfunktionen wie _OL_Open etc.).
    Für beide UDF-Dateien gilt der selbe Prefix (hier "_OL_") und sie sollen auf die selbe CHM_Datei zeigen.
    In diesem Fall würde es genügen für die Ausnahmen die UDF nicht zu durchsuchen, sondern direkt die CHM aufzurufen. Nachteil: Die Ausnahmen müssten von Hand gepflegt werden
    Alternative wäre, dass man für den Prefix (_OL_) mehere UDFs angeben kann. Vorteil: keine manuelle pflege, Nachteil: Etwas längere Laufzeit.

    OK, ich werde das mal einpflegen mit Zuweisbarkeit von mehreren UDF. (Ausnahmen wären dann nicht mehr erforderlich? - Falls doch kann ich ein Property der Form: chm.except._OL_=L_i_s_t  exceptions erstellen.) Glaub mir, der Laufzeitaufwand ist absolut vernachlässigbar. Dateien parsen mit Lua ist im Vergleich zu AutoIt um mehrfachen Faktor 10 schneller!

    Zitat von water

    Das cmd-Fenster bleibt beim Aufruf der AutoIt-Hilfe offen bis die Hilfe beendet wird. bei AD und OutlookEX popt das cmd_Fenster kurz auf und verschwindet dann gleich wieder.
    Wenn man das noch abstellen könnte, dann wäre die Lösung perfekt!

    Ich weiß jetzt nicht welche SciTE-Version du nutzt. Ich selbst nutze noch eine recht alte Version, die es erlaubt Dll in Lua zu laden (Geht ja aktuell und auf lange Sicht nicht mehr).

    Aber aus der History war ersichtlich, dass die Property create.hidden.console=1 eingeführt wurde, um das Aufpoppen der CMD-Windows zu unterbinden. Ich konnte das somit nicht selbst testen.
    Beim Standardaufruf hatte ich "start /B" vergessen, das sollte schon mal dasselbe Verhalten, wie bei den alternativen Aufrufen erzwingen.

    Aber ich werde mal an einer Kombinationslösung Lua-AutoIt testen. Die Geschwindigkeitsvorteile des Lua-Skripts nutzen, aber den Hilfeaufruf aus einer Kompilierten AutoIt.exe ausführen, um das CMD-Window Problem zu umgehen.

    Zitat von water

    Was mir noch aufgefallen ist: Wird im Skript die AutoIt-Hilfe mehrfach aufgerufen, so wird in der bestehenden Hilfe-Instanz der nächste Suchbegriff angezeigt.
    Bei eigenen UDFs wird jedesmal eine neue Instanz des Hilfeprogramms gestartet.

    Da gilt dasselbe, wie zum vorigen Punkt. Das erfordert Prozessmanagement in Windows, was mit den Standard Lua-Bibliotheken nicht realisierbar ist. Mit Alien-Lua wäre es machbar, aber das erfordert wieder das Einbinden von Dll's... s.o. :(

    Somit wird hier auch eine Kombination mit AutoIt erforderlich sein.


    Das Skript sollte auch erstmal nur einen Funktionstest ermöglichen.

    Wenn alle Funktionalitäten geklärt sind, werde ich die Umsetzung in "schön" in Angriff nehmen. :D

    Also überleg, was dir noch wichtig erscheint. Wie gesagt: Daten parsen geht rasend schnell, also auch kein Problem, statt einer z.B. 6 Dateien zu durchsuchen.

  • Variablen in RAM speichern - Daten zentralisieren - für mehrere Scripts zugänglich machen

    • BugFix
    • 24. November 2021 um 18:01
    Zitat von Dexter1993

    Eine Arbeitsspeicher basierende Datenbank wo mehrere Scripts drauf zugreifen können... Das brauche ich

    RAM-Disk und dort SQLite DB anlegen sollte machbar sein.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 24. November 2021 um 17:51
    Zitat von water

    Nun wäre es natürlich fein, wenn man diese Hilfe von SciTE aus aufrufen könnte - analog zur AutoIt-Hilfe.

    So, ich habe das mal umgesetzt.

    Die Liste von Funktionsnamen brauchen wir nicht extra führen, die ist in ein paar ms aus der UDF ausgelesen.

    Der Standard-Hilfeaufruf wird umgeroutet über das Skript. Details sind in der alternate.help.properties beschrieben.

    • Die alternate.help.lua abspeichern
    • Die alternate.help.properties im Ordner C:\Users\_U_S_E_R_\AppData\Local\AutoIt v3\SciTE speichern (im Anhang habe ich .txt angehängt, damit die Datei hochgeladen werden konnte)
    • Pfade in den Properties anpassen

    Da UDF-Funktionsnamen immer nach dem Muster _Buchstaben_ & ... erstellt werden, frage ich dieses Prefix vom markierten Wort ab.

    Gibt es für das Prefix keine gespeicherte Hilfedatei, wird der Standard-Hilfeaufruf durchgeführt. Gibt es eine Hilfedatei, wird aus der UDF ein Table aller Funktionsnamen erstellt. Ist der markierte Begriff einer dieser Funktionsnamen, wird die UDF-Hilfe mit dem markierten Begriff aufgerufen. Wird der markierte Begriff nicht im Table gefunden erfolgt ebenfalls der Aufruf der Standard-Hilfe.

    Da hier Kommandozeilenaufrufe zum Einsatz kommen, ist es erforderlich (wie in der properties-Datei ersichtlich) die Property create.hidden.console=1 zu setzen.

    So, nun probier mal schön. ;)

    Code: alternate.help.properties
    #~ *** ANMERKUNG ***
    #~ Das Erfassen von Keywords ist nicht erforderlich.
    #~ Als Keywords werden die Funktionsnamen verwendet, und das Extrahieren der Namen in eine Liste dauert nur wenige ms.
    #~ *****************
    
    #---------------------------------------------------------------------------------------------------
    #~  File:   alternate.help.properties
    #~
    #~  Save this file in the same folder as the "SciTEUser.properties" file.
    #~  This is normally: "C:\Users\_U_S_E_R_\AppData\Local\AutoIt v3\SciTE"
    #~
    #~  Add this line to the beginning of the "SciTEUser.properties" file:   import alternate.help
    #---------------------------------------------------------------------------------------------------
    
    #~ We assume that each UDF function has a prefix like: "_" & "1 or more literals" & "_".
    #~ The search for the assigned help file follows this pattern.
    #~ If there is no match, the default Autoit3Help is called.
    
    #~ We need to override the au3-help-call
    # Commands to for Help F1
    #~ command.help.$(au3)=$(SciteDefaultHome)\..\Autoit3Help.exe "$(CurrentWord)"
    #~ command.help.subsystem.$(au3)=2
    # New call:                       --- SET YOUR PATH HERE ---
    command.help.$(au3)=dofile C:\\CODE\\Lua\\alternate.help.lua
    command.help.subsystem.$(au3)=3
    
    #~ If not already done, set this property to prevent a command window from opening
    create.hidden.console=1
    
    #~ You can define a folder where all your help files will be stored.
    chm.mainfolder=C:\CODE\AutoIt\helpfiles
    
    
    #~ Define all paths as: "chm.path.prefix_value=Path".
    #~ The "prefix_value" defines the specific first characters of the UDF functions ("_AD_, _OL_").
    
    
    #~ Active Directory
    #~ If "chm.mainfolder" is used, you can apply it like this:
    chm.path._AD_=$(chm.mainfolder)\AD.chm
    #~ otherwise use the full path:
    #~ chm.path._AD_=C:\CODE\AutoIt\helpfiles\AD.chm
    udf.path._AD_=C:\CODE\AutoIt\FREMD_CODE\AD 1.6.0.0\AD.au3
    
    
    #~ OutlookEX
    chm.path._OL_=$(chm.mainfolder)\OutlookEX.CHM
    udf.path._OL_=C:\CODE\AutoIt\FREMD_CODE\OutlookEX 1.7.0.0\OutlookEX.au3
    Alles anzeigen
    Code: alternate.help.lua
    -- TIME_STAMP   2021-11-24 17:18:17   v 0.1
    
    
    local tAU3Help = {}
    
    do
        tAU3Help.pattFunc = '([Ff][Uu][Nn][Cc]%s+[%w_]+%s-%b())'
        tAU3Help.pattFuncName = '([Ff][Uu][Nn][Cc]%s+)([%w_]+)(%s-%b())'
        tAU3Help.t_names = {}
    
        tAU3Help.GetItemHelp = function(self, _item)
            local prefix = _item:match('^(_%w+_)')
            if prefix ~= nil then
                if self:Extract(prefix) then
                    if self.t_names[_item:upper()] then
                        self:CallHelp(prefix, _item)
                        return
                    end
                end
            end
            self:CallHelp('AU3', _item)
        end
    
        tAU3Help.Extract = function(self, _prefix)
            self.t_names = {}
            local e, func, fname, s, a = 1, '', ''
            local fh = io.open(props['udf.path.'.._prefix:upper()])
            if fh == nil then return false end
            s = fh:read('*a') fh:close()
            while e do
                a, e, func = s:find(self.pattFunc , e)
                if a then
                    _, _, _, fname = func:find(self.pattFuncName)
                    if fname:sub(1, _prefix:len()):upper() == _prefix:upper() then
                        self.t_names[fname:upper()] = true
                    end
                end
            end
            return true
        end
    
        tAU3Help.CallHelp = function(self, _prefix, _item)
            local path, cmd = props['chm.path.'.._prefix:upper()]
            if _prefix == 'AU3' then
                cmd = '\""'..props['autoit3dir']..'\\Autoit3Help.exe" "'.._item..'"\"'
            else
                cmd = 'start /B hh.exe mk:@MSITStore:'..path..'::/funcs/'.._item..'.htm'
            end
            os.execute(cmd)
        end
    
    end
    
    
    tAU3Help:GetItemHelp(props['CurrentWord'])
    Alles anzeigen

    Dateien

    alternate.help.properties.txt 2,02 kB – 294 Downloads alternate.help.lua 1,59 kB – 296 Downloads
  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 24. November 2021 um 08:26
    Zitat von water

    Die UDF umfasst nur Funktionen. Daher genügt es, wenn mit allen Worten, die mit "_AD_" beginnen, die AD.CHM aufgerufen wird.

    Gut, ich werde mal ein Muster erstellen. Zusätzlich auch ein Skript zur automatisierten Keyword-Extrahierung aus der jeweiligen UDF.

  • Skript für "erweiterte" Hilfe in SciTE

    • BugFix
    • 23. November 2021 um 23:14

    Da es für SciTE gedacht ist, sollte man die Umsetzung auch zwingend in Lua machen. Das erleichtert die Interaktion mit dem Editor.

    Demzufolge bieten sich hier auch Properties statt Ini-Datei an. Ist auch deutlich flexibler.

    Das umzusetzen ist auch nicht allzu kompliziert.

    Du kannst ja gerne mal eine Auswahl von Key-Words zusammenstellen mit einer Hilfedatei, die aufzurufen ist. (Aufruf, wie bekannt mit Suchbegriff als Parameter? - Am Besten, du lieferst mal eine Musterkommandozeile mit)

    Edit:

    Da am Ende der Hilfekette die Standard AutoIt-Hilfe steht, ist es natürlich sinnvoll, das Skript dann auch über F1 aufzurufen.

  • SciTE - Array: Indexwerte automatisch setzen & statische Zuweisungen erstellen

    • BugFix
    • 23. November 2021 um 18:14
    Zitat von Bitnugger

    Zeige bitte mal wie/wo man eine Tastenkombination zuweisen muss.

    OK, habe das schon so oft beschrieben, dass ich dachte es kommt euch zum Hals raus. :rofl:

    Eine freie Kommandonummer auswählen und einen freien Shortcut zuweisen:

    Code: SciTEUser.properties
    # 13 Set Array Index
    command.name.13.*=Set Array Index
    command.13.*=dofile( "_DEIN_PFAD_\\SetArrayIndex.lua")
    command.mode.13.*=subsystem:lua,savebefore:yes
    command.shortcut.13.*=Ctrl+Shift+F9
  • Funktionen als Administrator ausführen

    • BugFix
    • 23. November 2021 um 14:44

    Du kannst doch bei Aufruf des jeweiligen Menüpunktes vor dem Ausführen abfragen, ob der angemeldete User Admin ist.

  • Funktionen/STRG+C auslesen

    • BugFix
    • 23. November 2021 um 14:26
    Zitat von GringoTK

    Diese Funktion habe ich 20 mal per copy paste zu stehen.... das einzige was sich ändert, ist die rot markierte Zahl

    Dann verwende die Funktion mit dem sich ändernden Wert als Parameter:

    AutoIt
    Func Click($_koord)
        MouseClick("left", 1372, $_koord, 1)
        sleep(Random(500,1000))
        MouseClick("left", 522, 487, 1)
        sleep(Random(500,1000))
        For $a = 1 To $H
            a()
        Next
        MouseClick("left", 522, 487, 1)
        sleep(Random(500,1000))
        Send("{LEFT}")
        sleep(Random(300,600))
        For $a = 1 To $R
            b()
        Next
    EndFunc
    
    ; Aufruf
    Click(123)
    Alles anzeigen
    Zitat von GringoTK

    Gibt es eine Möglichkeit aus dem STRG + C kopierten Wert, neue Variablen "rauszuziehen"?

    Schau dir mal ClipGet an.

    Und mit den String- Funktionen kannst du dann den Inhalt rausziehen.

  • GUICtrlSetColor Problem

    • BugFix
    • 23. November 2021 um 09:52
    Zitat von JBO

    Bei einer Fehlermeldung soll sie den Text in rot ausgeben, ansonsten in schwarz.

    Und warum färbst du dann erst Rot und anschließend sofort wieder Schwarz??

    AutoIt
          GUICtrlSetColor( $idEditField, $COLOR_RED )
          GUICtrlSetData( $idEditField, $sValue & @CRLF & $sString )
          GUICtrlSetColor( $idEditField, $COLOR_BLACK )

    Der Befehl gilt für den gesamten Inhalt des Controls!

    Falls du nur teilweise färben möchtest, musst du ein RichEdit verwenden - aber das ist nicht die leichteste Kost.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™