Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Dynamische HotStrings aus Variablen / IniDateien

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerRaphael



Anmeldedatum: 09.01.2008
Beiträge: 1261
Wohnort: 127.0.0.1

BeitragVerfasst am: So Feb 10, 2008 6:41 pm    Titel: Dynamische HotStrings aus Variablen / IniDateien Antworten mit Zitat

Dynamische Hotstrings aus Variablen/IniDateien
Zum Verändern, Löschen und während der Laufzeit hinzufügen, alles ohne Neustart des Skripts!

Hallo,

hier stelle ich ein kleines script vor, welches in der lage ist, hotstrings dynamisch anzulegen, zu speichern und zu verändern.

das programm ist eine frühe alpha veröffentlichung, die jedoch deutlich schon anzeigt, dass a) die technik funktioniert, und b) es recht komfortabel ist.

die früheren ansätze, die es für dynamische hotstrings so gab, basierten alle mehr oder minder darauf, dass hotstrings eingegeben wurden, und diese 'as-is' in das skript übernommen wurden. daraufhin musste das skript neu gestartet werden um diese hotstrings zu übernehmen. ein verändern selbiger und oder löschen war nur umständlich möglich. (Titans RegExed Hotkeys habe ich mir noch nicht en detail angeschaut)

die hotstrings werden hier als variablen im skript dynamisch aufgenommen - hin und her derefenziert und werden so bestandteil des skripts. shift+strg+escape ruft die listenansicht auf, so dass mit einem doppelklick neue hotstrings in die liste aufgenommen werden können (rechtsklick menü um zu löschen, und verändern ist ebenfalls vorhanden). neben den hotstring kann man einen haken setzen. damit signalisiert man dem skript, dass dieser hotstring gespeichert werden soll.
allerdings stecken hier noch fehler im detail. escape beendet sowohl die detailansicht, den edit/modify modus und die übersicht.

so schaut sie aus, die verwaltung



hier ist die source:
Code:
; v2hs.ahk - alpha rc 0 / zlib License style released
; Variables To HotString - Dynamische Hotstrings aus Variablen
; (c) 2008 derRaphael(at)oleco.net


__emptyStackKeys     := "Delete,Insert,BackSpace,Enter,Return,Escape,"
                     .  "Home,End,PgUP,PgDn,Up,Down,Left,Right,LWin,"
                     .  "RWin,AppsKey,Space"
__forbiddenChars     := "*,.;:=%?``´()[]{}&+^-|/\'"""
__VarToHotStringIni  := "v2hs.ini"
__VarToHotStringList := ""

IfExist, %__VarToHotStringIni%
  GoSub, InitPermaHotStrings
GoSub, MakeContextMenu
GoSub, LVGuiInit

Loop,Parse,__emptyStackKeys,`,
  HotKey, % "*~" A_LoopField, empty, ON
Loop, 24
  HotKey, % "*~F" A_Index, empty, ON
Loop, 94
  HotKey, % "*~" chr(32+A_Index), printMe, ON
Loop,Parse,__forbiddenChars
  HotKey, % "*~" A_LoopField,printMe,OFF

return

^r::reload
pause::suspend
+^Esc::Gosub, LVGuiInit

printMe:
  If !(GetKeyState("LControl")) && !(GetKeyState("RControl"))
      && !(GetKeyState("LAlt")) && !(GetKeyState("RAlt"))
      && !(GetKeyState("RWin")) && !(GetKeyState("LWin"))
      && !(InStr(__forbiddenChars,SubStr(A_ThisHotkey,0)))
    __txt .= SubStr(A_ThisHotkey,0)
  if (%__txt%) {
    len   := StrLen(__txt), __txt := %__txt%
    SendInput, {bs %len%}%__txt%
    __txt := ""
  } else {
    Tooltip % __txt
  }
return

empty:
  Tooltip
  __txt := ""
return

InitPermaHotStrings:
  IniRead, __VarToHotStringList, %__VarToHotStringIni%, Standard, PermanentHotStrings
  Loop,Parse,__VarToHotStringList,`,
    IniRead, %A_LoopField%, %__VarToHotStringIni%, DynamicHotStrings, %A_LoopField%
return

MakeContextMenu:
  Menu, ListeContext, Add, Eintrag ändern, LVMod
  Menu, ListeContext, Add, Eintrag neu anlegen, LVEdit
  Menu, ListeContext, Add, Eintrag löschen, LVDel
  Menu, ListeContext, Default, Eintrag ändern
return

LVGuiInit:
  __LVDisplayOps := "grid r20 Checked NoSort gLVCheck"
                  . " NoSortHeader -Multi WantF2 Sort"
  Gui, Margin, 0, 0
  Gui, Add, ListView, %__LVDisplayOps%, DynHotString|Abbrevation
  GoSub, LVBuild
  Gui, -Caption +Border
  Gui, Show
return

LVMod:
  __SelectedRow := LV_GetNext(0, "F")
  if __SelectedRow
  {
    GoSub, LVGet
    GoSub, LvEdit
  }
return

LVDel:
  __SelectedRow := LV_GetNext(0, "F")
  if __SelectedRow
  {
    GoSub, LVGet
    GoSub, DeleteFromList
    GoSub, LVBuild
  }
return

LVGet:
  LV_GetText(__VarHotString, __SelectedRow,1)
  LV_GetText(__VarAbbrevation, __SelectedRow,2)
return

