autohotkeyahk | memegang tombol mouse untuk menahan tombol lain?

0

UPDATED-STATEMENT: 20181102@112800@SUN Post created UPDATED-STATEMENT: 20181104@133200@TUE Suggested pre-requisite code that worked only for a short while UPDATED-STATEMENT: 20190101@184318@TUE Pre-requisite code no longer works in csgo anymore and never had with kf2 so I need help with another solution as to why it doesn't work perhaps an update happened preventing it from working for csgo

win10_v1803.17134.345_home
autohotkeyahk_v1.1.30.00

Bagaimana cara memegang w ketika memegang XButton1 di Logitech G502 menggunakan AutoHotKey? Masalahnya adalah ketika memegang kunci dengan skrip di bawah ini hanya mengirimkan output tunggal dan tidak menghasilkan perilaku Windows khas yang benar-benar memegangnya ( lihat di bawah misalnya ). Perlu diingat bahwa hanya karena saya sengaja menggunakan ini untuk tujuan bermain game fps, tapi memetakannya secara global jauh lebih mudah daripada memasukkan setiap game yang kebetulan saya mainkan untuk menjadi bagian dari mengubah tombol kontrol LogitechG502.

Saya pikir itu keren untuk bergerak maju dalam game sambil meraih cheetos panas dengan tangan saya yang lain

Apakah saran di sini akan membuat game ingin berubah?

Apakah game menjadi tergantung untuk mengetahui apa yang ditekan oleh pengguna mereka?

MASALAH

  • Saya tidak punya cara untuk memetakan kembali LogitechG502XButton1 saya untuk mereplikasi holdingw
    • perintah ahk-while bekerja tetapi tidak berperilaku baik dan bertindak sebagai press-release-press-release yang sangat cepat bahkan ketika diperlambat menggunakan ahk-sleep
    • lihat di bawah ini untuk solusi tentang pengaturan beberapa perintah ahk untuk memetakan kembali XButton1 LogitechG502 agar w bergerak maju saat ingame

LARUTAN

  • Tidak ada sejauh ini
    • Kode yang disarankan oleh user3419297 tidak lagi berfungsi setelah pembaruan csgo yang relevan dengan posting ini

SAMPEL

  • Tidak bekerja: XButton1::SendInput, w ; mouse advanced button back as holding forward in-game
    • Memegang selama 3 detik, XButton1 (dengan script di atas ) memberi saya:w
    • Memegang selama 3-detik, w memberi saya:wwwwwwwwwwwwwwwwwwwwwwwwww
  • Worksbutimproperuseoftoggle ( atau pengulangan cepat menekan W ):
    • tidak meniru memegang wdengan benar karena metode ini jauh lebih cepat dari pengulangan bahkan ketika diperlambat oleh ahk-sleep
$ XButton1 ::
       sementara GetKeyState ("XButton1", "P")
       Kirim w
       kembali
  • Tapi tidak banyak lagi
    • Kode prasyarat ini tidak berfungsi lagi setelah 2 bulan penggunaan dan mungkin itu karena pembaruan csgo karena saya tidak punya fps shooter lain untuk mengujinya dengan
#NoEnv
Kekuatan #SingleInstance
#InstalKeybdHook
#InstallMouseHook
#GunakanHook
#Jika WinActive ahk_exe csgo.exe || WinActive ahk_exe game2.exe || WinActive ahk_exe game3.exe
    XButton1 :: w
#IfWinActive
fohrums
sumber
Tidak jelas apa masalah dan solusi Anda.
harrymc
Masalahnya adalah bahwa jawaban yang disarankan oleh @ user3419297, menyelesaikan pekerjaan dengan benar-benar menahan w, tapi itu terlalu cepat dan tidak mereplikasi dengan benar bagaimana jendela menahan tombol.
fohrum

Jawaban:

1

Ini seharusnya bekerja:

; maximum number of hotkeys that can be pressed within 2 seconds (default rate of hotkey activations)
; without triggering a warning dialog:
#MaxHotkeysPerInterval 10000

$XButton1::
while GetKeyState("XButton1", "P")
{
    Send w
    Sleep 20 ; ms or more if you  want to reduce the frequency of the send command 
}
return

Belum dicoba.

https://autohotkey.com/docs/commands/While.htm

https://autohotkey.com/docs/commands/_MaxHotkeysPerInterval.htm

pengguna3419297
sumber
Diuji bekerja, tetapi sangat cepat dan mengganti Sendmenjadi SendInputlebih cepat. Itu bukan perilaku yang sama dengan memegang w. Saya juga tidak mengerti alasan garis tanda pound dengan interval 10000.
fohrum
Anda dapat mengurangi frekuensi perintah kirim di dalam loop dengan menambahkan sleep (waktu sebelum mengulangi perintah send) di dalamnya. Lihat jawaban yang diedit.
user3419297
Itu memang membantu dengan itu menjadi cepat, tetapi ketika mengujinya dalam game saya mendapatkan tindakan movefoward-stop-moveforward-stop. Itu bukan tipe perilaku yang tepat yang saya cari. Mungkin tidak dengan ahk-while, tetapi mungkin cara untuk hanya menahan kunci?
fohrum
1

Coba juga pemetaan ulang :

#NoEnv
#SingleInstance Force
#InstallKeybdHook
#InstallMouseHook
#UseHook

#IfWinActive Title of my game

    XButton1::w

#IfWinActive

Ganti Title of my gamedengan judul yang tepat dari jendela game seperti yang ditunjukkan pada Window Spy.

https://autohotkey.com/docs/commands/_IfWinActive.htm

SUNTING:

Anda dapat menggunakan # If- atau # IfWinActive- directive untuk membuat hotkey konteks-sensitif untuk lebih dari satu aplikasi / windows:

#If WinActive("Title of my game1") || WinActive("Title of my game2") ; "||" means "OR"

    XButton1::w
    XButton2::x

#If WinActive("Title of my game3")  

    XButton1::a
    XButton2::b

#If  ; turn off context sensitivity

; In all other applications/windows you can make XButton1 and XButton2 to do something else, e.g.:

XButton1:: Send ^c  ; copy
XButton2:: Send ^v  ; paste

https://autohotkey.com/docs/commands/_If.htm

pengguna3419297
sumber
Ini berfungsi, tetapi saya ingin menghindari keharusan menerapkan judul game dan membuat beberapa kode yang sama untuk masing-masingnya (gametitle). Jadi garis dengan tanda itu diperlukan termasuk baris terakhir #ifwinactive?
fohrums
1
Lihat EDIT dalam jawaban saya.
user3419297
Itu membantu dengan redundansi, tetapi kode ini tidak bekerja dengan Killing Floor 2. Apakah Anda tahu apakah itu karena menggunakan Mesin Unreal ?
fohrums
Ini aneh, tetapi tiba-tiba ini tidak berfungsi lagi untuk csgo. Tidak yakin apakah itu pembaruan atau apa.
fohrum