Memetakan satu set penekanan tombol spesifik ke penekanan tombol lain menggunakan AutoHotkey?

1

Saya mencoba memetakan gerakan 3 gesek jari pada touchpad saya untuk Ctrl + Win + Kiri atau Ctrl + Win + Kanan (beralih di antara desktop virtual). Berikut adalah tombol yang ditekan ketika saya menggesek ke kiri:

VK  SC  Type    Up/Dn   Elapsed Key     Window
-------------------------------------------------------
A2  01D a   d   1.08    LControl        
A4  038 a   d   0.00    LAlt            
09  00F a   d   0.00    Tab             
09  00F a   u   0.00    Tab             
A4  038 a   u   0.00    LAlt            
A2  01D a   u   0.00    LControl        
0D  01C a   d   0.20    Enter           Task Switching
0D  01C a   u   0.00    Enter   

Dan ketika saya menggesek ke kanan:

VK  SC  Type    Up/Dn   Elapsed Key     Window
-----------------------------------------------
A2  01D a   d   1.69    LControl        
A4  038 a   d   0.00    LAlt            
A0  02A a   d   0.00    LShift          
09  00F a   d   0.00    Tab             
09  00F a   u   0.00    Tab             
A0  02A a   u   0.01    LShift          
A4  038 a   u   0.00    LAlt            
A2  01D a   u   0.00    LControl        
0D  01C a   d   0.16    Enter           Task Switching
0D  01C a   u   0.00    Enter  

Bagaimana cara memetakan ini ke Ctrl + Win + Kiri dan Ctrl + Win + Kanan?

Saya mencoba ini Alt & Ctrl & Enter & Tab::Send test, tetapi mengatakan bahwa ini adalah program yang tidak valid.

Dalam hal ini relevan, saya menggunakan Windows 10 pada Thinkpad L440 dengan driver touchpad Synaptics.

Leo Jiang
sumber

Jawaban:

0

Setelah satu atau dua jam bermain-main, saya menemukan jawabannya:

swipeDirection := ""

^!Tab::
    swipeDirection := "L"
return

^!+Tab::
    swipeDirection := "R"
return

$Enter::
    if (not swipeDirection) {
        SendInput {Enter}
    } else if (swipeDirection = "L") {
        SendInput ^#{Left}
    } else if (swipeDirection = "R") {
        SendInput ^#{Right}
    }
    swipeDirection := ""
return

Beri tahu saya jika ada metode yang lebih baik!

Sunting:

Saya menulis tentang ini di blog saya: https://www.wptutor.io/misc/windows-virtual-desktop-swipe-gestures

Leo Jiang
sumber
0

Apakah Enterpilihan didasarkan pada dialog? Jika demikian maka itu tidak akan dikirim sebagai bagian dari otomatisasi.

Saya percaya kode berikut ini harus menghasilkan keylog yang terdaftar, tetapi tidak diuji ...

^#Left::
    SendInput ^!{Tab}
    SendInput {Enter}    ; use only if needed
Return

^#Right::
    SendInput ^!+{Tab}
    SendInput {Enter}
 Return

Lihat di file bantuan untuk Daftar Kunci dan daftar pengubah

^ = Control
! = Alt
# = Win
+ = Shift

Juga, jika ini adalah fitur khusus Windows 10 baru maka tombol mungkin tidak berfungsi persis seperti yang diinginkan dan Anda mungkin perlu menggunakan AltTabdan ShiftAltTabdengan pengubah tombol kontrol. Pada versi windows sebelumnya, kombinasi ini dapat memiliki perilaku khusus sehingga ada kasus khusus (lihat AltTabdi file bantuan).

Anda juga dapat mencoba penekanan tombol secara manual untuk melihat apakah ia melakukan seperti yang dilakukan gesekan. Jika mencobanya secara manual berfungsi, maka penekanan tombol AutoHotkey harus bekerja tanpa perlu menggunakan sesuatu yang istimewa. Yaitu, coba tekan Ctrl + Alt + Tab (bawah, atas) dan kemudian Enter (bawah, atas), atau menekan Shift + Ctrl + Alt + Tab (bawah, atas) dan kemudian Enter (bawah, atas). Itulah yang ditunjukkan oleh keystroke log dengan ddan ukarakter.

SUNTING...

