| |
|
|
| Guten Tag!
Ich bin großer Freund der Programmiersprachen XProfan sowie Autohotkey (AHK). Letztens hat sich mir die Frage gestellt, ob nicht auch in XProfan ein Befehl integriert ist, mit der man Hotkeys programmübergreifend belegen kann (ähnlich wie in AHK, wo z.B. #n::Run Notepad das Notepad startet oder Hallo::Tschüss das Wort "Hallo" komplett programmübergreifend durch das Wort "Tschüss" ersetzt). Gibt es da ein XProfanes Äquivalent? Wenn nicht allzu kompliziert, gerne auch eine ähnliche Funktion aus der Windows API
Schon mal vielen Dank im Vorraus, Vincent. |
|
|
| |
|
|
|
| Ich weiß nicht genau was Du möchtest aber vlt. meinst Du sowas: KompilierenMarkierenSeparieren Wenn man nun in einem beliebigen Fenster F12 drückt wird dorthinein "Hallo Welt" getippt.
Dies ist 1 Variante von vielen - je nach dem was genau passieren soll gibt es da verschiedene Ansätze. |
|
|
| |
|
|
|
| Ja, das kommt der ganzen Sache schon sehr nahe, vielen Dank Was allerdings muss ich tun, wenn ich beispielsweise ganze Wörter ersetzen möchte? D.h., wenn ich im Editor oder auch in irgendeinem anderem Programm ein "Hallo Welt" nicht mit einem F12, sindern mit der Eingabe eines ganzen Wortes provozieren möchte?
Also wenn ich beispielsweise das Wort "Klaus" eingebe und möchte, dass dieses Wort dann durch "Hallo Welt" ersetzt wird? Also das anstatt des Wortes "Klaus" dann "Hallo Welt" erscheint bzw. übergeben wird? |
|
|
| |
|
|
|
| Das ist auch kein Problem, ich habe Dir hierfür mal ein Konstrukt aufbereitet.
Du musst dafür aber stark sein ^^ -
Du musst in Deiner IDE XPSE [...] als Kompiler angeben der den Code etwas vorbereitet und dann an XProfan weitergibt: KompilierenMarkierenSeparieren {$cleq}
cls
userMessages wm_user+1234
initMyHook()
var try$=""
var myListFrom&=create("list",0)
var myListTo&=create("list",0)
addString(myListFrom&,"HALLO WELT")
addString(myListTo&,"Klaus")
addString(myListFrom&,"KLARO")
addString(myListTo&,"Prima!")
while 1
waitInput
select uMessage
caseof wm_user+1234
if &ulParam=128
ifnot &uwParam=160
if ((&uwParam>64) and (&uwParam<91)) or (&uwParam=32)
try$=try$+chr$(&uwParam)
case ord(try$)=32 : try$=del$(try$,1,1)
case right$(try$,2)=" " : try$=del$(try$,len(try$),1)
if len(try$)
if getString$(myListFrom&,selectString(myListFrom&,-1,try$))=try$
whileLoop len(getString$(myListFrom&,getCurSel(myListFrom&)))
sendKey(0,vk_back)
wend
sendString(0,getString$(myListTo&,getCurSel(myListFrom&)))
try$=""
endif
endif
else
try$=""
endif
endif
endif
endSelect
wend
nProc initMyHook
return SetWindowsHookEx(13,procAddr(myLowLevelKeyboardHookProc),getModuleHandle(0),0)/*WH_KEYBOARD_LL*/
endProc
nProc myLowLevelKeyboardHookProc
parameters code&,wParam&,lParam&
sendMessage(hWnd,wm_user+1234,long(lParam&,0),long(lParam&,8))
return 0
endProc
Hier wird ein LowLevel-Keyboard-Hook injiziert -
wenn Du irgendwo "HALLO WELT" tippst dann wird "Klaus" eingefügt bzw. aus "KLARO" wird "Prima!".
Kaum getestet hingewürfelt aber es funzt bei mir schonmal...
Um Dein XProfan XPSE-Fit zu machen einfach xpse.exe, jwasm.exe und polink.exe von [...] herunterladen und ins XProfan-Verzeichnis kopieren und in der IDE bei Kompiler die xpse.exe angeben. |
|
|
| |
|
|
|
| Ja super, vielen Dank! Schaue mir das morgen mal genauer an |
|
|
| |
|
|
|
| Gern geschehen - fand ich auch eben interessant. |
|
|
| |
|
|
|
| So, hab das ganze mal getestet, funktioniert alles super, vielen Dank nochmal! Allerings ist mir aufgefallen, dass vor allem das erste Beispiel unheimlich viel CPU-Leistung verbraucht. Habe mal ein Waitinput ergänzt - dann ging zwar die CPU-Auslastung nach unten, das Programm reagierte dann aber nur noch auf das isKey, wenn das XProfan-Fenster auch wirklich offen war, nicht, wenn es z.B. minimiert wurde. Gibt's da einen Trick, die CPU-Auslastung möglichst weit unten zu halten? |
|
|
| |
|
|
|
| Das 2. Beispiel verbraucht 0% CPU, das 1. Beispiel dagegen im Prinzip "100%".
Diese Variante dürfte auch "nichts" verbrauchen: KompilierenMarkierenSeparieren |
|
|
| |
|
|
|
Jörg Sellmeyer | Wahrscheinlich reicht sogar ein Sleep 1. Ab XProfan 11 geht auch "WaitInput 1". |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 23.01.2011 ▲ |
|
|
|
|
| Dank getAsyncKeyState reichen 10 Überprüfungen pro Sekunde und 1000 (theoretische) Überprüfungen pro Sekunde machen imho keinen Sinn. ^^
Bei WaitInput 1 wäre ich mir garnicht so sicher... also obs dann noch so funzt. |
|
|
| |
|
|