<<English version
Ikar Home Center
Лекции о PowerBuilder

32 Bit - Windows API функции для PowerBuilder


SUMMARY: Список синтаксов PowerBuilder для вызова функций Windows API . Также содержит сценарии PowerBuilder, необходимые для вызова функций.
Document ID:44545Last Revised: 06/06/97
Topic:TroubleshootingDocument Type:TechNote
Product:PowerBuilderVersion:5; 6.0; 7.0
Platform:PCOperating System:Windows 95, Windows NT

Перевод:

Левчук Алексей

По заказу:

IkarHomeCenter


Document:

Arc GetCurrentDirectoryAMouse_Event
BeepGetCurrentThreadMoveToEx
BringWindowToTopGetCursorMoveWindow
ChordGetCursorPosPie
CloseHandleGetDCPolygon
CloseWindowGetKeyboardStatePostMessageA
CopyFileAGetKeyStateRectangle
CreateDirectoryAGetModuleHandleAReleaseCapture
DeleteFileAGetParentSetCapture
DeleteMenuGetPixelSetComputerNameA
DestroyWindowGetSystemTimeSetCurrentDirectoryA
DllRegisterServerGetSystemMenuSetCursorPos
EllipseGetSystemMetricsSetFocus
ExitWindowsExGetThreadPrioritySetKeyboardState
FatalExitGetUserNameASetPixel
FindWindowAGetWindowsDirectorySleep
FreeLibraryGlobalMemoryStatusSndPlaySoundA
GetBkColorLineToSwapMouseButton
GetCaptureLoadLibraryAWaveOutGetNumDevs
GetComputerNameAmciSendStringAWinExec
GetClassNameAMessageBoxA...
ADDITIONS:GetVolumnInformationA...

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( )
Хорда - область, ограниченная пересечением эллипса и части линии. Эта функция рисует хорду, основываясь на полученных координатах. В Power Builder не существует эквивалента этой функции.

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 = string(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("Return Code", 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
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))



Сайт управляется системой uCoz