Уважаемый посетитель!
Так как в Вашем браузере запрещено использование JavaScript для web-страниц, меню сайта Вам не доступно.
Для навигации по сайту используйте пожалуйста карту сайта.

Сделать стартовой Добавить в избранное Обратная связь

партнеры

SQL.RU

Детский Дворик - Портал детских фотографий

ГавГав.Инфо - портал для собаководов-любителей и профессиональных кинологов

информация

реклама

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:

    32 Bit - Windows API функции для Power Builder
    Далее представлен список синтаксов 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 GetCurrentDirectoryA Mouse_Event
Beep GetCurrentThread MoveToEx
BringWindowToTop GetCursor MoveWindow
Chord GetCursorPos Pie
CloseHandle GetDC Polygon
CloseWindow GetKeyboardState PostMessageA
CopyFileA GetKeyState Rectangle
CreateDirectoryA GetModuleHandleA ReleaseCapture
DeleteFileA GetParent SetCapture
DeleteMenu GetPixel SetComputerNameA
DestroyWindow GetSystemTime SetCurrentDirectoryA
DllRegisterServer GetSystemMenu SetCursorPos
Ellipse GetSystemMetrics SetFocus
ExitWindowsEx GetThreadPriority SetKeyboardState
FatalExit GetUserNameA SetPixel
FindWindowA GetWindowsDirectory Sleep
FreeLibrary GlobalMemoryStatus SndPlaySoundA
GetBkColor LineTo SwapMouseButton
GetCapture LoadLibraryA WaveOutGetNumDevs
GetComputerNameA mciSendStringA WinExec
GetClassNameA MessageBoxA ...
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))



Последнее обновление: 11.08.2016
реклама
ссылки


Продвижение сайтов

Биржа ссылок

статистика

Яндекс цитирования

(c)2002-2024 Ikar
Ikar Home Center
ICQ: 167220388
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель.
hosted on pets-tree
.