summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormösi <mösi@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2008-11-10 18:07:34 +0000
committermösi <mösi@b9310e46-f624-0410-8ea1-cfbb3a30dc96>2008-11-10 18:07:34 +0000
commitedf7c6daa66bbb0b3be07918c1292de46d88d8d0 (patch)
treee4053bdef14646579499753effa6f1bd01de1755
parentd297c2f7a92b34c02be93e63f88a0ed5372ed171 (diff)
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
-rw-r--r--windows/neo-vars/src/Source/recycle.ahk51
1 files changed, 27 insertions, 24 deletions
diff --git a/windows/neo-vars/src/Source/recycle.ahk b/windows/neo-vars/src/Source/recycle.ahk
index 7dddf91..da1846c 100644
--- a/windows/neo-vars/src/Source/recycle.ahk
+++ b/windows/neo-vars/src/Source/recycle.ahk
@@ -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::