Ja natürlich gibt es auch sowas:

D MyDsI DS likerec(MyFile.FormatName:*input)
D MyDsO DS likerec(MyFile.FormatName:*output)

Ich weis nicht, ob die DS'n dann automatisch qualified sind, wenn nicht, dann qualified anhängen.
Mittels "eval-corr MyDSI = MyDSO;" bzw. umgekehrt kann ich das übertragen.

Für die Write/Reads gibt es dann Ergänzungen:

Read MyFile MyDsI;
Write MyFile MyDsO;

Aber was die Allgemeingültigkeit angeht so ist das ja nur die halbe Wahrheit.
In RPG/LE ist das leider generell nicht möglich, da man den Formatnamen nicht in einer Variablen hinterlegen kann. Dies kann man nur in COBOL oder C++.

Hintergrund:
Jede Datei hat einen FileDescriptor mit einem Puffer.
Abhängig vom Format ist dieser Puffer zu befüllen bzw. wird dieser bereitgestellt.
Um nun die Arbeit des Programmierers zu erleichtern, hat die IBM den RPG-Compiler diesbezüglich intelligient gamacht:
Alle Variablen des Programmes haben mit dem FilePuffer absolut nichts zu tun.
Erst beim EXFMT/READ/WRITE generiert der Compiler zusätzliche Moves zwischen den Variablen und dem Filepuffer. Deshalb kann man Formatnamen nicht variabel gestalten, da der Compiler sonst nicht weiß, was er dann da tun soll.
Die COBOL-Leute haben es da etwas schwerer, da hier grundsätzlich mit dem FilePuffer native gearbeitet wird. Der Programmierer ist also selber verantwortlich, wie er mit dem Puffer umgehen muss. Dafür darf er dann aber den Formatnamen in einer Variablen ablegen.
Geschmacksache, was da nun besser ist.
Mir persönlich ist das egal, ich kann beides ganz gut.

Deine Frage nach "SendKey" verstehe ich da noch nicht. Wozu soll das gut sein?
Auch auf Windows muss ich da schon genau wissen, welches Element da den Focus gerade hat.

STRG+C/STRG+V ist eine Sache der Emulation und der Tastaturkonfiguration.
Ich kann das auch anders Konfigurieren. Manchmal geht auch:
STRG+Einfügen (Kopieren), STRG+Shift+Einfügen (Einfügen), STRG+SHIFT+Entfernen (Ausschneiden).