32 Bit - Windows API функции для PowerBuilder
Источник
32 Bit - Windows API функции для PowerBuilder
Далее представлен список синтаксов Power
Builder для вызова функций Widows API. Также представлены сценарии Power
Builder, необходимые для вызова некоторых функций. Если Вам необходимы примеры
с использованием функций Windows API, файлы примеров в формате .pbl доступны
для скачивания с FTP-сервера Powersoft.
ПРИМЕЧАНИЕ: Любые функции, требующие значения NULL приведут к ошибке в версии 5.0.03 вследствие
особенностей обработки значений NULL этой версией PB. Решением проблемы
является переход на версию 5.0.04 или откат к версии 5.0.02 или более
ранней.
Представленные API функции - только часть из множества
доступных функций Windows API. Для получения более полного списка функций API,
Вы можете обратиться к справочному файлу Windows SDK, который называется
"win32.hlp" или "win32sdk.hlp" (в зависимости от установленного компилятора
SDK). Если у Вас установлен C++ Class Builder, то этот справочный файл также
был установлен. Статья #44648 может помочь Вам в вопросах объявления API
функций с помощью PowerScript.
Следующие API функции описаны в этом документе:
Arc( )
Это функция рисует дугу, согласно заданным координатам. Эквивалента в PowerBuilder нет.
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' - имя окна
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( )
Функция Beep заставляет систему издать звук с помощью системного динамика. Идентична функции Beep( ) в PowerBuilder.
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( )
Функция BringWindowToTop посылает сообщение заданному окну о необходимости активации и перемещения поверх всех окон. Эквивалентом в PowerBuilder является синтакс "<window>.bringtotop = true",
но функциональность ограничена только собственными окнами PowerBuilder.
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( )
Хорда - область, ограниченная пересечением эллипса и части линии. Эта функция рисует хорду, основываясь на
полученных координатах. В PowerBuilder не существует эквивалента этой функции.
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)
// Это можно объединить в одно выражение: 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( )
Функция CloseHandle освобождает хэндл открытого объекта. Ближайший эквивалент в PowerBuilder -
функция Destroy, но она может использоваться только с объектами, созданными PowerBuilder.
Global External Function:
FUNCTION boolean CloseHandle(ulong w_handle) LIBRARY "Kernel32.dll"
Script:
boolean rtn
ulong l_handle
string ls_wname
. . .
ls_wname = "<Заголовок окна>"
l_handle = FindWindowA(0,ls_wname) // Обычно вы уже знаете хэндл.
rtn = CloseHandle(l_handle)
CloseWindow( )
Эта функция не закрывает окно, как Вы могли подумать. Функция CloseWindow минимизирует заданное
окно. Ближайший эквивалент в PowerBuilder это команда WindowState, но она
ограничена только окнами PowerBuilder. Синтакс команды в PowerBuilder:
<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) // Используйте ТОЧНЫЙ заголовок.
rtn = CloseWindow(l_handle)
CopyFileA( )
Эта функция копирует фалы, принимая в качестве строковых аргументов путь к источнику и путь
назначения. Если параметр "flag" установлен в true, то существующие файлы не
будут переписаны, иначе все файлы с совпадающими именами в папке назначения
будут заменены новыми. В PowerBuilder не существует эквивалента этой функции.
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( )
Эта функция создает новую директорию в текущей директории, которая для PowerBuilder будет
'c:\pwrs\pb5i32', если Вы используете короткие имена. Второй аргумент
используется исключительно в WinNT и может быть пропущен в Win9x. В PowerBuilder
не существует эквивалента этой функции.
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("Создана новая директория.","Директория, созданная с помощью API находится в pwrs.")
else
MessageBox("CreateDirectory","Failed")
end if
DeleteFileA( )
Эта функция получает по ссылке полный путь к файлу и
удаляет этот файл. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION boolean DeleteFileA(ref string filename) LIBRARY "Kernel32.dll"
Script:
string l_file
boolean rtn
. . .
l_file = sle_to.Text
rtn = DeleteFileA(l_file)
MessageBox("DeleteFile",String(rtn))
DeleteMenu( )
Функция 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) // Сначала необходимо получить хэндл системного меню.
rtn = DeleteMenu(m_handle,1,0) // Второй аргумент ('1'), указывает на позицию меню.
Messagebox("Menu Handle",String(m_handle))
Messagebox("Return Code",String(rtn))
DestroyWindow( )
Эта функция посылает команду "Destroy" ("Уничтожить") заданному окну. Ближайший эквивалент в
PowerBuilder команда Close(<window>), но она ограничена только окнами PowerBuilder.
Global External Function:
FUNCTION boolean DestroyWindow(ulong w_handle) LIBRARY "User32.dll"
Script:
boolean rtn
ulong l_handle
. . .
Open(w_win2) // Открывает тестовое окно
l_handle = Handle(w_win2)
rtn = DestroyWindow(l_handle)
DllRegisterServer( )
Эта функция запускает OCX для саморегистрации в системе. Эта функция позволяет
приложению PowerBuilder динамически регистрировать компоненты OCX на компьютере
пользователя. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION long DllRegisterServer() LIBRARY "c:\windows\ocxname.ocx"
Script:
long ll_rtn
. . .
ll_rtn = DllRegisterServer()
//Примечание: Возвращаемое значение "0" скорее всего означает, что компонент уже
зарегистрирован.
Ellipse( )
Функция Ellipse рисует элипсоидный объект, руководствуясь переданным ей координатам. В PowerBuilder не
существует эквивалента этой функции.
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( )
Эта функция посылает команду завершения работы ОС Windows. Эта функция особенно
хороша для повышения защиты Вашего приложения. В PowerBuilder не существует
эквивалента этой функции.
Global External Function:
FUNCTION boolean ExitWindowsEx(uint dwReserved,uint uReserved) LIBRARY "User32.dll"
Script:
boolean rtn
rtn = ExitWindowsEx(0,0) // 0 приводит к немедленному завершения работы.
FatalExit( )
Эта функция немедленно останавливает выполнение приложения. В результате объекты не закрываются должным
образом и остаются в памяти. Эта функция приведет к GPF (Ошибка защиты Windows,
General Protection Failure) в момент запуска и Вы будете вынуждены перезагрузить
компьютер. Эта функция предназначается для отладки приложений, в других случаях
ее использование не рекомендуется. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
SUBROUTINE FatalExit(int exitcode) LIBRARY "Kernel32.dll"
Script:
int rtn
. . .
rtn = MessageBox("Вызов этой API приведет к GPF!","Вы уверены?",Exclamation!,YesNo!,2)
if rtn = 1 then
MessageBox("Последнее замечание!","Вы должны перезагрузить компьютер после вызова API!")
FatalExit(1)
end if
FindWindowA()
Эта функция возвращает хэндл любого окна, производя поиск по его названию. Самая распространенная ошибка при использовании этой
функции - вызов окна с помощью сохраненного имени вместо названия, которое
отображается в заголовке окна, например, "Microsoft Word - api32.doc" .
Эквивалентов в PowerBuilder является функция Handle(), но она ограничена только окна PowerBuilder.
Global External Function:
FUNCTION ulong FindWindowA(ulong classname,string windowname) LIBRARY "User32.dll"
Script:
ulong l_handle
string ls_wname
. . .
ls_wname = "<Window Title>" // например "File Manager" или "Numbers.txt - NotePad"
l_handle = FindWindowA(0,ls_wname)
FreeLibrary( )
Эта функция выгружает dll из оперативной памяти. Эта функция работает, как противоположность функции
LoadLibraryA( ). В PowerBuilder не существует эквивалента этой функции.
Предупреждение: Выгрузка dll, которая в данный момент используется, приведет к GPF.
Global External Function:
SUBROUTINE FreeLibrary(ulong libhandle) LIBRARY "Kernel32.dll"
Script:
ulong modhandle
. . .
modhandle = LoadLibrary("<32 bit dll filename>") // Это обычно используется в другом событии.
FreeLibrary(modhandle)
GetBkColor( )
Эта функция возвращает номер цвета заднего фона заданного окна. Эквивалентом в PowerBuilder будет следующий код:
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( )
Эта функция возвращает хэндл окна, который "захвачен" мышью. Помните, что имеется в виду именно
"захваченное" мышью окно, а не то окно, где находится курсор. Тем не менее эта
функция не делает ничего полезного (Возможно, Вы сами сможете придумать ей
достойное применение.) В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION ulong GetCapture() LIBRARY "User32.dll"
Script:
ulong l_handle
. . .
l_handle = GetCapture()
GetComputerNameA( )
Эта функция возвращает имя компьютера, как строку.
Убедитесь, что вы выделили достаточно места для строки, иначе Вы можете получить
GPF при выходе из PowerBuilder. В PowerBuilder не существует эквивалента этой функции.
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("Имя компьютера:",ls_compname)
GetClassNameA( )
Эта функция возвращает имя класса для любого объекта или окна, хэндл которого передается ей
в качестве параметра. Убедитесь, что вы выделили достаточно места для строки,
иначе Вы можете получить GPF при выходе из PowerBuilder. В PowerBuilder не
существует эквивалента этой функции.
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("Имя класса",l_class)
GetCurrentDirectoryA( )
Эта функция возвращает путь к текущей рабочей директории. Убедитесь, что вы выделили
достаточно места для строки, иначе Вы можете получить GPF при выходе из
PowerBuilder. В PowerBuilder не существует эквивалента этой функции.
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("Текущая директория:",ls_curdir)
GetCurrentThread( )
Эта функция возвращает хэндл текущего процесса. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION ulong GetCurrentThread() LIBRARY "Kernel32.dll"
Script:
ulong rtn
. . .
rtn = GetCurrentThread()
MessageBox("Хэндл текущего процесса",String(rtn))
GetCursor( )
Эта функция возвращает хэндл курсора. В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION ulong GetCursor() LIBRARY "User32.dll"
Script:
ulong l_cursor
. . .
l_cursor = GetCursor()
GetCursorPos( ) & SetCursorPos( )
Функция GetCursorPos возвращает координаты X и Y курсора в виде структуры.
Функция SetCursorPos перемещает курсор к заданным координатам. В
PowerBuilder не существует эквивалента этим функциям.
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( )
Эта функция возвращает контекст
устройства в определенном окне, которое задается хэндлом. Контекст устройства
необходим для вызова любых графических функций для окна. В PowerBuilder не
существует эквивалента этой функции.
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-представлении символов. Вторая функция
переводит клавиатуру в состояние, заданное в массиве. Нулевое значение означает,
что клавиша не нажата. В PowerBuilder не существует эквивалента этим
функциям.
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(ipkey)
//SetKeyboardState( )
rtn = SetKeyboardState(ipkey)
if rtn = FALSE then
Messagebox("Ошибка","Что-то пошло не так при загрузке в массив")
else
Messagebox("Удачно","Состояние клавиатуры загружено в буфер")
end if
GetKeyState( )
Эта функция возвращает текущее состояние определенной клавиши на клавиатуре, основываясь на
переданном функции ASCII-коде. Нулевое значение означает, что клавиша не нажата.
В PowerBuilder не существует эквивалента этой функции.
Global External Function:
FUNCTION int GetKeyState(integer VirtualKeycode) LIBRARY "User32.dll"
Script:
int rtn
. . .
rtn = GetKeyState(65) // 65 = A
if rtn = 0 then
MessageBox("Состояние клавиши","Буква 'A' не нажата!")
else
MessageBox("Состояние клавиши","Буква 'A' нажата!")
end if
GetModuleHandleA( )
Эта функция возвращает хэндл модуля или DLL, которые
находятся в данный момент в оперативной памяти. Функция FreeLibrary обычно
работает вместе с этой функцией при освобождении памяти от DLL на основе хэндла,
который возвращается функцией GetModuleHandleA. В PowerBuilder не существует
эквивалента этой функции.
Global External Function:
FUNCTION long GetModuleHandleA(string modname) LIBRARY "Kernel32.dll"
Script:
ulong rtn
. . .
rtn = GetModuleHandleA("User32.dll")
MessageBox("Возвращен код",String(rtn))
GetParent( )
Эта функция получает хэндл дочернего объекта и возвращает хэндл родительского для заданного
объекта. Функция PowerBuilder 'GetParent' полностью идентична. Синтакс PowerBuilder
функции: objectname.GetParent( )
Global External Function:
FUNCTION ulong GetParent(ulong hwnd) LIBRARY "User32.dll"
Script:
ulong l_handle,rtn
. . .
l_handle = Handle(cb_getparent) // Имя кнопки
rtn = GetParent(l_handle)
Messagebox("GetParent","Хэндл родителя = " + String(rtn) + " / Дочерний хэндл = " + String(l_handle))
GetPixel( ) &SetPixel( )
Первая функция возвращает цвет заданного пикселя.
Функция SetPixel меняет цвет пикселя на заданный. В PowerBuilder не существует
эквивалента этим функциям.
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("Позиция " + String(lx) + "," + String(ly),"Цвет = " + String(rtn))
SetPixel(l_device,lx,ly,0) // Это установит цвет пикселя lx, ly черным.
GetSystemMenu( )
Эта функция обеспечивает доступ приложения к системному меню и меню окна
для копирования или изменения. В 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 = 256
ulong lpFileSystemFlags
string lpFileSystemNameBuffer = Space(256)
ulong nFileSystemNameSize = 256
. . .
SetNull(lpVolumeSerialNumber)
SetNull(lpFileSystemFlags)
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))