Optimierungen der Speichernutzung und DLL-Aufrufen von http://fmate14.web.elte.hu/autohotkey/SendU/SendU.ahk in Sendunicode-Funktionen eingearbeitet

git-svn-id: https://svn.neo-layout.org@1160 b9310e46-f624-0410-8ea1-cfbb3a30dc96
This commit is contained in:
mösi 2008-11-10 18:07:34 +00:00
parent d297c2f7a9
commit edf7c6daa6

View file

@ -378,6 +378,7 @@ InsertIntegerLED(pInteger, ByRef pDest, pOffset = 0, pSize = 4){
Über den GTK-Workaround:
Dieser basiert auf http://www.autohotkey.com/forum/topic32947.html
Der Aufruf von »SubStr(charCode,3)« geht davon aus, dass alle charCodes in Hex mit führendem 0x angegeben sind. Die abenteuerliche ^+u-Konstruktion benötigt im Übrigen den Hex-Wert in Kleinschrift, was derzeit nicht bei den Zeichendefinitionen umgesetzt ist, daher zentral und weniger fehlerträchtig an dieser Stelle. Außerdem ein abschließend gesendetes Space, sonst bleibt der eingetippte Unicode-Wert noch kurz sichtbar stehen, bevor er sich GTK-sei-dank in das gewünschte Zeichen verwandelt.
Optimierungen von http://fmate14.web.elte.hu/autohotkey/SendU/SendU.ahk
*/
SendUnicodeChar(charCode){
@ -385,14 +386,15 @@ SendUnicodeChar(charCode){
{
StringLower,charCode,charCode
send % "^+u" . SubStr(charCode,3) . " "
}else{
VarSetCapacity(ki,28*2,0)
EncodeInteger(&ki+0,1)
EncodeInteger(&ki+6,charCode)
EncodeInteger(&ki+8,4)
EncodeInteger(&ki+28,1)
EncodeInteger(&ki+34,charCode)
EncodeInteger(&ki+36,4|2)
} else {
static ki := "#"
if (ki =="#") {
VarSetCapacity(ki,28*2,0)
DllCall("RtlFillMemory","uint",&ki+ 0,"uint",1,"uint",1)
DllCall("RtlFillMemory","uint",&ki+28+0,"uint",1,"uint",1)
}
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+ 6,"uint",4,"uint",0x40000|charCode) ;KEYEVENTF_UNICODE
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+28+6,"uint",4,"uint",0x60000|charCode) ;KEYEVENTF_KEYUP|KEYEVENTF_UNICODE
DllCall("SendInput","UInt",2,"UInt",&ki,"Int",28)
}
}
@ -402,12 +404,13 @@ SendUnicodeCharDown(charCode){
{
StringLower,charCode,charCode
send % "^+u" . SubStr(charCode,3) . " "
}else{
VarSetCapacity(ki,28,0)
EncodeInteger(&ki+0,1)
EncodeInteger(&ki+6,charCode)
EncodeInteger(&ki+8,4)
} else {
static ki := "#"
if (ki =="#") {
VarSetCapacity(ki,28,0)
DllCall("RtlFillMemory","uint",&ki,"uint",1,"uint",1)
}
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+6,"uint",4,"uint",0x40000|charCode) ;KEYEVENTF_UNICODE
DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
}
}
@ -416,25 +419,25 @@ SendUnicodeCharUp(charCode){
IfWinActive,ahk_class gdkWindowToplevel
{
; nothing
}else{
VarSetCapacity(ki,28,0)
EncodeInteger(&ki+0,1)
EncodeInteger(&ki+6,charCode)
EncodeInteger(&ki+8,4|2)
} else {
static ki := "#"
if (ki =="#") {
VarSetCapacity(ki,28,0)
DllCall("RtlFillMemory","uint",&ki,"uint",1,"uint",1)
}
DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&ki+6,"uint",4,"uint",0x60000|charCode) ;KEYEVENTF_KEYUP|KEYEVENTF_UNICODE
DllCall("SendInput","UInt",1,"UInt",&ki,"Int",28)
}
}
EncodeInteger(ref,val){
DllCall("ntdll\RtlFillMemoryUlong","Uint",ref,"Uint",4,"Uint",val)
}
/**********************
* Tastenkombinationen *
***********************
*/
; dieser Hook fixt einen AHK-Bug, dass dieses bei Reload und gedruecktem Mod4
; den ersten hook ausfuehrt, als waere dieser tatsaechlich aufgerufen worden.
; Wenn man hier einen unverfaenglichen Hook eintraegt, gibt es keine Broesel.
~F24::return
+pause::