php mian函数,PHP W32api 函数

用户评论:

sk89q (2007-09-27 23:14:41)

The only way I've been able to call Win32 API functions with PHP5 has been through COM and DynamicWrapper.

Get DynamicWrapper at:

http://ourworld.compuserve.com/homepages/Guenter_Born/

WSHBazaar/WSHDynaCall.htm

(remove new line)

Here's an example to play a beep sound with your computer speaker:

$com= newCOM("DynamicWrapper");$com->Register("KERNEL32.DLL","Beep","i=ll","f=s","r=l");$com->Beep(5000,100);?>

MagicalTux at FF dot st (2005-02-16 08:10:23)

Answer to the note posted by me at nullflux dot com (see below)

The Win32 API *does* work in other versions of PHP than between 4.2.0 and 4.2.3. However the documented functions are not available. You will have to use the "win32" class to access functions. For an example, read Philip Soeberg's post just below.

serdar_soydemir at hotmail dot com (2004-05-30 10:34:41)

It seems that this extension will be replaced by FFI extension in PHP5. FFI stands for "Foreign Function Interface" and it's not limited by Windows API, but also supports Linux APIs. You may reach this extension's website at http://pecl.php.net/package/ffi . For Windows, you may try this code from commandline php.exe:

dl("php_ffi.dll");$windows= newffi("[lib='user32.dll'] int MessageBoxA( int handle, char *text, char *caption, int type );");

echo$windows->MessageBoxA(0,"Message For You","Hello World",1);?>

chris at ramsoft dot biz (2004-05-18 11:46:15)

The win32 support appears to be pretty flaky in php. This of course is to be expected with an experimental extension. That being said, if you are having trouble using the win32 functionality you may want to look into creating a PHP extension instead.

We were having some problems interfacing PHP with a 3rd party dll. As such we created an extension which wraps the interface with the aforementioned dll. The solution was surprisingly quick and painless.

Because we use Delphi primarily we found the following extremely useful and easy to use. http://users.chello.be/ws36637/php4delphi.html#download

more info here:

http://php.us.themoes.org/manual/en/zend.creating.php

me at nullflux dot com (2004-04-20 04:27:56)

The w32api extension -does not- work on versions of php that are not between 4.2.0 and 4.2.3. This is mentioned on the individual function's manual pages, but not on the extension's main page. Perhaps I'm just missing something, but if you want to interact with the Win32 API via PHP you have to use an outdated version, or just not bother with it at all.

Philip Soeberg (2004-01-19 20:09:36)

In response to post by Jan Kleinsorge.

To get the proper windows system uptime, one should use the Performance Monitoring system... GetTickCount is limited to 49.7 days, as the result is a dword.

echo"Unable to load php_w32api.dll";

exit;

}$api= newwin32;$api->registerfunction("bool QueryPerformanceCounter (float &lpPerformanceCount) From kernel32.dll");$api->registerfunction("bool QueryPerformanceFrequency (float &lpPerformanceFrequency) From kernel32.dll");$api->QueryPerformanceCounter($a);$api->QueryPerformanceFrequency($b);$c=$a/$b;$days=floor($c/86400);

echogmstrftime("System uptime is$daysDays, %H Hr, %M Min, %S Sec
",$c);?>

The above snippet will return the true uptime for an unlimited time for a windows OS. (Disregarding the fact that windows needs reboot every 10 days or so :))

A tiny dange though is the lack of 64bit variable types in php.. (the "float &lpPerformanceCount" should be "long long &lpPerformanceCount") .. Nevertheless.. It works :)

Philip S.

Jan Kleinsorge (2004-01-02 17:55:19)

Or google for "win32.hlp". Almost every API-function is listed in there.

Sami Fouad (2003-12-12 21:33:49)

http://msdn.microsoft.com/library/ contains functions for use with this extension.

Beware! The menu system is very dense, and confusing at first if you don't know where your going.

Luckily for you I am going to add how to get there in this note. ;)

Windows Development > Development Guides > Windows API > Windows API Reference

Enjoy.

(2003-08-23 13:42:22)

The small, unofficial documentation is now available here http://wobster.mynnga.de/w32api.txt .

The old link from the post above is dead.

Note that the W32API doesn't seem to be under development anymore. E-Mails to the author stayed unanswered.

If you really have to use it, just some hints here: There are often problems concerning Apache webservers. This extension doesn't seem to work with mod_php.

I used the API on IIS5 with PHP as CGI. Additionally the IUSR_ (that's the user IIS runs php.exe by default) might need additional rights to be able to call certain API-functions.

silver_dragoon77 at hotmail dot com (2003-06-27 12:03:44)

hi

for phpgtk users, who might want to add some sound to their apps, here is the code, assuming ding.wav is in the script's directory

$api = new win32;

$api->registerfunction("long sndPlaySound (string a, int b) From winmm.dll");

$api->sndPlaySound("ding.wav", 0);

you can use the big win32.hlp file containing the win32 api reference to get some other multimedia functions

regards

wobble at gmx dot de (2003-03-31 13:09:35)

I played a bit around with the W32API. Here is some code that actually works with the current release of W32API.

The interface changed completely, so all documentation about this extension is out-dated. While the old release

just implemented "plain" functions, the current version offers a class to handle all the API-related operations.

Additionally, functions are now registered using a SQL-like language with a single string.

$api= newwin32;/*

BOOL GetUserName(

LPTSTR lpBuffer,    // address of name buffer

LPDWORD nSize       // address of size of name buffer

);

Returns the current thread's username

"&" passes argument as "refrence" not as "copy"

*/$api->registerfunction("long GetUserName (string &a, int &b) From advapi32.dll");/*

DWORD GetTickCount(VOID)

Returns the ms the OS is running

*/$api->registerfunction("long GetTickCount () From Kernel32.dll");$len=255;// set the length your variable should have$name=str_repeat("\0",$len);// prepare an empty stringif ($api->GetUserName($name,$len) ==0)

{

die("failed");

}

if (!($time=$api->GetTickCount()))

{

die("failed");

}

echo"Username:$name
\nSystemtime:$time
\n";?>

GOOD LUCK !!

Jan Kleinsorge

arunasphp at anm dot org (2002-08-06 01:32:11)

In order to use most (perhaps all?) of the win32 API while running with a web server you have to give the server service permission to interact with the desktop. This is especially noticeable with the given example, where the script will try to display message boxes on the server's display.

Keep in mind, however, that you should think hard about the consequences of letting a web server interact with your desktop, especially if you're not the only one using the web server.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值