开发者

How to call winapi functions from PHP?

1) How to call winapi functions from PHP?

2) How to load any dll file and call functions from it?

Platform: ms windows, php5

php_w32api extension is no开发者_JAVA技巧t avalaible.

Maybe there is solution using COM objects?


You mentioned stats. try...


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

My answer for alternatives to win api may be disheartening, but here it goes...

Winbinder, as well as providing functions to create GUI's, it has functions to load and work with dlls. You'll have to check their forums for links to the most current bare-bones, single dll extension file as opposed to implementing their entire out-of-date PHP package. Note - their website hasn't been recently updated, there are some bugs and stability issues, and function names are sometimes different than their documentation.

COM() will get you closer, but still not far enough. See this tuxradar.com article on working with PHP/COM. Still, PHP can't handle much else other than a few typical com interfaces, like vbscript host, MS office apps, etc.

DOTNET() will get you even further. See this peachpit.com article on the topic. Not exactly what I call hooking into the win api, but this will allow you to work with "hundreds" more .net classes and methods. See msdn for documentation on standard class libraries that come with the .net framework. Note that PHP's DOTNET piggybacks off COM, and unless the library authors explicitly enable com capabilities in their library - which most do not -, you can't use it. Also, this DOTNET class seems very limited and not mature. Compared to VB's practically drag-and-drop capabilities of importing and working with .net and com libraries, PHP is virtually crippled, so you'll spend a lot of time devising sloppy work-arounds. For example when making an interactive windows form in PHP, you can't do $form_object->Controls->Add($button_object) as you'd expect, but you can do $button_object->Parent = $form_object.

I've personally tried implementing several com and .net libraries using COM() and DOTNET(), and only a handful worked... barely. IMHO, I'd recommend building, compiling, and registering as a .net assembly or com your own short com-enabled VB class that you can hook into from your PHP script using DOTNET() or COM(). The PHP manual pages and the the peachpit.com article linked above will explain. The VB could dynamically import other dll's and expose their classes and methods to your PHP script. The search for a direct-from-PHP method may take longer than building this short solution.


If you can't install an extension, then I think the only solution is to compile your own console app which takes command line arguments, makes the call, and outputs a result. You can then execute it from your php script. Not terribly efficient!

Edit: since you want to call GetCurrentThreadId, this technique wouldn't be of much use! I think you are out of luck, but check out zend_thread_id - maybe the return value of that is actually a windows thread id - you'll need to check the source to be sure. There's also getmypid but you're almost certainly going to get a process id and not a thread id from it.


I created an extension to the basic functions of the Windows API.

With php_pthreads goes even better!

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

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

in the rar I leave the source code in Visual Studio 2015 and DLL running 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');


Check the COM extension. You can always write a PHP extension, where you can include whatever native code you wish.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