2


1

PHPからwinapi関数を呼び出す方法は?

1)PHPからwinapi関数を呼び出す方法は? + 2)dllファイルをロードし、そこから関数を呼び出す方法

プラットフォーム:ms windows、php5

php_w32api拡張モジュールは使用できません。

たぶん、COMオブジェクトを使用した解決策はありますか?

4 Answer


2


拡張機能をインストールできない場合、唯一の解決策は、コマンドライン引数を取り、呼び出しを行い、結果を出力する独自のコンソールアプリをコンパイルすることだと思います。 その後、phpスクリプトから実行できます。 それほど効率的ではありません!

編集:GetCurrentThreadIdを呼び出したいので、このテクニックはあまり役に立ちません! 運が悪いと思いますが、http://php.net/zend_thread_id [zend_thread_id]をチェックしてください。おそらくその戻り値は実際にはWindowsスレッドIDです。ソースを確認して確認する必要があります。 getmypidもありますが、スレッドIDではなくプロセスIDを取得することはほぼ確実です。


1


あなたは統計に言及しました。 試してください…​

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

APIを獲得するための代替案に対する私の答えは落胆するかもしれませんが、ここではそれが…​

Winbinderは、GUIを作成する機能を提供するだけでなく、dllをロードして操作する機能を備えています。 最新のPHPパッケージ全体を実装するのではなく、最新のベアボーン、単一のdll拡張ファイルへのリンクをフォーラムで確認する必要があります。 注-彼らのウェブサイトは最近更新されていません。いくつかのバグと安定性の問題があり、関数名はドキュメントと異なる場合があります。

http://www.php.net/manual/en/class.com.php [COM()]は、あなたを近づけますが、それでも十分ではありません。 PHP / COMの操作については、http://www.tuxradar.com/practicalphp/14/0/0 [このtuxradar.comの記事]を参照してください。 それでも、PHPは、vbscriptホスト、MS Officeアプリなど、いくつかの典型的なcomインターフェース以外のものを処理できません。

http://www.php.net/manual/en/class.dotnet.php [DOTNET()]を使用すると、さらに先に進むことができます。 このトピックについては、http://www.peachpit.com/articles/article.aspx?p = 27291 [このpeachpit.comの記事]を参照してください。 私がwin apiにフックすることを正確に言っているわけではありませんが、これにより、より多くの.netクラスとメソッドを「何百」も操作できるようになります。 .netフレームワークに付属している標準クラスライブラリのドキュメントについては、http://msdn.microsoft.com/en-us/library/ms229335.aspx [msdn]を参照してください。 PHPのDOTNETはCOMに便乗することに注意してください。ライブラリの作成者がライブラリでcom機能を明示的に有効にしない限り(ほとんどの場合は無効)、使用できません。 また、このDOTNETクラスは非常に限定的で成熟していないようです。 VBの.netおよびcomライブラリのインポートおよび操作のドラッグアンドドロップ機能と比較して、PHPは実質的に機能が損なわれているため、ずさんな回避策の考案に多くの時間を費やすことになります。 たとえば、PHPでインタラクティブなWindowsフォームを作成する場合、 `$ form_object→ Controls→ Add($ button_object)`を期待どおりに実行できませんが、 `$ button_object→ Parent = $ form_object`を実行できます。

私は個人的にCOM()とDOTNET()を使用していくつかのcomおよび.netライブラリを実装しようとしましたが、ほんの一握りだけが働いていました…​ やっと。 私見、DOTNET()またはCOM()を使用してPHPスクリプトからフックできる独自の短いcom対応VBクラスを.netアセンブリまたはcomとして構築、コンパイル、および登録することをお勧めします。 PHPのマニュアルページと上記のpeachpit.comの記事で説明されています。 VBは他のdllを動的にインポートし、それらのクラスとメソッドをPHPスクリプトに公開できます。 PHPからの直接メソッドの検索は、この短いソリューションを構築するよりも時間がかかる場合があります。


1


Windows APIの基本機能の拡張機能を作成しました。

`php_pthreads`でさらに良くなります!

rarでは、ソースコードを「Visual Studio 2015」と「PHP 7.0.2 x64 TS」を実行するDLLに残します

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


0


COM extensionを確認してください。 いつでもPHP拡張機能を作成できます。PHP拡張機能には、任意のネイティブコードを含めることができます。