Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Makro na trzymanie klawisza


Rekomendowane odpowiedzi

Opublikowano

nie wiem czy o to ci chodziło ale można napisać taki program w c++, używając np. buildera 6. możemy zrobić to tak:

 

1) rejestrujemy hotkeye

 nie mam pomysłu jak zrobić żeby zrobić za jednym zamachem obsługę wszystkich klawiszy, więc trzeba każdy interesujący nas klawisz zadeklarować osobno. zatem

RegisterHotKey(Form1->Handle,1,0,VK_SPACE); //deklaracja spacji. analogicznie pozostałe klawisze

gdzie 2 parametr to id, robimy go dla kolejnych klawiszy 1,2,3,4...  a ostatni parametr to kod klawisza. listę kodów dla wszystkich klawiszy znajdziesz tu: https://msdn.microsoft.com/en-us/library/dd375731(VS.85).aspx

ten kod umieszczamy np. przy odpaleniu formy

2) teraz przypisujemy instrukcje dla klawiszy

void __fastcall TForm1::HotKey(TMessage &Msg)
{
        if (Msg.WParam == 1)
        {
                //instrukcje dla hotkey o id==1
        }
        if (Msg.WParam == 2)
        {
                //instrukcje dla hotkey o id==2
        }
        //i tak dalej
}

gdzie w miejsce instrukcji wstawiamy wstawiamy kod odpowiedzialny za wciskanie i odciskanie klawiszy.

robimy zmienną globalną bool lub int która nam przechowa informacje o tym czy klawisz jest wciśnięty czy nie.

robimy warunek że jak klawisz wcisniety to go odciska i ustawia wartość zmiennej na odcisniety, i odwrotnie.

klawisze się wciska i odciska tak:

keybd_event(VK_SPACE, 0, 0, 0);               // nacisniecie spacji
keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); // odcisniecie spacji

analogicznie pozostałe klawisze

3) żeby deklaracja hotkeys nam działała musimy wprowadzić dodatkowe atrybuty w .h

private:
        void __fastcall HotKey(TMessage &Msg);
public:
        BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_HOTKEY,TMessage,HotKey)
        END_MESSAGE_MAP(TForm)

taki program będzie działał. chociaż pewnie można to zrobić prościej.

  • 1 miesiąc temu...
Opublikowano

O_O jest lepszy sposób... tak mi się wydaje...

ale widzę że odpowiedź już jest i jest zalajkowana przez autora to pewnie rozwiązana ;-;

 

ale "dla każdego klawisza osobno" no... średni pomysł ale cóż... i tak bywa...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...