packages feed

workflow-windows-0.0.0: sources/Workflow/Windows/Foreign.hs

{-# LANGUAGE ForeignFunctionInterface, CPP #-}
{-|

low-level bindings.

-}
module Workflow.Windows.Foreign where
import Workflow.Windows.Types

import Foreign.C.Types
import Foreign.C.String (CWString)
import Foreign.Ptr (Ptr)

#include "calling_convention.h"

#define SAFETY safe

{-

{-|
@
@

see <>
-}
foreign import CALLING_CONVENTION SAFETY "Windows.h "
 c_ :: IO ()

-}

foreign import CALLING_CONVENTION SAFETY "Workflow.h GetClipboard"
 c_GetClipboard :: IO CWString

foreign import CALLING_CONVENTION SAFETY "Workflow.h SetClipboard"
 c_SetClipboard :: CWString -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h SendUnicodeChar"
 c_SendUnicodeChar :: WCHAR_T -> IO UINT

foreign import CALLING_CONVENTION SAFETY "Workflow.h PressKeyDown"
 c_PressKeyDown :: WORD -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h PressKeyUp"
 c_PressKeyUp :: WORD -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h ClickMouseAt"
 c_ClickMouseAt :: Int -> Int -> Int -> DWORD -> DWORD -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h ScrollMouseWheel"
 c_ScrollMouseWheel :: DWORD -> DWORD -> DWORD -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h OpenApplication"
 c_OpenApplication :: CWString -> IO ()

foreign import CALLING_CONVENTION SAFETY "Workflow.h OpenUrl"
 c_OpenUrl :: CWString -> IO ()

{-|

(reference parameter).

@
BOOL WINAPI GetCursorPos(
  _Out_ LPPOINT lpPoint
);
@

-}
foreign import CALLING_CONVENTION SAFETY "Windows.h GetCursorPos"
 c_GetCursorPos :: Ptr POINT -> IO ()

{-|

@
 BOOL WINAPI SetCursorPos(
   _In_ int X,
   _In_ int Y
 );
@

-}
foreign import CALLING_CONVENTION SAFETY "Windows.h SetCursorPos"
 c_SetCursorPos :: CInt -> CInt -> IO ()

{-|
@
@
-}
foreign import CALLING_CONVENTION SAFETY "Windows.h GetWindowRect"
 c_GetWindowRect :: VoidStar -> Ptr RECT -> IO ()

-- {-|
--
-- @
-- BOOL WINAPI SetWindowPos(
--   _In_     HWND hWnd,
--   _In_opt_ HWND hWndInsertAfter,
--   _In_     int  X,
--   _In_     int  Y,
--   _In_     int  cx,
--   _In_     int  cy,
--   _In_     UINT uFlags
-- );
-- @
--
-- see <https://msdn.microsoft.com/en-us/library/ms633545.aspx>
--
-- -}
-- foreign import CALLING_CONVENTION SAFETY "Windows.h SetWindowPos"
--  c_SetWindowPos :: IO ()

-- {-|
-- @
-- @
--
-- see <>
-- -}
-- foreign import CALLING_CONVENTION SAFETY "Workflow.h ShowHWND"
--  c_ShowHWND :: HWND -> IO String
--

{-|

@
HWND WINAPI FindWindowW(
    _In_opt_ LPCWSTR lpClassName,
    _In_opt_ LPCWSTR lpWindowName);
@

see
<https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx>

-}
foreign import CALLING_CONVENTION SAFETY "Windows.h FindWindowW" --TODO FindWindow causes "ld 1: undefined reference"
 c_FindWindow :: CWString -> CWString -> IO VoidStar

{-|

@
DWORD WINAPI GetLastError(void);
@

see
<https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360(v=vs.85).aspx>

see 'SystemErrorCode'

-}
foreign import CALLING_CONVENTION SAFETY "Windows.h GetLastError"
 c_GetLastError :: IO DWORD

{-|

see <https://msdn.microsoft.com/en-us/library/windows/hardware/ff541528(v=vs.85).aspx
Debug Privilege>

-}
foreign import CALLING_CONVENTION SAFETY "Workflow.h EnableDebugPriv"
 c_EnableDebugPriv :: IO BOOL