1) Как вызвать функции winapi из PHP?
2) Как загрузить любой DLL-файл и вызвать из него функции?
Платформа: ms windows, php5
Расширение php_w32api не доступно.
Может быть, есть решение с использованием COM-объектов?
Вы упомянули статистику. пытаться…
$ wmi_call = "wmic process where \" name like '% php%' \ "list statistics"; система ($ wmi_call, $ output); var_dump ($ выход);
Мой ответ на альтернативы выиграть api может быть унылым, но здесь он идет …
Winbinder , а также предоставляет функции для создания графического интерфейса пользователя, он имеет функции загрузки и работы с dll. Вам нужно будет проверить свои форумы на наличие ссылок на самые последние голые кости, один файл расширения dll, а не на реализацию их полностью устаревшего пакета PHP. Примечание. Их веб-сайт не был недавно обновлен, есть некоторые ошибки и проблемы стабильности, а имена функций иногда отличаются от их документации.
COM () поможет вам приблизиться, но все же недостаточно далеко. См. Статью tuxradar.com о работе с PHP / COM. Тем не менее, PHP не может обрабатывать много других, кроме нескольких типичных COM-интерфейсов, таких как vbscript-хост, приложения для MS-приложений и т. Д.
DOTNET () доставит вас еще дальше. Смотрите эту статью peachpit.com по этой теме. Не совсем то, что я называю подключением к win api, но это позволит вам работать с «сотнями» больше .net-классов и методов. См. Msdn для документации по стандартным библиотекам классов, которые входят в структуру .net. Обратите внимание, что DOTNET от PHP выгружает COM, и если авторы библиотеки явно не разрешают ком-возможности в своей библиотеке, чего больше всего нет, вы не сможете ее использовать. Кроме того, этот класс DOTNET кажется очень ограниченным и не зрелым. По сравнению с виртуальными возможностями VB по импорту и работе с библиотеками .net и com, PHP практически искалечен, поэтому вы потратите много времени на разработку неаккуратных рабочих процессов. Например, при создании интерактивной формы Windows на PHP вы не можете делать $form_object->Controls->Add($button_object)
как и следовало ожидать, но вы можете сделать $button_object->Parent = $form_object
.
Я лично пытался реализовать несколько библиотек com и .net, используя COM () и DOTNET (), и только небольшая работала … едва ли. IMHO, я бы рекомендовал создавать, компилировать и регистрироваться как сборку .net или создавать собственный короткий VB-класс, который можно подключить к вашему скрипту PHP, используя DOTNET () или COM (). Страницы руководства PHP и связанная выше статья peachpit.com объяснят. VB может динамически импортировать другие DLL и подвергать свои классы и методы вашему скрипту PHP. Поиск метода direct-from-PHP может занять больше времени, чем создание этого короткого решения.
Если вы не можете установить расширение, я думаю, что единственным решением является компиляция собственного консольного приложения, которое принимает аргументы командной строки, выполняет вызов и выводит результат. Затем вы можете выполнить его из своего php-скрипта. Не очень эффективно!
Изменить : поскольку вы хотите вызвать GetCurrentThreadId, этот метод не будет иметь большого смысла! Я думаю, вам не повезло, но проверьте zend_thread_id – возможно, возвращаемое значение на самом деле является идентификатором потока Windows – вам нужно проверить источник, чтобы быть уверенным. Также есть getmypid, но вы почти наверняка получите идентификатор процесса, а не идентификатор потока.
Проверьте расширение COM . Вы всегда можете написать расширение PHP, в котором вы можете включить любой собственный код.
Я создал расширение для основных функций 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');