diff options
Diffstat (limited to 'src/desktopMain/kotlin/moe.yuuta.desktop/WinApi.kt')
-rw-r--r-- | src/desktopMain/kotlin/moe.yuuta.desktop/WinApi.kt | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/desktopMain/kotlin/moe.yuuta.desktop/WinApi.kt b/src/desktopMain/kotlin/moe.yuuta.desktop/WinApi.kt new file mode 100644 index 0000000..9e596f8 --- /dev/null +++ b/src/desktopMain/kotlin/moe.yuuta.desktop/WinApi.kt @@ -0,0 +1,71 @@ +package moe.yuuta.desktop + +import kotlinx.cinterop.cValue +import kotlinx.cinterop.convert +import kotlinx.cinterop.cstr +import kotlinx.cinterop.memScoped +import platform.windows.* + +object WinApi { + fun run(program: String, desktop: String) { + memScoped { + val startupInfo = cValue<STARTUPINFOA> { + lpDesktop = desktop.cstr.ptr + dwFlags = STARTF_RUNFULLSCREEN.convert() + } + val pi = cValue<PROCESS_INFORMATION> { + } + // TODO: Close these objects? + return@memScoped CreateProcessA(program, + null, + null, + null, + 0, + 0.convert(), + null, + null, + startupInfo.ptr, + pi.ptr) + } + } + + fun close(desktop: WinDesktop): Boolean { + return CloseDesktop(desktop.desktop) == 1 + } + + fun getThreadDesktop(thread: Int): WinDesktop? { + val desk = GetThreadDesktop(thread.convert()) ?: return null + return WinDesktop(desk, null) + } + + fun getThreadDesktop(): WinDesktop? = getThreadDesktop(getCurrentThreadId()) + + fun getCurrentThreadId(): Int = GetCurrentThreadId().convert() + + fun create(lpszDesktop: String, + dwDesiredAccess: Int): WinDesktop? { + val desk = CreateDesktopA(lpszDesktop, + null, + null, + 0.convert(), + dwDesiredAccess.convert(), + null) ?: return null + return WinDesktop(desk, lpszDesktop) + } + + fun switch(desktop: WinDesktop): Boolean { + return SwitchDesktop(desktop.desktop) == 1 + } + + fun setThreadDesktop(desktop: WinDesktop): Boolean { + return SetThreadDesktop(desktop.desktop) == 1 + } + + fun open(dwDesiredAccess: Int, desktop: String): WinDesktop? { + val desk = OpenDesktopA(desktop, + 0.convert(), + 0.convert(), + dwDesiredAccess.convert()) ?: return null + return WinDesktop(desk, desktop) + } +}
\ No newline at end of file |