So wie ich das sehe musst du da anders vor gehen.
Du mußt zustandsänderungen abfragen.
Wenn du eine Taste haben willst die man drücken und auch halten kann müßtest du:
wenn gedrückt wird den press befehl senden und in einer variable merken das die taste gedrückt ist
wenn wieder los gelassen wird den release befehl senden und wieder merken das nicht mehr gedrückt ist.
So kannst du auch mehrere Tasten gleichzeitig drücken.
Dazu kommt das bei deinem delay beispiel wieder das Programm wartet bis alles abgearbeitet wurde.
Die Macros mit mehreren befehlen durch einen Tastendruck würde ich weiter mit den kleinen Delays machen.
Geht sicher auch ohne aber weiß ich jetzt nicht ob der aufwand lohnt. Kommt halt drauf an wie lang deine Macros sind.