;---------- ---------- ---------- ---------- ---------- ; 作成者のURL ---> http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- #include "user32.as" #include "shell32.as" #include "gdi32.as" #include "comctl32.as" ;#include "treeview.as" #packopt name "appview" #packopt runtime "hsp3c.hrt" ;---------- ---------- ---------- ---------- ---------*/ ; CreateWindowEX の dwStyle に指定する値 #define global TVS_HASBUTTONS 0x0001 ;「+」「-」表示 #define global TVS_HASLINES 0x0002 ;アイテムを線でつなぐ #define global TVS_LINESATROOT 0x0004 ;一番上のアイテムに線を付ける (必須:TVS_HASLINES) #define global TVS_EDITLABELS 0x0008 ;アイテムの文字を編集可 #define global TVS_DISABLEDRAGDROP 0x0010 ;TVN_BEGINDRAG を送らない #define global TVS_SHOWSELALWAYS 0x0020 ;常に選択表示 #define global TVS_RTLREADING 0x0040 ;ver4.70〜 #define global TVS_NOTOOLTIPS 0x0080 ;ver4.70〜 ツールチップなし #define global TVS_CHECKBOXES 0x0100 ;ver4.70〜 アイテムにチェックボックス付ける #define global TVS_TRACKSELECT 0x0200 ;ver4.70〜 マウスカーソルがアイテムの上に来たときに下線が付く #define global TVS_SINGLEEXPAND 0x0400 ;ver4.71〜 選択アイテムのみ展開 #define global TVS_INFOTIP 0x0800 ;ver4.71〜 TVN_GETINFOTIP を送り、ツールチップ情報を得る #define global TVS_FULLROWSELECT 0x1000 ;ver4.71〜 列全体を選択 (×TVS_HASLINES) #define global TVS_NOSCROLL 0x2000 ;ver4.71〜 スクロールバー非表示 #define global TVS_NONEVENHEIGHT 0x4000 ;ver4.71〜 個々のアイテムの高さを変更可 ;---------- ---------- ---------- ---------- ---------- ; 選択中のツリービューのハンドルを取得 #define global htreeview htree@m_treeview ; 選択中のアイテムのハンドルを取得 (TVGN_CARET) #define global treenow gettreeitem(0,$0009) #module m_treeview ;---------- ---------- ---------- ---------- ---------- ; ツリービューを作成 ;---------- ---------- ---------- ---------- ---------- #deffunc treeview int w, int h, int index, int sub ; exstyle = WS_EX_CLIENTEDGE ; style = ( WS_CHILD | WS_VISIBLE ) winobj "SysTreeView32","", $200, $50000000 | index, w, h, sub htree = objinfo(stat, 2) return ;---------- ---------- ---------- ---------- ---------- ; ツリービューにアイテム追加 ;---------- ---------- ---------- ---------- ---------- #deffunc treeadd str sdata, int index, int sub, int image if( htree == 0 ): return dim String, strlen(sdata)+1 : String = sdata ;TVINSERTSTRUCT構造体 ( $0023 = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE ) dim prm, 12 : prm = index, sub, $0023, 0,0,0, varptr(String), 0, image, image if( sub == -1 ): prm.1 = $FFFF0002 ;( TVM_INSERTITEM ) sendmsg htree, $1100, 0, varptr(prm) return ;---------- ---------- ---------- ---------- ---------- ; ツリービューのアイテムを取得 ;---------- ---------- ---------- ---------- ---------- #defcfunc treeget int index, int sub if( htree == 0 )||( sub < 1 )||( sub > 9 ): return -1 ;TVINSERTSTRUCT構造体 ( $007F = 全部指定 ) dim prm, 12 : prm = $007F, index if( sub == 4 ){ sdim String,260 : prm.4 = varptr(String),260 ;( TVM_GETITEM ) sendmsg htree, $110C, 0, varptr(prm) return String } ;( TVM_GETITEM ) sendmsg htree, $110C, 0, varptr(prm) return prm.sub ;---------- ---------- ---------- ---------- ---------- ; 選択中のアイテムハンドルの取得 ;---------- ---------- ---------- ---------- ---------- #defcfunc gettreeitem int index, int sub ;( TVM_GETNEXTITEM ) sendmsg htree, $110A, sub, index return stat ;---------- ---------- ---------- ---------- ---------- ; アイテムの削除 ( 全消し : index = $FFFF0000 ) ;---------- ---------- ---------- ---------- ---------- #deffunc treedel int index if( htree == 0 )||( index == 0 ): return ;( TVM_DELETEITEM ) sendmsg htree, $1101, 0, index return ;---------- ---------- ---------- ---------- ---------- #global #define GW_HWNDFIRST 0 #define GW_HWNDLAST 1 #define GW_HWNDNEXT 2;次のウインドウのハンドルを返す #define GW_HWNDPREV 3 #define GW_OWNER 4;親ウインドウのハンドルを返す #define GW_CHILD 5;ウインドウの最初の子ウインドウのハンドルを返す sdim list,1024 sdim file,1024 sdim class,1024 sdim tmp,1024 btnID = 0 objmode 0,1 : title "appview" objsize 200,24 pos 0, 0 : button gosub "再取得", *ButtonClick pos 200, 0 : button gosub "タイトル無しも取得", *ButtonClick pos 0, 24 // ツリービューの作成 treeview 320,480-24, TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT pos 320, 24 : mesbox list, 320, 480-24, 5 gosub *getFileList //======================================== *MainLoop if( treenow != treebfr ){ treebfr = treenow tmp = treeget(treebfr, 4) a = instr(tmp, 0, " ") if( a > 0 ): poke tmp, a, 0 hwndTarget = int("$"+tmp) //ウィンドウデータの取得 gosub *getFileData //親ウィンドウの取得 GetParent hwndTarget : Parent = "" if( stat != 0 ){ hParent = stat //ウィンドウクラスの取得 GetClassName hParent, varptr(tmp), 1024 class += "\n\n[親ウィンドウ]\n"+tmp+"("+hParent+")" } //これ、エラーがでます //if( class == "tooltips_class32" ){ // sendmsg hwndTarget, 0x040b, 1024, varptr(file) //} objprm 3, "[ハンドル]\n"+hwndTarget+"\n\n[クラス名]\n"+class+"\n\n[タイトル]\n"+file } wait 1 : goto *MainLoop //======================================== *ButtonClick btnID = stat ; アイテムの全削除 treedel $FFFF0000 gosub *getFileList return //======================================== *getFileList // 一番上のウィンドウのハンドルを取得 GetDesktopWindow : GetWindow stat, GW_CHILD : hwndTarget = stat repeat 999 //親ウィンドウの取得 GetWindow hwndTarget, GW_OWNER : hwndParent = stat if( hwndParent == 0 ){ //ウィンドウデータの取得 gosub *getFileData //ツリービューに追加 if( btnID == 1 )||( file != "" ){ treeadd strf("%08X 【", hwndTarget)+file+"】"+class, 0, -1 } } ; 次のウィンドウのハンドルを取得 GetWindow hwndTarget, GW_HWNDNEXT : if( stat == 0 ): break hwndTarget = stat loop treebfr = 0 return //======================================== *getFileData //ウィンドウクラスの取得 GetClassName hwndTarget, varptr(class), 1024 //ウィンドウタイトルの取得 GetWindowText hwndTarget, varptr(file), 1024 return //========================================