Intereting Posts
создание массива ассоциативного массива в jquery Aspect mock не перегружает метод в кодировании PHP лучший способ проверить, является ли строка пустой или нет Mysql получает последний идентификатор конкретной таблицы Создать поле ввода массива с построителем форм symfony2 Можете ли вы отключить () много переменных сразу в PHP? Как получить «имена полей» с помощью PHP ADOdb? Определение языка PHP Правила проверки формы кода CodeIgniter для флажка Как заставить PHP установить код состояния HTTP на 500 автоматически в случае каких-либо ошибок? (включая те, которые не могут обрабатываться пользователем) PHP Получить пользовательский ввод без необходимости нажатия клавиши возврата Как заменить двойные кавычки одиночными кавычками необычная тройная операция Игнорирование сообщения об ошибке сервера при использовании Yii CMemCache Symfony – значения Pasing от одной формы к другой

Как вызвать функции winapi из PHP?

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');