32 Bit - Windows API Calls for PowerBuilder
SUMMARY: | Lists the PowerBuilder syntax for calling Windows API functions. Also included is the PowerBuilder script needed to make the function calls. |
Document ID: | 44545 | Last Revised: | 06/06/97 |
Topic: | Troubleshooting | Document Type: | TechNote |
Product: | PowerBuilder | Version: | 5; 6.0; 7.0 |
Platform: | PC | Operating System: | Windows 95, Windows NT |
Document:
This function allows the application to access the system or window menu for copying and modifying. There is no PowerBuilder equivalent.
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( )
This function returns the system time into a structure by reference. There is no PowerBuilder equivalent.
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( )
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.
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))
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.
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))
GetVolumnInformationA( )
This function returns information about the harddrive.
Global External Function:
FUNCTION boolean GetVolumeInformation(ref string lpRootPathName,ref string lpVolumeNameBuffer,ulong nVolumeNameSize,ref ulong lpVolumeSerialNumber,ref ulong lpMaximumComponentLength,ref ulong lpFileSystemFlags,ref string lpFileSystemNameBuffer,ulong nFileSystemNameSize) Library "kernel32.dll"
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
rtn = GetVolumeInformationA(lpRootPathName, lpVolumeNameBuffer, nVolumeNameSize,&
lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags,&
lpFileSystemNameBuffer, nFileSystemNameSize)
sle_1.text = lprootpathname
sle_2.text = lpVolumeNameBuffer
sle_3.text = string(nVolumeNameSize)
sle_4.text = string(lpVolumeSerialNumber)
sle_5.text = string(lpMaximumComponentLength)
sle_6.text = string(lpFileSystemFlags)
sle_7.text = string(lpFileSystemNameBuffer)
sle_8.text = string(nFileSystemNameSize)
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.
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( )
This function returns all the information related to the computers present memory into a structure by reference. There is no PowerBuilder equivalent.
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( )
This function loads a dll into active memory. The function is limited to 32 bit dll's and there is no PowerBuilder equivalent.
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( )
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.
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( )
This function produces a messagebox. This is identical to the PowerBuilder "messagebox" command.
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( )
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.
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( )
The MoveToEx function moves the cursor to the coordinates it receives and the previous position is sent to a structure by reference. The LineTo function draws a line from the present location of the cursor to the coordinates it receives. There is no PowerBuilder equivalent.
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( )
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.
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( )
This function draws a pie chart based on the coordinates the function receives. There are no PowerBuilder equivalents.
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( )
This function draws a polygon shape based on the coordinates the function receives. There are no PowerBuilder equivalents.
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( )
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.
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( )
This function draws a rectangle based on the coordinates the function receives. There are no PowerBuilder equivalents.
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( )
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.
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( ) & ReleaseCapture( )
These functions works directly with each other. The SetCapture function locks control of the mouse until ReleaseCapture( ) is called. There is no PowerBuilder equivalent.
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( )
This function changes the computer's name to the string it receives by reference. There is no PowerBuilder equivalent.
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( )
This function changes the current directory that the OS is pointing to. There is no PowerBuilder equivalent.
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( )
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( )
Global External Function:
SUBROUTINE SetFocus(long objhandle) LIBRARY "User32.dll"
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.
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( )
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.
Global External Function:
SUBROUTINE Sleep(ulong milli) LIBRARY "Kernel32.dll"
Script:
ulong l_delay
l_delay = 2000
Sleep(l_delay)
SndPlaySoundA( ) & WaveOutGetNumDevs()
These functions run a WAV file from within PowerBuilder. There is no PB equivalent.
Global External Function:
FUNCTION boolean SndPlaySoundA(string wavfile, uint flag) LIBRARY "WINMM.DLL"
FUNCTION uint WaveOutGetNumDevs() LIBRARY "WINMM.DLL"
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.
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( )
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")
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"
wstyle = 1
rtn = WinExec(ls_filename, wstyle)
Messagebox("Return Code", string(rtn))