js-ctypes 学習:KWF_list 関数

2017-03-25 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
前(2017-03-24)の記事「js-ctypes 学習:コールバック処理」で、
コールバック処理コード
及び、
typedefに相当することや関数の別名定義
を学習した。

題材が、'EnumWindows' だったので、・・・・・

昨年(2016-08-01)の記事「KWF (kami's Window Functions) モジュール」で書いた、
“KWF.lua”モジュールの“KWF.List()”関数相当品を作ってみた。
ほぼ、1体1対応のコードで作れた:
/***** CB_EnumWin_KWF.js *****/
var lib = ctypes.open( 'user32.dll' );

var DWORD = ctypes.uint32_t; var Int32 = ctypes.int32_t;
var HANDLE = ctypes.size_t; var BOOL = ctypes.bool;
var LPARAM = ctypes.size_t; var LPTSTR = ctypes.jschar.ptr;
var CBABI = ctypes.stdcall_abi; var WinABI = ctypes.winapi_abi;
var ArrayT = ctypes.ArrayType; var Cast = ctypes.cast;
/// -----------------------------

var CB_EnumWin = ctypes.FunctionType( CBABI, BOOL, [ HANDLE, LPARAM ] );
var EnumWindows = lib.declare( 'EnumWindows', WinABI, BOOL, CB_EnumWin.ptr, LPARAM );

var IsWindowVisible = lib.declare( 'IsWindowVisible', WinABI, BOOL, HANDLE );
var GetWindowLongA = lib.declare( 'GetWindowLongA', WinABI, Int32, HANDLE, Int32 );
var GetWindowTextW = lib.declare( 'GetWindowTextW', WinABI, Int32, HANDLE, LPTSTR, Int32 );
var GetWindowThreadProcessId = lib.declare('GetWindowThreadProcessId', WinABI, DWORD,
HANDLE, DWORD.ptr );
// ------- 以上宣言部 、以下が関数 -----
function KWF_List(){
var Wcnt = 0; var pIDT = new Array();
var PID = new DWORD; var wnd = LPARAM(0);
var Buf = new new ArrayT( ctypes.jschar, 256 );

var CB_Proc = function( hwnd, l ){
if( IsWindowVisible( hwnd ) ){ // 先ずは、これで絞る。
var h = GetWindowLongA( hwnd, -8 ); // -8 == GWL_HWNDPARENT : 親Windowハンドル
if( h == 0 ){ // 自分が親か?
if( GetWindowTextW( hwnd, Buf, 255 ) > 0 ){
Txt = Buf.readString();
var thr = GetWindowThreadProcessId( hwnd, PID.address() );
pIDT[Wcnt] = new Array( hwnd, Txt, PID.value, thr );
Wcnt++;
}
}
}
return true; //let enum continue till nothing to enum
}

EnumWindows( CB_EnumWin.ptr( CB_Proc ), Cast( wnd.address(), LPARAM ) ); // これメイン
return pIDT;
}
/************* テスト・メイン *********/
var pIDT = KWF_List(); /* ここから開始 */
Wcnt = pIDT.length; print( Wcnt );
for( k=0; k var WinH=pIDT[k][0]; var Txt=pIDT[k][1]; var PID=pIDT[k][2]; var thrd=pIDT[k][3];
print( WinH.toString(16), PID, thrd, Txt );
}
lib.close();
var str = readline();
結果は、以上。
ここで、
テストしていて、
'GetWindowTextA' ではダメだったので 'GetWindowTextW' に代えた。
これでも、まだ日本語のテキストは正しく出ない???


本日はここまで。


SpiderMonkey ( JavaScript/js-ctypes ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170219
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク