The JVM runs in a process on the underlying OS, and so does the desktop. Since the two are separate processes at the OS level and the JVM doesn't know anything about other processes, the only way you're going to give the client-side JVM access to the desktop is with native code.
Are you doing this in Windoze? I don't know anything about the MS implementation of
Java, but if you're using that one maybe it allows calls to the Windows API without having to use JNI - that seems like the kind of thing MS might do, given that their goal was to tie Java to Windows. Anyway, what you're attempting is a system-level task that's more suited to C or C++ than Java.