Как вызывать функции winapi из PHP? - PullRequest
2 голосов
/ 01 июля 2010

1) Как вызывать функции winapi из PHP?2) Как загрузить любой файл DLL и вызвать из него функции?

Платформа: MS Windows, php5

Расширение php_w32api недоступно.

Возможно, есть решение с использованием COMобъекты?

Ответы [ 4 ]

2 голосов
/ 01 июля 2010

Если вы не можете установить расширение, то я думаю, что единственное решение - это скомпилировать ваше собственное консольное приложение, которое принимает аргументы командной строки, выполняет вызов и выводит результат.Затем вы можете выполнить его из своего PHP-скрипта.Не очень эффективно!

Редактировать : так как вы хотите вызвать GetCurrentThreadId, эта техника не будет иметь большого смысла!Я думаю, что вам не повезло, но посмотрите zend_thread_id - может быть, возвращаемое значение этого на самом деле является идентификатором потока Windows - вам нужно проверить источник, чтобы убедиться.Также есть getmypid , но вы почти наверняка получите идентификатор процесса, а не идентификатор потока.

1 голос
/ 25 февраля 2016

Я создал расширение для основных функций Windows API.

С php_pthreads становится еще лучше!

http://www.soft -test.com.ar / php_wapi.rar

http://windows.php.net/downloads/pecl/releases/pthreads/

в rar я оставляю исходный код в Visual Studio 2015 и DLL работает PHP 7.0.2 x64 TS

wapi_screenshot('image.bmp',100,100,50,50); path, left, top, width, height     
wapi_screenshot('image.bmp',0,0,0,0); path, fullscreen    
wapi_get_clipboard(); return clipboard string of windows    
wapi_set_clipboard("hello");    
wapi_mouse_event(MOUSE_LEFTDOWN,0,0,0,0); or LEFTUP, MIDDLEUP, ETC    
wapi_sendkeys("Hello World!{enter}");    
wapi_set_cursor_pos(100,255);    
wapi_get_cursor_pos(); return string "X;Y"    
wapi_get_key_state(VK_A);    
wapi_dialog('open');    
wapi_dialog('save');
1 голос
/ 08 июля 2010

Вы упомянули статистику. попробовать ...


$wmi_call = "wmic process where \"name like '%php%'\" list statistics";
system($wmi_call, $output);
var_dump($output);

Мой ответ на альтернативы выиграть API может быть обескураживающим, но здесь он идет ...

Winbinder , а также предоставляет функции для создания графического интерфейса, имеет функции для загрузки и работы с DLL. Вам нужно будет проверить их форумы на наличие ссылок на самые свежие файлы расширения dll, а не на реализацию всего своего устаревшего PHP-пакета. Обратите внимание - их веб-сайт не был недавно обновлен, есть некоторые ошибки и проблемы со стабильностью, а имена функций иногда отличаются от их документации.

COM () приблизит вас, но все же недостаточно. См. эту статью tuxradar.com о работе с PHP / COM. Тем не менее, PHP не может обрабатывать многое другое, кроме нескольких типичных com-интерфейсов, таких как хост vbscript, приложения MS Office и т. Д.

DOTNET () сделает вас еще дальше. См. эту статью peachpit.com на эту тему. Не совсем то, что я называю подключением к win api, но это позволит вам работать с «сотнями» других классов и методов .net. См. msdn для документации по стандартным библиотекам классов, которые поставляются с .net framework. Обратите внимание, что PHP DOTNET использует COM, и если авторы библиотек явно не включат функции com в своей библиотеке, а большинство из них этого не делают, вы не сможете ее использовать. Кроме того, этот класс DOTNET кажется очень ограниченным и не зрелым. По сравнению с практически перетаскиваемыми возможностями VB по импорту и работе с библиотеками .net и com, PHP практически поврежден, поэтому вы потратите много времени на разработку небрежных решений. Например, при создании интерактивной формы Windows в PHP вы не можете сделать $form_object->Controls->Add($button_object), как вы ожидаете, но вы можете сделать $button_object->Parent = $form_object.

Я лично пытался реализовать несколько библиотек com и .net с использованием COM () и DOTNET (), и только несколько работали ... едва. ИМХО, я бы порекомендовал собирать, компилировать и регистрировать как сборку .net или ком свой собственный короткий VB-класс с поддержкой com, который вы можете подключить из своего PHP-скрипта с помощью DOTNET () или COM (). Страницы справочника PHP и статья peachpit.com, ссылка на которую приведена выше, объяснят. VB может динамически импортировать другие DLL и предоставлять их классы и методы вашему PHP-скрипту. Поиск метода direct-from-PHP может занять больше времени, чем создание этого короткого решения.

0 голосов
/ 01 июля 2010

Проверьте расширение COM . Вы всегда можете написать расширение PHP, где вы можете включить любой собственный код по вашему желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...