LVCheck:
  __VarHotString := "", __VarAbbrevation := ""
  if (A_GuiEvent="DoubleClick") && (LV_GetCount("Selected"))
  {
    __SelectedRow := A_EventInfo
    GoSub, LVGet
  }
  GoSub, LVEDit
return

LVEdit:
  If !(__VarHotString) && !(__VarAbbrevation)
    __VarHotString := "Kürzel", __VarAbbrevation := "Langtext"
  else {
    GoSub, DeleteFromList
  }
  Gui, 2:Margin, 0, 0
  Gui, 2:Add, Edit, w400 r1 v__VarHotString, %__VarHotString%
  Gui, 2:Add, Edit, w400 r1 v__VarAbbrevation, %__VarAbbrevation%
  Gui, 2:Add, Button, h1 w1 hidden +default g2GuiClose,
  Gui, 2:-Caption +Border
  Gui, 2:Show
  Gui, 2:+Owner
  Gui, 1:+Disabled
  %__VarHotString% := ""
return

LVBuild:
  Gui, 1:Default
  LV_Delete()
  Loop,Parse,__VarToHotStringList,`,
    r := LV_ADD("",A_LoopField,%A_LoopField%), c:= A_Index
  IfExist, %__VarToHotStringIni%
  {
    IniRead, __permaHotStringList, %__VarToHotStringIni%, Standard, PermanentHotStrings
    Loop,%c%
    {
      LV_GetText(__tmp, A_Index)
      If (InStr(__permaHotStringList,__tmp))
        LV_Modify(A_Index,"Check")
    }
  }   
return

DeleteFromList:
  __VarToHotStringList := RegExReplace(__VarToHotStringList, "(" __VarHotString ",?)")
  If (SubStr(__VarToHotStringList,0)=",")
    __VarToHotStringList := SubStr(__VarToHotStringList,1,-1)
return

2GuiClose:
  Gui, 2:Submit, NoHide
  __VarHotString := RegExReplace(__VarHotString,"\W")
  %__VarHotString% := RegExReplace(__VarAbbrevation,"""","""""")
  __VarToHotStringList .= "," __VarHotString
  If (SubStr(__VarToHotStringList,1,1)=",")
     __VarToHotStringList := RegExReplace(__VarToHotStringList,"^,+")
  Gosub, LVBuild
2GuiEscape:
  Gui, 1:-Disabled
  Gui, 2:Destroy
return

GuiClose:
GuiEscape:
  IniDelete, %__VarToHotStringIni%, DynamicHotStrings
  Loop,Parse,__VarToHotStringList,`,
  {
    SendMessage, 4140, A_Index - 1, 0xF000, SysListView321
    if ((ErrorLevel >> 12) - 1)
    {
      IniWrite, % %A_LoopField%, %__VarToHotStringIni%, DynamicHotStrings, % A_Loopfield
      __SavedHotstrings .= A_LoopField ","
    }
  }
  IniDelete, %__VarToHotStringIni%, Standard
  If (StrLen(SubStr(__SavedHotstrings,1,-1)))
    IniWrite, % SubStr(__SavedHotstrings,1,-1), %__VarToHotStringIni%, Standard, PermanentHotStrings
  else
    FileDelete, %__VarToHotStringIni%
  Gui, 1:Destroy
return 

GuiContextMenu:
 If !A_EventInfo
   Menu, ListeContext, Default, Eintrag neu anlegen
 else
   Menu, ListeContext, Default, Eintrag ändern
 Menu, ListeContext, Show, %A_GuiX%, %A_GuiY%
return


das ist definitiv keine produktiv software, da sie noch einige fehler enthält

Erste Hilfe!
Pause -> Suspend (alles aus)
strg+r -> reload
Escape -> Menüs beenden
strg+shift+escape -> hotstring verwaltung

grüße
derRaphael
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: So Feb 10, 2008 8:12 pm    Titel: Antworten mit Zitat

Moin,

ich habe das Skript wirklich nur überflogen. Aber, kann es zwischen den Hotkeys "abc" und "abcd" unterscheiden?
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DerRaphael



Anmeldedatum: 09.01.2008
Beiträge: 1261
Wohnort: 127.0.0.1

BeitragVerfasst am: So Feb 10, 2008 8:15 pm    Titel: Antworten mit Zitat

im augenblick noch nicht, da keine endkey unterstützung vorhanden ist
das gleiche problem hat man mE aber mit klassischen :*: hotstrings auch, oder?

es unterscheidet auch nicht zwischen aBb und abb, da die kürzel als variablenname vorgehalten werden. das ist ein strukturelles problem, und ließe sich nur lösen, wenn man die hotstrings in ein multidimensionales array speichert

grüße
derRaphael
_________________


Zuletzt bearbeitet von DerRaphael am So Feb 10, 2008 8:19 pm, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
denick



Anmeldedatum: 15.09.2006
Beiträge: 1238
Wohnort: Berlin

BeitragVerfasst am: So Feb 10, 2008 8:16 pm    Titel: Antworten mit Zitat

Moin,

ich habe das auch schon mal probiert, an "Input" führt kein Weg vorbei.

Edit: Im Mutterforum nannte ich mich wegen meiner schwachen Englischkenntnisse damals als Gast "HelpingHand".

Edit2: Groß/Kleinschreibung ist auch kein Problem, wenn man den Hotstring in Hexwerten darstellt.
_________________
Hilfe zur Hilfe

(de)nick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Skripte & Funktionen Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de