如何从PHP调用winapi函数?

时间:2010-07-01 07:31:55

标签: php winapi

1)如何从PHP调用winapi函数?
2)如何加载任何dll文件并从中调用函数?

平台:ms windows,php5

php_w32api扩展名不可用。

也许有使用COM对象的解决方案?

4 个答案:

答案 0 :(得分:2)

如果您无法安装扩展程序,那么我认为唯一的解决方案是编译您自己的控制台应用程序,该应用程序接受命令行参数,进行调用并输出结果。然后,您可以从PHP脚本执行它。效率不高!

编辑:既然你想调用GetCurrentThreadId,这种技术就不会有多大用处!我认为你运气不好,但看看zend_thread_id - 也许它的返回值实际上是一个Windows线程ID - 你需要检查来源以确定。还有getmypid,但你几乎肯定会得到一个进程ID而不是它的线程ID。

答案 1 :(得分:1)

你提到了统计数据。尝试...


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

我对赢得api的替代方案的回答可能令人沮丧,但在这里...... [/ p>

Winbinder,以及提供创建GUI的功能,它具有加载和使用dll的功能。你必须在他们的论坛上查看最新的单机dll扩展文件的链接,而不是实现它们的整个过时的PHP软件包。注意 - 他们的网站最近没有更新,有一些错误和稳定性问题,功能名称有时与他们的文档不同。

COM()会让你更接近,但仍然不够远。有关使用PHP / COM的信息,请参阅this tuxradar.com article。尽管如此,除了一些典型的com接口之外,PHP还无法处理其他许多其他接口,例如vbscript主机,MS office应用程序等。

DOTNET()会让你更进一步。有关该主题,请参阅this peachpit.com article。不完全是我所谓的连接到win api,但这将允许你使用“数百”更多.net类和方法。有关.net框架附带的标准类库的文档,请参阅msdn。请注意,PHP的DOTNET背负着COM,除非库作者明确地在其库中启用了com功能 - 大多数都没有 - ,你不能使用它。此外,这个DOTNET类似乎非常有限而且不成熟。与VB导入和使用.net和com库的几乎拖放功能相比,PHP实际上已经瘫痪了,因此您将花费大量时间来设计草率的解决方案。例如,在PHP中创建交互式窗体时,您无法按照预期$form_object->Controls->Add($button_object)进行操作,但可以执行$button_object->Parent = $form_object

我个人尝试使用COM()和DOTNET()实现几个com和.net库,只有少数工作......几乎没有。恕我直言,我建议构建,编译和注册为.net程序集或com你自己的短com启用VB类,你可以使用DOTNET()或COM()从你的PHP脚本挂钩。 PHP手册页和上面链接的peachpit.com文章将解释。 VB可以动态导入其他dll,并将它们的类和方法暴露给PHP脚本。搜索直接来自PHP的方法可能比构建这个简短的解决方案花费更长的时间。

答案 2 :(得分:1)

我创建了Windows API基本功能的扩展。

import itertools as it # your code for reading cow data goes here for xx, yy in it.product(xcows, ycows): counts = [0,0,0,0] for x,y in cows: ew = 0 if x < xx else 2 ns = 0 if y < yy else 1 counts[ew + ns] += 1 mini = max(counts) # rest of you code goes here 变得更好!

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

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

在rar中,我将源代码保留在php_pthreads中,DLL运行Visual Studio 2015

PHP 7.0.2 x64 TS

答案 3 :(得分:0)

检查COM extension。您总是可以编写PHP扩展,您可以在其中包含您希望的任何本机代码。