32 Bit - Windows API Calls For PowerBuilder
32 Bit - Windows API Calls For PowerBuilder
32 Bit - Windows API Calls For PowerBuilder
The following information lists the PowerBuilder syntax for calling Windows API
functions. Also included is the PowerBuilder script needed to make the function call.
If you would like an example of these API calls the sample pbl is located on the
Powersoft FTP server. The file can be downloaded from:
NOTE: Any function that requires a NULL will fail in v5.0.03 due to a problem in the
way that version handles nulls. You'll want to move to v5.0.04 or go back to v5.0.02
or before.
These API calls are only a subset of all the API calls available. For a more complete
listing of API calls you can consult the windows SDK helpfile which is named either
win32.hlp or win32sdk.hlp(depending on what compiler the SDK has been installed
from). If you install the C++ Class Builder this help file will be installed for you.
Arc( )
This function draws an arc based on the coordinates the function receives. There is no
PowerBuilder equivalent.
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( )
The Beep function causes the system to make an internal beep sound. This is identical to
the PowerBuilder function Beep( ).
Script:
Boolean rtn
Long ll_freq, ll_dur
ll_freq = 500
ll_dur = 20
rtn = Beep(ll_freq, ll_dur)
BringWindowToTop( )
The BringWindowToTop function sends a message to the target window telling it to
come to the foreground. The PowerBuilder equivalent is limited to PowerBuilder
Windows only, the script is as follows: <window > .bringtotop = true
Script:
Boolean rtn
ulong l_handle
l_handle = handle(w_win2)
rtn = BringWindowToTop(l_handle)
Chord( )
A Chord is a region bounded by the intersection of an ellipse and a line segment. This
function draws a chord based on the coordinates the function receives. There are no
PowerBuilder equivalents.
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( )
The CloseHandle function releases an open object handle. The closest PowerBuilder
equivalent is the function Destroy, but it is only used with PowerBuilder created objects.
Script:
boolean rtn
ulong l_handle
string ls_wname
ls_wname = "<Window Title>"
l_handle = A(0, ls_wname) // Usually you would already have the handle.
rtn = CloseHandle(l_handle)
CloseWindow( )
This function does not close a window as one might think. CloseWindow minimizes the
window that is targeted. The closest PowerBuilder equivalent is the WindowState
command, but this is limited to PB windows only. The syntax in PowerBuilder is as
follows: <window>.WindowState = Minimized!
Global External Function:
FUNCTION boolean CloseWindow(ulong w_handle) LIBRARY "User32.dll"
Script:
boolean rtn
ulong l_handle
string ls_wname
ls_wname = "<Window Title>"
l_handle = FindWindowA(0, ls_wname) // Be sure to use the exact title of the window
you are targeting.
rtn = CloseWindow(l_handle)
CopyFileA( )
This function copies a file by taking the source and destination names as a string by
reference. If the flag is set to true the file will not overwrite an existing file, if set to false
it will overwrite an existing file. There is no PowerBuilder equivalent.
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( )
This function create a new directory folder under the current directory, which under
PowerBuilder would be 'c:\pwrs\pb5i32' if you installed shortnames. The second
argument is exclusively used by NT and can be ignored under Win95. There is no
PowerBuilder equivalent.
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( )
This function receives a string by reference containing a fully path qualified filename and
deletes that file. There is no PowerBuilder equivalent.
Script:
string l_file
boolean rtn
l_file = string(sle_to.text)
rtn = DeleteFileA(l_file)
MessageBox("DeleteFile", string(rtn))
DeleteMenu( )
The DeleteMenu function deletes an item from the specified menu. If the menu item
opens a menu or submenu, this function destroys the handle to the menu or submenu and
frees the memory used by the menu or submenu.
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( )
This function sends a destroy message to the targeted window. The closest PowerBuilder
equivalent is Close(<window>), but this is limited to PB windows only.
Script:
boolean rtn
ulong l_handle
open(w_win2) // Open a test window
l_handle = handle(w_win2)
rtn = DestroyWindow(l_handle)
DllRegisterServer( )
This function triggers an OCX to self-register. This function when called from the
constructor event of an application allows a PB application to dynamically register an
OCX on the machine it is run on. There is no PowerBuilder equivalent.
Script:
Long ll_rtn
ll_rtn = DllRegisterServer()
//Note: A return code of zero most likely means the OCX is already registered.
( )Ellipse
An Ellipse function draws a circular object based on the coordinates the function
receives. There is no PowerBuilder equivalent.
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( )
This function sends a call to the Windows OS telling it to shut down. This function is
especially good for increasing the security of your application. There is no PowerBuilder
equivalent.
Script:
boolean rtn
rtn = ExitWindowsEx(0,0) // Zero's tell it to shut down immediately.
FatalExit( )
This function abruptly stops an application from running. As a result, nothing gets closed
properly and objects are left hanging in memory. This function will produce a GPF the
moment it is called and you will need to reboot. FatalExit is meant to be used for
debugging purposes and is not recommended otherwise. There is no PowerBuilder
equivalent.
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( )
This function gets the handle any window that is called by name. A common pitfall is to
make a call with the window's save name rather than the name that appears in the title
bar, i.e. "Microsoft Word - api32.doc" . The PowerBuilder equivalent is the function
Handle( ), but it is limited to PB windows only.
Script:
ulong l_handle
string ls_wname
ls_wname = "<Window Title>" // i.e. "File Manager" or "Numbers.txt - NotePad"
l_handle = FindWindowA(0, ls_wname)
FreeLibrary( )
This function releases a dll from active memory. This function works in conjunction with
LoadLibraryA( ) function. There is no PowerBuilder equivalent. Warning: Unloading a
dll that is being used will cause a GPF.
Script:
ulong modhandle // This would usually be an instance variable
modhandle = LoadLibrary("<32 bit dll filename>") // This would usually be done in
another event.
FreeLibrary(modhandle)
GetBkColor( )
This function returns the background color reference number of the window targeted. The
PowerBuilder equivalent is as follows:
ulong l_color
l_color = w_main.BackColor
Script:
ulong l_handle, l_device, l_color
l_handle = handle(w_main)
l_device = GetDC(l_handle)
l_color = GetBkColor(l_device)
GetCapture( )
This function returns the handle of the window that has captured the mouse. Keep in
mind that the window receives mouse input regardless of where the cursor is positioned.
This function, however, doesn't appear to do anything at all. (Maybe you'll have more
luck with it.) There is no PowerBuilder equivalent.
Script:
ulong l_handle
l_handle = GetCapture( )
GetComputerNameA( )
This function returns the computer's name into a string by reference. Be sure to allocate
enough space for the string or you'll get a GPF when you exit PowerBuilder. There is no
PowerBuilder equivalent.
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( )
This function returns the class name of any object or window whose handle it receives.
Be sure to allocate enough space for the string or you'll get a GPF when you exit
PowerBuilder. There is no PowerBuilder equivalent to this function.
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( )
This function returns the current working directory into a string by reference. Be sure to
allocate enough space for the string or you'll get a GPF when you exit PowerBuilder.
There is no PowerBuilder equivalent.
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( )
This function returns the current thread's handle. There is no PowerBuilder equivalent.
Script:
ulong rtn
rtn = GetCurrentThread()
MessageBox("Current Thread Handle", string(rtn))
GetCursor( )
This function returns a handle of the cursor. There is no PowerBuilder equivalent.
Script:
ulong l_cursor
l_cursor = GetCursor( )
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( )
This function returns the device context of the targeted window's handle that it receives.
The device context is required if you wish to perform any graphical function calls. There
is no PowerBuilder equivalent.
Script:
ulong l_handle, l_device
l_handle = handle(w_main)
l_device = GetDC(l_handle)
MessageBox("Handle", string(l_device))
Script:
//GetKeyboardState( )
boolean rtn
integer ipkey[256]
rtn = GetKeyboardState(ipkey)
//SetKeyboardState( )
rtn = SetKeyboardState(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( )
This function returns the present state of a specific key on the keyboard based on that
key's ASCII representation. A zero value represents that the key is not pressed. There is
no PowerBuilder equivalent.
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( )
This function returns the handle of a module or dll that is in active memory. The function
FreeLibrary works directly with this function in releasing the dll from memory based on
the handle that this function returns. There is no PowerBuilder equivalent.
Script:
ulong rtn
rtn = GetModuleHandleA("User32.dll")
MessageBox("Return Code", string(rtn))
GetParent( )
This function receives the handle of a child and returns the handle of its parent. The
PowerBuilder function 'GetParent' is identical. The PB syntax is as follows:
objectname.GetParent( )
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.
GetSystemMenu( )
This function allows the application to access the system or window menu for copying
and modifying. There is no PowerBuilder equivalent.
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( )
This function returns the system time into a structure by reference. There is no
PowerBuilder equivalent.
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( )
This function returns the priority level of a given thread. The default value is zero and
anything higher would hold a higher priority thus receiving more CPU time. There is no
PowerBuilder equivalent.
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))
GetSystemMetrics( )
This function will provide the current resolution in pixels of the screen. It has been
observed that this particular function is cap sensitive. Be sure to exactly declare the
function as "GetSystemMetrics" and not "getsystemmetrics". There is no PowerBuilder
equivalent.
Script:
int l_xx, l_yy
l_xx = GetSystemMetrics(0)
l_yy = GetSystemMetrics(1)
Messagebox("Screen Resolution", string(l_xx) + " , " + string(l_yy))
GetUserNameA( )
This function returns the current users logon name. Be sure to allocate enough space for
the string or you'll get a GPF when you exit PowerBuilder. There is no PowerBuilder
equivalent.
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))
GetVolumnInformationA( )
This function returns information about the harddrive.
Script:
boolean rtn
string lprootpathname = "c:"
string lpVolumeNameBuffer = space(256)
ulong nVolumeNameSize = 256
ulong lpVolumeSerialNumber
ulong lpMaximumComponentLength
setnull(lpVolumeSerialNumber)
lpMaximumComponentLength = 256
ulong lpFileSystemFlags
setnull(lpFileSystemFlags)
string lpFileSystemNameBuffer = space(256)
ulong nFileSystemNameSize = 256
GetWindowsDirectoryA( )
This function returns the default windows directory into a string by reference. Be sure to
allocate enough space for the string or you'll get a GPF when you exit PowerBuilder.
There is no PowerBuilder equivalent.
GlobalMemoryStatus( )
This function returns all the information related to the computers present memory into a
structure by reference. There is no PowerBuilder equivalent.
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( )
This function loads a dll into active memory. The function is limited to 32 bit dll's and
there is no PowerBuilder equivalent.
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( )
This function runs an AVI type file by making calls to the library, "winmm.dll". This API
call is very complex and there is no PowerBuilder equivalent.
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( )
This function produces a messagebox. This is identical to the PowerBuilder
"messagebox" command.
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( )
This function has the ability of moving the mouse pointer, activating the mouse buttons,
and doing anything that the user can do with the mouse. The sample script will move the
mouse 80 pixels left and 50 pixels up. The structure is populated by the mouses previous
position. There is no PowerBuilder equivalent.
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)
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( )
This function moves and resizes the window based on the coordinates it receives. This
function has the same effect as changing a windows X, Y, Height and Width properties
from within PowerBuilder.
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( )
This function draws a pie chart based on the coordinates the function receives. There are
no PowerBuilder equivalents.
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( )
This function draws a polygon shape based on the coordinates the function receives.
There are no PowerBuilder equivalents.
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( )
This function posts a message (such as minimize or close) in the message queue
associated with the thread that created the specified window and then returns without
waiting for that thread to process the message. There is no PowerBuilder equivalent. For
more information on the codes associated with this function see the MSDN.
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( )
This function draws a rectangle based on the coordinates the function receives. There are
no PowerBuilder equivalents.
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( )
This function sends a message to the message queue associated with the thread that
created the specified window and doesn't return until that message is processed. There is
no PowerBuilder equivalent.
Script:
ulong l_handle
long rtn
l_handle = handle(w_main)
rtn = SendMessageA(l_handle,274,61728,0)
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( )
This function changes the computer's name to the string it receives by reference. There is
no PowerBuilder equivalent.
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( )
This function changes the current directory that the OS is pointing to. There is no
PowerBuilder equivalent.
Script:
boolean rtn
string l_dir
l_dir = "c:\My Documents"
rtn = SetCurrentDirectoryA(l_dir)
MessageBox("SetCurrentDirectory", string(rtn))
SetFocus( )
This function changes the focus to the object or window whose handle is given. The only
PowerBuilder equivalent is limited to PowerBuilder objects and the syntax is as follows:
<Object>.SetFocus( )
Script:
SetFocus(handle(sle_1)) // This function gets the handle from PB.
SetThreadPriority( )
This function sets the priority level of a given thread. The default value is zero and
anything higher would hold a higher priority thus receiving more CPU time. Don't set the
priority level too high or the mouse won't work. There is no PowerBuilder equivalent.
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( )
This function tells the OS to ignore the current thread for X number of milliseconds. The
screen will not be redrawn while this API call is active. This is the same as running a for-
next loop from within PowerBuilder.
Script:
ulong l_delay
l_delay = 2000
Sleep(l_delay)
Script:
uint 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( )
This function reverses the mouse buttons making the right button the left and visaversa.
The function needs to be called again to return the mouse to a normal state. This is a great
API to use on a collegues computer. There is no PowerBuilder equivalent.
WinExec( )
This function sends a filename and path to the OS triggering it to be run. The PB
equivalent is the function RUN. (i.e. Run("c:\windows\calc.exe")
Script:
string ls_filename
uint rtn, wstyle
ls_filename = "c:\windows\calc.exe"
wstyle = 1
rtn = WinExec(ls_filename, wstyle)
Messagebox("Return Code", string(rtn))