Deutsch
Forum

Hotkeys programmübergreifend?

 
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.
 
22.01.2011  
 



Ich weiß nicht genau was Du möchtest aber vlt. meinst Du sowas:
KompilierenMarkierenSeparieren
cls

while 1

    if iskey(123)

        while iskey(123)

        wend

        sendString(0,"Hallo Welt")

    endif

wend


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.
 
22.01.2011  
 



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?
 
22.01.2011  
 



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.

1.206 kB
Hochgeladen:22.01.2011
Ladeanzahl123
Herunterladen
 
22.01.2011  
 



Ja super, vielen Dank! Schaue mir das morgen mal genauer an
 
22.01.2011  
 



Gern geschehen - fand ich auch eben interessant.
 
22.01.2011  
 



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?
 
23.01.2011  
 



Das 2. Beispiel verbraucht 0% CPU, das 1. Beispiel dagegen im Prinzip "100%".

Diese Variante dürfte auch "nichts" verbrauchen:
KompilierenMarkierenSeparieren
 {$cleq}
cls

while 1

    sleep 100

    if getAsyncKeyState(123)

        while getAsyncKeyState(123)

            sleep 50

        wend

        sendString(0,"Hallo Welt")

    endif

wend

 
23.01.2011  
 




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.
 
23.01.2011  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

8.408 Betrachtungen

Unbenanntvor 0 min.
Michael Klumb08.03.2016
iF02.09.2015
Andreas Koch12.04.2012
Frank Vorholzer08.01.2012
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

iF (5x)
unbekannt (4x)
Jörg Sellmeyer (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie