CVII. W32api functions
This extension is a generic extension API to DLLs. This was originally
written to allow access to the Win32 API from PHP, although you can also
access other functions exported via other DLLs.
Currently supported types are generic PHP types (strings, booleans, floats,
integers and nulls) and types you define with w32api_deftype().
This extension is
EXPERIMENTAL. The behaviour of this extension --
including the names of its functions and anything else documented
about this extension -- may change without notice in a future release of PHP.
Use this extension at your own risk.
This extension will only work on Windows systems.
There is no installation needed to use these
functions; they are part of the PHP core.
This extension has no configuration directives defined in php.ini.
This extension defines one resource type, used for user defined types.
The name of this resource is "dynaparm".
The constants below are defined by this extension, and
will only be available when the extension has either
been compiled into PHP or dynamically loaded at runtime.
This example gets the amount of time the system has been running and
displays it in a message box.
Example 1. Get the uptime and display it in a message box
// Define constants needed, taken from
// Visual Studio/Tools/Winapi/WIN32API.txt
// Load the extension in
// Register the GetTickCount function from kernel32.dll
// Register the MessageBoxA function from User32.dll
// Get uptime information
$ticks = GetTickCount();
// Convert it to a nicely displayable text
$secs = floor($ticks / 1000);
$mins = floor($secs / 60);
$hours = floor($mins / 60);
$str = sprintf("You have been using your computer for:".
"\r\n %d Milliseconds, or \r\n %d Seconds".
"or \r\n %d mins or\r\n %d hours %d mins.",
$mins - ($hours*60));
// Display a message box with only an OK button and the uptime text
add a note
User Contributed Notes
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_<hostname> (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
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");
you can use the big win32.hlp file containing the win32 api reference to get some other multimedia functions
wobble at gmx dot de
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 = new win32;
$api->registerfunction("long GetUserName (string &a, int &b) From advapi32.dll");
$api->registerfunction("long GetTickCount () From Kernel32.dll");
$len = 255; $name = str_repeat("\0", $len); if ($api->GetUserName($name, $len) == 0)
if (!($time = $api->GetTickCount()))
echo "Username: $name<br>\nSystemtime: $time<br>\n";
GOOD LUCK !!
arunasphp at anm dot org
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.