32 Bit - Windows API функции для PowerBuilder
SUMMARY: | Список синтаксов PowerBuilder для вызова функций Windows API . Также содержит сценарии PowerBuilder, необходимые для вызова функций. |
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 |
Перевод: | Левчук Алексей | По заказу: | IkarHomeCenter |
Document:
Эта функция обеспечивает доступ приложения к системному меню и меню окна для копирования или изменения. В PowerBuilder не существует эквивалента этой функции.
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("Возвращен код", string(m_handle))
GetSystemTime( )
Эта функция возвращает текущее системное время в виде структуры. В PowerBuilder не существует эквивалента этой функции.
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 = "Воскресенье"
CASE 2
l_day = "Понедельник"
CASE 3
l_day = "Вторник"
CASE 4
l_day = "Среда"
CASE 5
l_day = "Четверг"
CASE 6
l_day = "Пятница"
CASE 7
l_day = "Суббота"
END CHOOSE
Messagebox("Системное время:",l_date + " " + l_day + " " + l_time)
GetThreadPriority( )
Функция возвращает уровень приоритета для заданного процесса. Значение по умолчанию - 0, любое значение выше 0 означает более высокий уровень приоритета, что указывает на использование большего количество времени процессора. В PowerBuilder не существует эквивалента этой функции.
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("Приоритет текущего процесса", string(rtn))
GetSystemMetrics( )
Эта функция возвращает текущее разрешение экрана в пикселях. Помните, что эта функция чувствительна к регистру символов, поэтому удостоверьтесь, что объявили функцию, как "GetSystemMetrics", а не как "getsystemmetrics". В PowerBuilder не существует эквивалента этой функции.
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("Разрешение экрана", string(l_xx) + " , " + string(l_yy))
GetUserNameA( )
Эта функция возвращает имя текущего пользователя. Убедитесь, что вы выделили достаточно места для строки, иначе Вы можете получить GPF при выходе из PowerBuilder. В PowerBuilder не существует эквивалента этой функции.
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", "Имя пользователя = " + string(ls_username))
GetVolumnInformationA( )
Эта функция возвращает информацию о жестком диске.
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( )
Функция возвращает директорию установки Windows. Убедитесь, что вы выделили достаточно места для строки, иначе Вы можете получить GPF при выходе из PowerBuilder. В PowerBuilder не существует эквивалента этой функции.
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("Директория установки Windows ", windir)
GlobalMemoryStatus( )
Функция возвращает всю информацию, относящуюся к оперативной и виртуальной памяти. Информация возвращается в виде структуры. В PowerBuilder не существует эквивалента этой функции.
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("Память", string(sysmem.m_length))
Messagebox("Памяти занято", string(sysmem.m_loaded))
Messagebox("Всего физической памяти", string(sysmem.m_totalphys))
Messagebox("Всего доступно памяти", string(sysmem.m_availphys))
Messagebox("Размер файла подкачки", string(sysmem.m_totalpagefile))
Messagebox("Доступно в файле подкачки", string(sysmem.m_availpagefile))
Messagebox("Всего виртуальной памяти", string(sysmem.m_totalvirtual))
Messagebox("Доступно виртуальной памяти", string(sysmem.m_availvirtual))
LoadLibraryA( )
Эта функция загружает заданную DLL в оперативную память. Функция ограничена вызовом только 32-битных dll. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION ulong LoadLibraryA(string modname) LIBRARY "Kernel32.dll"
Script:
ulong modhandle
modhandle = LoadLibraryA("c:\windows\mydll.dll") // Путь не обязателен, если он есть в одной из переменных DOS.
If modhandle > 0 Then
MessageBox("Возврашен код", "Успешная загрузка -> хэндл = " + string(modhandle))
else
MessageBox("Результат","Невозможно загрузить модуль")
end if
mciSendStringA( )
Эта функция запускает файл типа AVI путем вызова библиотеки "winmm.dll". Вызов этой API довольно сложен и не имеет эквивалента в PowerBuilder.
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" в PowerBuilder.
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 = "Это окно сообщения через API"
title1 = "API сообщение"
style1 = 0
rtn = MessageBoxA(handle1,text1,title1,style1)
Mouse_Event( )
Эта функция позволяет перемещать указатель мыши, активизировать кнопки мыши т.е. делать все, что пользователь может сделать с мышью. Приведенный сценарий перемещает указатель мыши на 80 пикселей влево и на 50 пикселей вверх. Структура заполняется последними координатами указателя. В PowerBuilder не существует эквивалента этой функции.
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 = ничего не делать, 7 = щелчок левой кнопкой, 25 = щелчок правой кнопкой
mouse_event(lflag,-80,-50,0,0)
MoveToEx( ) & LineTo( )
Функция MoveToEx перемещает курсор согласно полученным координатам, предыдущая позиция курсора помещается в заданную структуру. Функция LineTo рисует линию, начиная с текущего положения курсора и заканчивая переданным ей координатам. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция перемещает и/или изменяет размер заданного окна, основываясь на полученных координатах. Того же эффекта можно добиться, изменив свойства окна X, Y, Height и Width в 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("Возвращен код",string(rtn))
Pie( )
Эта функция рисует диаграмму на основе полученных координат. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция рисует многоугольник на основе полученных координат. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION boolean Polygon(hdc, ref struct poly poly2, int cnt) LIBRARY "Gdi32.dll"
Structure: (Poly)
long xpos[5], long ypos[5] //Размер массива пропорционален числу сторон многоугольника.
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( )
Эта функция отправляет сообщение (например, минимизировать или закрыть) в очередь сообщений, ассоциированной с процессом, созданным определенным окном. Функция завершается без ожидания завершения процессом заданного действия. В PowerBuilder не существует эквивалента этой функции. За дополнительной информацией о кодах для этой функции обратитесь в систему справки 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 = минимизировать, 61488 = развернуть, 61728 = нормальное состояние
Rectangle( )
Эта функция рисует прямоугольник, основываясь на полученных координатах. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция отправляет сообщение в очередь сообщений, ассоциированной с процессом, созданным определенным окном. Функция не возвращает значение до тех пор, пока процесс не обработает сообщение. В PowerBuilder не существует эквивалента этой функции.
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( )
Эти функции работают непосредственно друг с другом. Функция SetCapture блокирует управление мышью, пока функция ReleaseCapture( ) не будет вызвана. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция изменяет имя компьютера на заданную строку. В PowerBuilder не существует эквивалента этой функции.
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("Имя компьютера изменено на 'PowerBuilder'", "Для учета изменений необходима перезагрузка.")
else
MessageBox("SetComputerName", "Сбой")
end if
SetCurrentDirectoryA( )
Эта функция изменяет текущую директорию, на которую ссылается ОС. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция изменяет фокус объекта или окна, хэндл которого получает в качестве параметра. В PowerBuilder эквивалентом является конструкция <Object>.SetFocus( ), но она ограничена только собственными объектами PowerBuilder.
Global External Function:
SUBROUTINE SetFocus(long objhandle) LIBRARY "User32.dll"
Script:
SetFocus(handle(sle_1)) // Эта функция получает хэндл из PB.
SetThreadPriority( )
Эта функция задает уровень приоритета заданного процесса. Значение по умолчанию - ноль, любое значение выше нуля позволит процессу занять большее количество процессорного времени. При задании слишком высокого уровня приоритета может нарушиться работы мыши. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция заставляет операционную систему игнорировать заданный процесс заданное количество миллисекунд. Экран не будет перерисовываться, пока будет активна функция Sleep. Аналогично вызову конструкции for-next из PowerBuilder.
Global External Function:
SUBROUTINE Sleep(ulong milli) LIBRARY "Kernel32.dll"
Script:
ulong l_delay
l_delay = 2000
Sleep(l_delay)
SndPlaySoundA( ) & WaveOutGetNumDevs()
Эти функции проигрывают файл типа WAV из PowerBuilder. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция меняет ролями кнопки мыши, делая левую кнопку правой и наоборот. Функция должна быть вызвана повторно для восстановления нормально работы мыши. Эта отличная API для использования на компьютерах коллег :-). В PowerBuilder не существует эквивалента этой функции.
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("Изменения сделаны","Правая кнопка с левой стороны")
Else
MessageBox("Изменения сделаны","Правая кнопка с правой стороны")
End If
WinExec( )
Эта функция передает ОС имя файла и путь и инициирует запуск этого файла. Эквивалентом в PowerBuilder является функция RUN. например: 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("Возвращен код", string(rtn))