|
||||||||||||||||||||||||||||||
|
32 Bit - Windows API функции для PowerBuilder
Document:
Далее представлен список синтаксов 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( ) Хорда - область, ограниченная пересечением эллипса и части линии. Эта функция рисует хорду, основываясь на полученных координатах. В 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 не существует эквивалента этой функции.
Последнее обновление: 11.08.2016 |
|
||||||||||||||||||||||||||||
(c)2002-2024 Ikar Ikar Home Center ICQ: 167220388 | ||||||||||||||||||||||||||||||
На сайте могут быть опубликованы рекламные материалы и ссылки. Всю ответственность за содержание рекламных материалов, текстов ссылок и контент рекламируемых сайтов несет рекламодатель. |