Berdasarkan posting tindak lanjut berikutnya, saya melihat mengapa kode di atas secara fungsional mundur (saya tidak sepenuhnya memahami pertanyaan pada awalnya, tetapi saya akan meninggalkan posting asli saya di atas apa adanya).

Dalam menjawab pertanyaan "metode yang lebih baik", kode yang diposting sudah tampak hebat dan sangat mudah (tidak ada alasan untuk mengubahnya benar-benar) - dua perbedaan gaya yang mungkin di bawah ini hanya untuk menunjukkan beberapa variasi yang mungkin dalam menjawab pertanyaan- -kode yang mungkin 'bersih' menggunakan variabel hotkey bawaan dan operator ternary.

Pertama, variabel hotkey A_ThisHotkeydan A_PriorHotkeydapat digunakan untuk mendeteksi hotkey saat ini dan hotkey terakhir yang dipecat. Ini memungkinkan Anda menyederhanakan penugasan variabel dengan menyingkirkan variabel yang digunakan untuk melacak yang dipicu yang terakhir. Definisi hotkey masih harus ada di tempat sehingga acara tersebut diambil dan dibuang, tetapi mereka tidak perlu melakukan apa pun sekarang selain kembali.

^!Tab::return
^!+Tab::return
$Enter::
    if (A_PriorHotkey="^!Tab") {
        SendInput ^#{Left}
    } else if (A_PriorHotkey="^!+Tab") {
        SendInput ^#{Right}
    } else
        SendInput {Enter}
return

Anda dapat melihat bagaimana ini terlihat sedikit lebih sederhana dan kurang tersebar.

Variasi terakhir adalah menggunakan operator ternary sekarang untuk secara efektif melakukan pernyataan If-Then-Else dan menggabungkan semuanya menjadi satu pernyataan:

^!Tab::Return
^!+Tab::Return
$Enter::SendInput % (A_PriorHotkey="^!Tab") ? "^#{Left}" : (A_PriorHotkey="^!+Tab") ? "^#{Right}" : "{Enter}"       ; Final 'Else' Statement

Ke tiga baris kode, tetapi bukan yang paling mudah dibaca.

Memanfaatkan satu tunjangan AutoHotkey akhir, garis tunggal dapat dipisah menggunakan operator kelanjutan otomatis ketika garis dimulai dengan koma, titik dua atau periode untuk merangkai hal-hal bersama-sama ... ini memungkinkan penggunaan jeda baris logis, dan membuat cukup jelas struktur If-Then-Else dengan ?operator ternary , tanpa memiliki banyak pernyataan If-Then-Else-Else-Else.

Kode akhir akan terlihat seperti ini ...

^!Tab::return
^!+Tab::return
$Enter::SendInput % (A_PriorHotkey="^!Tab")  ? "^#{Left}"
                  : (A_PriorHotkey="^!+Tab") ? "^#{Right}"
                  : "{Enter}"    ; Final 'Else' Statement

Atau dengan spasi alternatif pada 'Lain' terakhir untuk menjaga semua argumen Kirim disejajarkan secara vertikal ...

^!Tab::return
^!+Tab::return
$Enter::SendInput % (A_PriorHotkey="^!Tab")  ? "^#{Left}"
                  : (A_PriorHotkey="^!+Tab") ? "^#{Right}"
                                             : "{Enter}"      ; Final 'Else' Statement

Satu catatan akhir - saya tidak bisa benar-benar menguji kutipan kode di atas, meskipun saya percaya mereka harus bekerja sebagaimana tercantum. Semua itu hanyalah pembaruan gaya seperti yang disebutkan (yaitu, pembaruan untuk kode tindak lanjut yang sudah diposting oleh pengguna yang mengeposkan pertanyaan asli) - pada akhirnya tidak ada perbedaan fungsional, hanya beberapa fitur yang ditawarkan AutoHotkey jika Anda terus mengembangkan.

JJohnston2
sumber
Terima kasih untuk ini! Saya pikir Anda memiliki input dan output mundur. Control + Alt + Tab + Enter adalah input (dihasilkan oleh swipe). Saya ingin hasilnya ^#Leftatau ^#Right.
Leo Jiang
Saya menemukan jawabannya! Bisakah Anda melihat jawaban saya dan melihat apakah ada sesuatu yang dapat ditingkatkan?
Leo Jiang