ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자주 사용하는 API 함수
    Programing/DirectX 2008. 2. 16. 18:15
    Arc( )
    주어진 좌표를 이용하여 아크를 그린다.  

    Global External Function:

    FUNCTION boolean Arc(ulong hwnd, long r1, long r2, long r3, long r4, long a1, long a2, long a3, long a4) LIBRARY "Gdi32.dll"

    Script:
    Boolean rtn
    ulong l_handle, l_device
    long lv[8]
    l_handle = handle(w_main)  // 'w_main' is the name of the sample window.
    l_device = GetDC(l_handle)
    lv[ ]  = {10,40,300,220,0,0,180,0}
    rtn = Arc(l_device, lv[1], lv[2], lv[3], lv[4], lv[5], lv[6], lv[7], lv[8])

    Beep( )
    삑 소리가 나게 한다.  
    Global External Function:
    FUNCTION boolean Beep(long freq,long dur) LIBRARY "Kernel32.dll"

    Script:
    Boolean rtn
    Long ll_freq, ll_dur

    ll_freq = 500
    ll_dur = 20
    rtn = Beep(ll_freq, ll_dur)

    BringWindowToTop( )
    타겟 윈도우에게 가장 위쪽으로 나오도록 메시지를 보낸다. 파워빌더의 오브젝트명.bringtotop = true과 동일하다.  

    Global External Function:
    FUNCTION boolean BringWindowToTop(ulong w_handle) LIBRARY "User32.dll"

    Script:
    Boolean rtn
    ulong l_handle

    l_handle = handle(w_win2)
    rtn = BringWindowToTop(l_handle)

    Chord( )
    주어진 좌표에 기반을 둔 현(사각형, 타원(?))을 그린다.  

    Global External Function:
    FUNCTION boolean Chord(ulong hwnd,long x1,long y1,long x2,long y2,long r1, long r2, long r3, long r4) LIBRARY "Gdi32.dll"

    Script:
    boolean rtn
    ulong l_handle, l_device
    long lv[8]

    l_handle = handle(w_main)
    l_device = GetDC(l_handle)

    // This can be done in one line:   i.e.  l_device = GetDC(handle(w_main))
    lv[ ] = {5,5,200,200,0,0,200,300}
    rtn = Chord(l_device, lv[1], lv[2], lv[3], lv[4], lv[5], lv[6], lv[7], lv[8])

    CloseHandle( )
    이 함수는 열려있는 오브젝트의 핸들을 release한다.  
    Global External Function:
    FUNCTION boolean CloseHandle(ulong w_handle) LIBRARY "Kernel32.dll"

    Script:
    boolean rtn

    ulong l_handle
    l_handle = FindWindowA(0,"")  // Usually you would already have the handle.
    rtn = CloseHandle(l_handle)

    CloseWindow( )
    타켓 윈도우를 미니마이즈시킨다.(닫지 않는다)  
    Global External Function:
    FUNCTION boolean CloseWindow(ulong w_handle) LIBRARY "User32.dll"

    Script:
    boolean rtn
    ulong l_handle
    l_handle = FindWindowA(0,"File manager")  // Be sure to use the exact title of the window you are targeting.

    rtn = CloseWindow(l_handle)

    CopyFileA( )
    이 함수는 파일을 복사한다.  
    Global External Function:
    FUNCTION boolean CopyFileA(ref string cfrom, ref string cto, boolean flag) LIBRARY "Kernel32.dll"

    Script:
    string l_from, l_to
    boolean l_flag, rtn

    l_flag = false
    l_from = "c:\pwrs\pb5i32\ex\code\beach.bmp"
    l_to = "c:\test.bmp"
    rtn = CopyFileA(l_from, l_to, l_flag)
    MessageBox("CopyFile", string(rtn))

    CreateDirectoryA( )
    새로운 디렉토리 폴더를 생성한다.  
    Global External Function:
    FUNCTION boolean CreateDirectoryA(ref string pathname, int sa) LIBRARY "Kernel32.dll"

    Script:
    boolean rtn
    string l_dir
    l_dir = "API Demo"

    rtn = CreateDirectoryA(l_dir, 0)
    If rtn then
       MessageBox("New Directory Created", "API Demo directory is located under pwrs.")
    else
       MessageBox("CreateDirectory", "Failed")
    end if

    DeleteFileA( )
    지정된 파일을 삭제한다.  
    Global External Function:
    FUNCTION boolean DeleteFileA(ref string filename) LIBRARY "Kernel32.dll"

    Script:
    string l_file
    boolean rtn

    l_file = string(sle_to.text)
    rtn = DeleteFileA(l_file)
    MessageBox("DeleteFile", string(rtn))

    DeleteMenu( )
    이 함수는 지정된 메뉴아이템을 삭제하는데 사용된다.  
    Global External Function:
    FUNCTION boolean DeleteMenu(ulong mhand, uint upos, uint flag) LIBRARY "user32.dll"

    Script:
    ulong m_handle
    boolean rtn

    m_handle = GetSystemMenu(handle(w_main), false) // Need to get the handle of the system menu first.
    rtn = DeleteMenu(m_handle, 1, 0)  // The second argument, the '1', refers to the position in the menu.
    Messagebox("Return Code", string(m_handle))
    Messagebox("Return Code", string(rtn))


    DestroyWindow( )
    이 함수는 타겟윈도우에게 Destory메시지를 보낸다. 파워빌더의 Close("윈도우명")과 동일하다.  
    Global External Function:
    FUNCTION boolean DestroyWindow(ulong w_handle) LIBRARY "USER32.DLL"

    Script:
    boolean rtn
    ulong l_handle

    open(w_win2) // Open a test window
    l_handle = handle(w_win2)
    rtn = DestroyWindow(l_handle)

    DllRegisterServer( )
    이 함수는 OCX가 자동적으로 등록되도록 해 준다. 이 함수는 constructor이벤트에서 파워빌더 에플리케인션이 이 동작되고 있는 동안에 동적으로 OCX를 등록할때 사용된다.  
    Global External Function:
    FUNCTION long DllRegisterServer() LIBRARY "c:\windows\ocxname.ocx"

    Script:
    Long ll_rtn

    ll_rtn = DllRegisterServer()
    //Note:   A return code of zero most likely means the OCX is already registered.


    Ellipse( )
    이 함수는 원에 기반을 둔 타원을 그린다.  
    Global External Function:
    FUNCTION boolean Ellipse(ulong hwnd,long x1,long y1,long x2,long y2) LIBRARY "Gdi32.dll"

    Script:
    Boolean rtn
    ulong l_handle, l_device
    long lv[4]

    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    lv[ ] = {5,5,300,300}
    rtn = Ellipse(l_device, lv[1], lv[2], lv[3], lv[4])

    ExitWindowsEx( )
    이 함수는 윈도우 O/S에게 윈도우가 종료되어야 함을 알려 윈도우 O/S가 종료되게 한다.  
    Global External Function:
    FUNCTION boolean ExitWindowsEx(uint dwReserved, uint uReserved) LIBRARY "User32.dll"

    Script:
    boolean rtn
    rtn = ExitWindowsEx(0,0)  // Zero's tell it to shut down immediately.

    FatalExit( )
    이 함수는 실행중인 에플리케이션을 강제로 종료시킵니다. 디버깅의 용도로는 사용하되 다른 용도로는 사용하지 않는 것이 좋다.  
    Global External Function:
    SUBROUTINE FatalExit(int exitcode) LIBRARY "Kernel32.dll"

    Script:
    int rtn

    rtn = MessageBox("This API call is suppose to produce a GPF!","Are You Sure?", Exclamation!, YesNo!,2)
    If rtn = 1 Then
        MessageBox("Final Notice!","You will have to reboot after this API call!")
        FatalExit(1)
    End If

    FindWindowA( )
    이 함수는 이름으로 호출된 윈도우의 핸들을 리턴합니다. 파워빌더 윈도우즈에서만 사용가능합니다. 파워빌더의 Handle( )과 유사합니다.  
    Global External Function:
    FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "User32.dll"

    Script:
    ulong l_handle
    l_handle = FindWindowA(0,"") // i.e. "File Manager" or "Numbers.txt - NotePad"


    FreeLibrary( )
    이 함수는 활성 메모리에서 dll을 release시킵니다. 이 함수는 LoadLibraryA( )와 결합되어 사용됩니다.  
    Global External Function:
    SUBROUTINE FreeLibrary(ulong libhandle) LIBRARY "Kernel32.dll"

    Script:
    ulong modhandle  // This would usually be an instance variable

    modhandle = LoadLibraryA("<32 bit dll filename>")  // This would usually be done in another event.
    FreeLibrary(modhandle)


    GetBkColor( )
    이 함수는 윈도우의 백그라운트 칼라를 reference number에 의해 return합니다. 파워빌더의 다음 스크립트와 유사합니다.
    ulong l_color
    l_color = w_main.BackColor  


    Global External Function:
    FUNCTION ulong GetBkColor (ulong hwnd) LIBRARY "Gdi32.dll"

    Script:
    ulong l_handle, l_device, l_color

    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    l_color = GetBkColor(l_device)

    GetCapture( )
    마우스에 의해 캡쳐된 윈도우의 핸들을 리턴합니다. 이때 윈도우는 마우스 커서가 어디에 있는가는 상관하지 않습니다.  
    Global External Function:
    FUNCTION ulong GetCapture( ) LIBRARY "User32.dll"

    Script:
    ulong l_handle

    l_handle = GetCapture( )

    GetComputerNameA( )

    이 함수는 컴퓨터의 이름을 참조의 방법으로 return합니다. 충분한 버퍼를 확보해야 합니다.  
    Global External Function:
    FUNCTION boolean GetComputerNameA(ref string cname,ref long nbuf) LIBRARY "Kernel32.dll"

    Script:
    string ls_compname
    long ll_buf

    ll_buf = 25
    ls_compname = space(ll_buf)
    GetComputerNameA(ls_compname, ll_buf)
    MessageBox("Computer name is:", ls_compname)

    GetClassNameA( )
    이 함수는 어떤 오브젝트나 윈도우의 핸들을 이용하여 클래스명을 리턴합니다. 충분한 버퍼를 확보해야 합니다.  
    Global External Function:
    Function long GetClassNameA(ulong hwnd, ref string cname, int buf) Library "User32.dll"

    Script:
    string l_class
    long rtn
    ulong l_handle

    l_handle = handle(w_main)
    l_class = space(50)
    rtn = GetClassNameA(l_handle,l_class,50)
    Messagebox("Classname", l_class)

    GetCurrentDirectoryA( )
    이 함수는 현재 작업디렉토리를 return합니다. 디렉토리 명이 다 들어갈만한 충분한 크기의 버퍼를 확보해야 합니다.  
    Global External Function:
    FUNCTION ulong GetCurrentDirectoryA(ulong BufferLen, ref string currentdir) LIBRARY "Kernel32.dll"

    Script:
    string ls_curdir
    ulong l_buf

    l_buf = 100
    ls_curdir = space(l_buf)
    GetCurrentDirectoryA(l_buf, ls_curdir)
    MessageBox("Current Directory:", ls_curdir)

    GetCurrentThread( )
    이 함수는 현재 thread의 handle을 return합니다.  
    Global External Function:
    FUNCTION ulong GetCurrentThread() LIBRARY "Kernel32.dll"

    Script:
    ulong rtn

    rtn = GetCurrentThread()
    MessageBox("Current Thread Handle", string(rtn))

    GetCursor( )
    이 함수는 커서의 핸들을 return합니다.  
    Global External Function:
    FUNCTION ulong GetCursor( ) LIBRARY "User32.dll"

    Script:
    ulong l_cursor
    l_cursor = GetCursor( )

    GetCursorPos( ) & SetCursorPos( )
    GetCursorPos()는 structure Mousepos를 이용해서 마우스의 x, y좌표를 return합니다. SetCursorPos()는 주어진 좌표로 마우스 커서를 이동시킵니다.  
    Global External Function:
    FUNCTION boolean GetCursorPos(ref mousepos mousepos2) LIBRARY "User32.dll"
    FUNCTION boolean SetCursorPos(int cx, int cy) LIBRARY  "User32.dll"

    Structure:  (Mousepos)
    long xpos, long ypos

    Script:
    mousepos mouseloc
    GetCursorPos(mouseloc)
    Messagebox("Cursor Position", "X = " + string(mouseloc.xpos) + "  Y = " + string(mouseloc.ypos))
    SetCursorPos(300,350)
    Messagebox("Cursor Position", "X = " + string(mouseloc.xpos) + "  Y = " + string(mouseloc.ypos))

    GetDC( )
    이 함수는 주어진 윈도우 핸들의 device context를 return합니다. device context는 어떤 그래픽함수를 호출하고자 할 경우에 필요합니다. 파워빌더에는 비숫한 함수가 없습니다.  
    Global External Function:
    Function ulong GetDC(ulong hwnd) library "user32.dll"

    Script:
    ulong l_handle, l_device

    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    MessageBox("Handle", string(l_device))

    GetKeyboardState( ) & SetKeyboardState( )
    첫번째 함수는 키보드의 모든 키의 상태를 256개의 ASCII배열에 의해서 return합니다. 두번째 함수는 주어진 배열의 상태에 따라서 키보드 상태를 set합니다. 여기에서 0은 키보드가 눌러지지 않는 것을 의미하고 그렇지 않은 값은 키보드가 눌러진 것을 의미합니다.  
    Global External Function:
    FUNCTION boolean GetKeyboardState(ref integer kbarray[256])  LIBRARY "USER32.DLL"
    FUNCTION boolean SetKeyboardState(ref integer kbarray[256]) LIBRARY "USER32.DLL"

    Script:
    //GetKeyboardState( )
    boolean rtn
    integer ipkey[256]

    rtn = GetKeyboardState(ref ipkey)

    //SetKeyboardState( )
    rtn = SetKeyboardState(ref ipkey)
    if rtn = false then
      Messagebox("Failed","Something went wrong when loading into array")
    else
      Messagebox("Successful","Keyboard state is loaded back into buffer")
    end if

    GetKeyState( )
    이 함수는 현재 키보드의 특정한 키의 상태를 ASCII값으로 참조하여 return합니다.  
    Global External Function:
    Function int GetKeyState(integer VirtualKeycode) Library "User32.dll"

    Script:
    int rtn

    rtn = GetKeyState(65)  // 65 = A
    if rtn = 0 then
      MessageBox("Key State","Letter 'A' not pressed!")
    else
      MessageBox("Key State","Letter 'A'  is pressed!")
    end if

    GetModuleHandleA( )
    이 함수는 활성 메모리의 모듈이나 dll의 핸들을 return합니다.  
    Global External Function:
    Function long GetModuleHandleA(string modname) Library "Kernel32.dll"

    Script:
    ulong rtn

    rtn = GetModuleHandleA("User32.dll")
    MessageBox("Return Code", string(rtn))

    GetParent( )

    이 함수는 child handle을 검색하여 parent handle을 return합니다. 파워빌더의 'GetParent()'가 이 함수와 동일합니다.  
    Global External Function:
    FUNCTION ulong GetParent(ulong hwnd) LIBRARY "User32.dll"

    Script:
    ulong l_handle, rtn

    l_handle = handle(cb_getparent) // Command Button name
    rtn = GetParent(l_handle)
    Messagebox("GetParent", "Parent handle = " + string(rtn) + " / Child handle = " + string(l_handle))


    GetPixel( ) & SetPixel( )
    첫번째 함수는 특정한 픽셀의 색을 알려주며 두번째 함수는 특정한 좌표의 색을 변경합니다.  
    Global External Function:
    FUNCTION ulong GetPixel(ulong hwnd, long xpos, long ypos) LIBRARY "Gdi32.dll"
    FUNCTION ulong SetPixel(ulong hwnd, long xpos, long ypos, ulong pcol) LIBRARY "Gdi32.dll"

    Script:
    long lx, ly
    ulong rtn
    ulong l_handle, l_device

    lx = 100
    ly = 100
    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    rtn = GetPixel(l_device, 100, 100)
    MessageBox("Position " + string(lx) + "," + string(ly),"Color = " + string(rtn))
    SetPixel(l_device, lx, ly, 0)  // This call will set the pixel at lx, ly to black.


    GetSystemMetrics( )
    이 함수는 현재 화면의 해상도 픽셀단위를 이용해서 알려줍니다. 이 함수는 아주 민감하여 정확히 선언을 해야 하며 "GetSystemMetrics"라고 선언해야 하는데 "getsystemmetrics"로 선언하면 절대 안됩니다.  
    Global External Function:
    FUNCTION int GetSystemMetrics(int indexnum) LIBRARY "user32.dll"

    Script:
    int l_xx, l_yy

    l_xx = GetSystemMetrics(0)
    l_yy = GetSystemMetrics(1)
    Messagebox("Screen Resolution", string(l_xx) + " , " + string(l_yy))

    GetSystemMenu( )
    이 함수는 에플리케인션이 복사 또는 수정을 위해 시스템이나 윈도우즈의 메뉴를 사용할 수 있게 합니다.  
    Global External Function:
    FUNCTION boolean GetSystemMenu(ulong mhandle, boolean flag) LIBRARY "user32.dll"

    Script:
    boolean flag
    ulong l_handle, m_handle

    l_handle = handle(w_main)
    flag = false
    m_handle = GetSystemMenu(l_handle, flag)
    Messagebox("Return Code", string(m_handle))


    GetSystemTime( )
    이 함수는 structure SystemTime을 이용하여 시스템 타임을 return합니다.  
    Global External Function:
    SUBROUTINE GetSystemTime(ref systemtime systimeptr) Library "Kernel32.dll"

    Structure:  (SystemTime)
    uint year,  uint month,  uint dayofweek,  uint day,  uint hour,  uint minute,  uint second,  uint millisecond

    Script:
    systemtime s_systime
    string l_day, l_date, l_time

    GetSystemTime(s_systime)

    l_date = string(s_systime.month) +"/"+ string(s_systime.day) &
           +"/"+ string(s_systime.year)
    l_time = string(s_systime.hour) +":"+ string(s_systime.minute) &
           +":"+ string(s_systime.second) +":"+ string(s_systime.millisecond)

    CHOOSE CASE s_systime.dayofweek
       CASE 1
          l_day = "Sunday"
       CASE 2
          l_day = "Monday"
       CASE 3
          l_day = "Tuesday"
       CASE 4
          l_day = "Wednesday"
       CASE 5
          l_day = "Thursday"
       CASE 6
          l_day = "Friday"
       CASE 7
          l_day = "Saturday"
    END CHOOSE
    Messagebox("System Time:",l_date + "   " + l_day + "   " + l_time)

    GetThreadPriority( )
    이 함수는 주어진 thread의 우선 순위를 return합니다.  
    Global External Function:
    FUNCTION int GetThreadPriority(ulong hthread) LIBRARY "Kernel32.dll"

    Script:
    ulong l_handle
    integer rtn

    l_handle = GetCurrentThread()
    rtn = GetThreadPriority(l_handle)
    MessageBox("Current Thread Priority", string(rtn))

    GetUserNameA( )

    이 함수는 현재 유저의 로그온 네임을 return합니다. (유저명을 저장할 수 있을 만큼의 충분한 버퍼를 확보해야 합니다.)  
    Global External Function:
    FUNCTION boolean GetUserNameA(ref string uname, ref ulong slength) LIBRARY "ADVAPI32.DLL"

    Script:
    string  ls_username
    string  ls_var
    ulong  lu_val
    boolean rtn

    lu_val = 255
    ls_username = Space( 255 )
    rtn = GetUserNameA(ls_username, lu_val)
    Messagebox("GetUserNameA", "Username = " + string(ls_username))

    GetWindowsDirectoryA( )
    이 함수는 윈도우즈 디렉토리를 return하며 디렉토리를 얻기 위해 디렉토리가 저장될 만한 길이의 충분한 메모리를 확보해야 합니다.  
    Global External Function:
    FUNCTION ulong GetWindowsDirectoryA(ref string wdir, ulong buf) LIBRARY "kernel32.dll"

    Script:
    ulong l_buf
    string windir

    l_buf = 144
    windir = space(144)
    GetWindowsDirectoryA(windir, l_buf)
    MessageBox("Current Directory", windir)

    GlobalMemoryStatus( )

    이 함수는 structure Memory를 이용하여 현재 메모리의 모든 정보를 리턴합니다.  
    Global External Function:

    SUBROUTINE GlobalMemoryStatus(ref memory mem2) LIBRARY "Kernel32.dll"

    Structure:(Memory)
    ulong m_length, ulong m_loaded, ulong m_totalphys, ulong m_availphys, &
    ulong m_totalpagefile, ulong m_availpagefile, ulong m_totalvirtual, &
    ulong m_availvirtual

    Script:
    memory sysmem

    GlobalMemoryStatus(sysmem)
    Messagebox("Memory Length", string(sysmem.m_length))
    Messagebox("Memory Loaded", string(sysmem.m_loaded))
    Messagebox("Total Physical Memory", string(sysmem.m_totalphys))
    Messagebox("Total Available Memory", string(sysmem.m_availphys))
    Messagebox("Total Page Size", string(sysmem.m_totalpagefile))
    Messagebox("Available Page Size", string(sysmem.m_availpagefile))
    Messagebox("Total Virtual Memory", string(sysmem.m_totalvirtual))
    Messagebox("Available Virtual Memory", string(sysmem.m_availvirtual))

    LoadLibraryA( )

    이 함수는 dll을 (활성)메모리에 로드합니다. 32비트에서만 사용할 수 있습니다.  
    Global External Function:
    FUNCTION ulong LoadLibraryA(string modname) LIBRARY "Kernel32.dll"

    Script:
    ulong modhandle

    modhandle = LoadLibraryA("c:\windows\mydll.dll")  // Pathing isn't necessary if dll is in dos search path.
    If modhandle > 0 Then
       MessageBox("Return Code", "Load Successful -> handle = " + string(modhandle))
    else
       MessageBox("Result","Unable to load module")
    end if

    MciSendStringA( )
    이 함수는 AVI파일을 PLAY하며 사용법이 좀 복잡합니다. 파워빌더에는 비슷한 함수가 없습니다.  
    Global External Function:
    FUNCTION long MciSendStringA(string cmd, REF string rtn, long size, long wnd) LIBRARY "winmm.dll"

    Script:
    string s_errortext
    string filename

    filename = "c:\pwrs\pb5i32\ex\code\pbspin.avi"
    MciSendStringa ("open "+Filename+"  type AVIVideo alias test wait",s_errortext, 0,0)
    MciSendStringa ("Window test handle " + string(handle(w_main)) + " wait",s_errortext, 0, 0)
    MciSendStringa ("Put test destination wait",s_errortext, 0, 0)
    MciSendStringa ("Play test wait", s_errortext, 0, 0)
    MciSendStringa ("Close test", s_errortext, 0, 0)

    MessageBoxA( )
    이 함수는 메시지 박스를 출력합니다. 파워빌더의 MessageBox()와 유사합니다.  
    Global External Function:
    FUNCTION long MessageBoxA(ulong hwnd, ref string text, ref string title, ulong style) LIBRARY "User32.dll"

    Script:
    long rtn
    ulong handle1, style1
    string text1
    string title1

    handle1 = handle(parent)
    text1 = "This is an API Messagebox"
    title1 = "API MessageBox"
    style1 = 0
    rtn = MessageBoxA(handle1,text1,title1,style1)


    Mouse_Event( )

    이 함수는 마우스 포인터를 이동시키거나 마우스 버튼의 클릭이벤트를 발생시키거나 기타 유저가 마우스를 이용하여 할 수 있는 일을 합니다. 아래의 예제는 마우스를 왼쪽으로 80픽셀, 위로 50픽셀이동시킵니다. structure mousepos는 마우스의 이동전의 좌표입니다.  
    Global External Function:
    SUBROUTINE Mouse_Event(ulong dwflag,ulong dx,ulong dy,ulong cbutton,ulong dwextra) LIBRARY "User32.dll"

    Structure:  (Mousepos)
    long xpos, long ypos

    Script:
    int l_loop, lx, ly, lflag
    mousepos mouseloc

    lx = mouseloc.xpos
    ly = mouseloc.ypos
    lflag = 1  //1 = do nothing, 7 = L-button clicked, 25 = R-button clicked
    mouse_event(lflag,-80,-50,0,0)

    MoveToEx( ) & LineTo( )
    MoveToEx()는 주어진 좌표로 커서를 이동시키며, LineTo()는 현재 좌표에서 주어진 좌표까지 라인을 그립니다.  
    Global External Function:
    FUNCTION boolean MoveToEx(ulong hwnd,long wx, long wy,ref prepos prepos2) LIBRARY "Gdi32.dll"
    FUNCTION boolean LineTo(ulong hwnd,long wx, long wy) LIBRARY "Gdi32.dll"

    Structure:  (Prepos)
    long xpos, long ypos

    Script:
    ulong l_handle, l_device
    prepos previouspos

    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    MoveToEx(l_device,100,100,previouspos)
    LineTo(l_device,200,200)

    MoveWindow( )

    이 함수는 주어진 값에 따라 윈도우의 위치 및 크기를 변경합니다.  
    Global External Function:
    FUNCTION boolean MoveWindow(ulong whand,int wx,int wy,int ww,int wh,boolean wflag) LIBRARY "user32.dll"

    Script:
    boolean rtn
    ulong l_handle, l_device
    l_handle = handle(w_main)
    rtn = MoveWindow(l_handle,10,10,100,100,true)
    MessageBox("Return Code",string(rtn))


    Pie( )
    이 함수는 주어진 좌표를 이용하여 파이챠트에 기반을 둔 반원을 그립니다.  
    Global External Function:
    FUNCTION boolean Pie(ulong hwnd,long x1,long y1,long x2,long y2,long x3,long y3,long x4,long y4) LIBRARY "Gdi32.dll"

    Script:
    Boolean rtn
    ulong l_handle,l_device

    long lv[8]
    lv[ ] = {10,50,290,220,0,0,80,0}
    l_handle = handle(w_main)
    l_device  = GetDC(l_handle)
    rtn = Pie(l_device,lv[1],lv[2],lv[3],lv[4],lv[5],lv[6],lv[7],lv[8])

    Polygon( )
    이 함수는 주어진 좌표를 이용하여 도형에 기반한 타원을 그립니다.  
    Global External Function:
    FUNCTION boolean Polygon(hdc, ref struct poly poly2, int cnt) LIBRARY "Gdi32.dll"

    Structure:  (Poly)
    long xpos[5], long ypos[5]  //The size of the array is proportional to the number of sides in the Polygon.

    Script:
    ulong l_handle, l_device
    int pcnt
    l_handle = handle(w_main)
    l_device = GetDC(l_handle)
    pcnt = 5
    poly poly3
    poly3.xpos[ ] = {50,100,150,200,250}
    poly3.ypos[ ] = {50,100,150,200,250}
    Polygon(l_device,poly3,pcnt)

    PostMessageA( )
    이 함수는 지정된 윈도우에 의해서 만들어진 thread와 관련된 메시지(minimize, close)를 message queue에 post하며 이것이 처리되기전까지는 return되지 않는다.  
    Global External Function:
    FUNCTION boolean PostMessageA(ulong hwndle,UINT wmsg,ulong wParam,ulong lParam) Library "User32.dll"

    Script:
    ulong l_handle
    boolean rtn

    l_handle = handle(w_main)
    rtn = PostMessageA(l_handle,274,61472,0)   // 61472 = minimize, 61488 = maximize, 61728 = normal state

    Rectangle( )
    이 함수는 주어진 좌표에 의해서 사각형을 그린다.  
    Global External Function:
    FUNCTION boolean Rectangle(ulong hwnd,long x1,long y1,long x2,long y2) LIBRARY "Gdi32.dll"

    Script:
    Boolean rtn
    ulong l_handle,l_device
    long lv[4]

    lv[ ] = { 10,10,275,215}
    l_handle = handle(w_main)
    l_device  = GetDC(l_handle)
    rtn = Rectangle(l_device,lv[1],lv[2],lv[3],lv[4])

    SendMessageA( )
    이 함수는 지정된 윈도우에 의해서 만들어진 thread와 관련된 message를 message queue에 보내며 그 message가 처리될때까지 return되지 않는다.  
    Global External Function:
    FUNCTION long SendMessageA(ulong hwndle,UINT wmsg,ulong wParam,ulong lParam) Library "User32.dll"

    Script:
    ulong l_handle
    long rtn

    l_handle = handle(w_main)
    rtn = SendMessageA(l_handle,274,61728,0)

    SetCapture( )
    이 함수들은 같이 사용되며, SetCapture()함수는 ReleaseCapture()가 호출될때까지 마우스에 락을 건다.  
    Global External Function:
    FUNCTION ulong SetCapture(ulong a) LIBRARY "User32.dll"
    FUNCTION boolean ReleaseCapture( ) LIBRARY "User32.dll"

    Script:
    boolean rtn
    ulong l_loop, u_test, u_long
    u_test = handle(parent)
    u_long = SetCapture(u_test)

    SetPointer(SizeNWSE!)
    for l_loop = 1 to 150000
    next
    rtn = ReleaseCapture( )

    SetComputerNameA( )
    이 함수는 컴퓨터(다른 컴퓨터에서 참조되는)의 이름을 변경한다.  
    Global External Function:
    FUNCTION boolean SetComputerNameA(ref string cname) LIBRARY "kernel32.dll"

    Script:
    boolean rtn
    string l_name

    l_name = "Powerbuilder"
    rtn = SetComputerNameA(l_name)

    if rtn then
       MessageBox("Computer name changed to 'Powerbuilder'", "You'll need to reboot for it to take effect")
    else
       MessageBox("SetComputerName", "Failed")
    end if

    SetCurrentDirectoryA( )
    이 함수는 O/S가 가리키고 있는 현재의 디렉토리를 변경한다. 파워빌더에는 이와 유사한 함수가 없다.  
    Global External Function:
    FUNCTION boolean SetCurrentDirectoryA(ref string cdir) LIBRARY "kernel32.dll"

    Script:
    boolean rtn
    string l_dir

    l_dir = "c:\My Documents"
    rtn = SetCurrentDirectoryA(l_dir)
    MessageBox("SetCurrentDirectory", string(rtn))

    SetFocus( )
    주어진 윈도우 또는 오브젝트로 포커스를 변경하는 기능을 수행한다. 파워빌더의 오브젝트.SetFocus( )와 유사하다.  
    Global External Function:
    SUBROUTINE SetFocus(long objhandle) LIBRARY "User32.dll"

    Script:
    SetFocus(handle(sle_1))  // This function gets the handle from PB.

    SetThreadPriority( )
    이 함수는 주어진 thread의 우선순위를 set한다. default값은 0이며, 그 어떤 높은 우선순위도 hold상태가 되어 더 많은 cpu time을 받을 수 있다. 우선 순위를 너무 높게 잡거나 마우스가 작동하지 않도록 하는 것은 좋지 않다.  
    Global External Function:
    FUNCTION boolean SetThreadPriority(ulong hthread, int npriority) LIBRARY "Kernel32.dll"

    Script:
    ulong l_handle
    boolean rtn

    l_handle = GetCurrentThread()
    rtn = SetThreadPriority(l_handle, 2) // Set the priority of thread higher.
    MessageBox("Current Thread Priority Changed", string(rtn))

    Sleep( )
    이 함수는 O/S가 주어진 시간(milliseconds)동안 현재의 thread를 무시하도록 한다. 이 함수가 Active상태인 동안 화면은 다시 그려지지 않는다.  
    Global External Function:
    SUBROUTINE Sleep(ulong milli) LIBRARY "Kernel32.dll"

    Script:
    ulong l_delay
    l_delay = 2000
    Sleep(l_delay)

    SndPlaySoundA( ) & WaveOutGetNumDevs( )
    이 함수들은 WAV파일을 파워빌더에서 플레이 한다. 파워빌더에는 이와 유사한 함수가 없다.  
    Global External Function:
    FUNCTION boolean SndPlaySoundA(string wavfile, uint flag) LIBRARY "WINMM.DLL"
    FUNCTION uint WaveOutGetNumDevs() LIBRARY "WINMM.DLL"

    Script:
    int    lui_NumDevs, l_mode
    string ls_file

    l_mode  = 0
    ls_file = string(c:\windows\media\chimes.wav)
    lui_NumDevs = WaveOutGetNumDevs()
    IF lui_NumDevs > 0 THEN
       SndPlaySoundA(ls_file, l_mode)
    END IF

    SwapMouseButton( )

    이 함수는 마우스의 오른쪽 버튼과 왼쪽 버튼을 서로 바꾸는 일을 하며 파워빌더에는 이와 유사한 함수는 없다. 마우스의 일반(Normal) 상태를 return하기 위해 이 함수는 다시 호출되어야 한다.  
    Global External Function:
    FUNCTION boolean SwapMouseButton(boolean var) LIBRARY "User32.dll"

    Script:
    boolean rtn, l_mouse

    rtn = SwapMouseButton(l_mouse)
    If l_mouse = true Then
       MessageBox("Change Made","Right button on Left Side")
    Else
       MessageBox("Change Made","Right button on Right Side")
    End If

    WinExec( )
    이 함수는 주어진 파일명(파일의 경로 포함)을 O/S 트리거에게 전달하며 O/S트리거는 주어진 파일을 실행한후 그 결과를 Return한다. 파워빌더에서는 RUN() 함수를 사용하면 된다.(i.e. Run("c:\windows\calc.exe")  
    Global External Function:
    FUNCTION uint WinExec(ref string filename, uint wstyle) LIBRARY "kernel32.dll"

    Script:
    string ls_filename
    uint rtn, wstyle

    ls_filename = "c:\windows\calc.exe"
    style = 1
    tn = WinExec(ls_filename, wstyle)
    Messagebox("Return Code", string(rtn))

Designed by Tistory.