 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 1261 Wohnort: 127.0.0.1
|
Verfasst am: So Feb 10, 2008 6:41 pm Titel: Dynamische HotStrings aus Variablen / IniDateien |
|
|
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 |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 1238 Wohnort: Berlin
|
Verfasst am: So Feb 10, 2008 8:12 pm Titel: |
|
|
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 |
|
 |
DerRaphael
Anmeldedatum: 09.01.2008 Beiträge: 1261 Wohnort: 127.0.0.1
|
Verfasst am: So Feb 10, 2008 8:15 pm Titel: |
|
|
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 |
|
 |
denick
Anmeldedatum: 15.09.2006 Beiträge: 1238 Wohnort: Berlin
|
Verfasst am: So Feb 10, 2008 8:16 pm Titel: |
|
|
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 |
|
 |
|
|
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
|