¾ðª¬À˵ø±±¨î¶µ¤]¬O¤@ºØµøµ¡¡A¦Ó¸Óµøµ¡¤º©Ò¥]§tªº¶µ¥Ø¬O¨ã¦³¶¥¼hªº¡C°Ñ¦Ò©³¤Uªº¹ï¸Ü²°¡AHDINFO2¡A¥¦¬O¥»³¹½d¨Ò¡A¦¹¹ï¸Ü²°¬O¥Ñ¥ªÃ䪺¡u¾ðª¬À˵ø±±¨î¶µ¡v»P¥kÃ䪺¡uÀRºA±±¨î¶µ¡v²Õ¦¨¡C¡u¾ðª¬À˵ø±±¨î¶µ¡v¤º¦³³\¦h¶µ¥Ø ( item )¡A³o¨Ç¶µ¥Ø¥i¥H¾Ö¦³¤U¤@¼hªº¶µ¥Ø¡A³oºØ¤U¤@¼hªº¶µ¥ØºÙ¬°¡u¤l¶µ¥Ø¡v( child item )¡A¤l¶µ¥Ø¬OªþÄÝ©ó¡u¤÷¶µ¥Ø¡v( parent item ) ¤§¤U¡C³Ì³»¼hªº¶µ¥Ø¡A¬O¨S¦³¡u¤÷¶µ¥Ø¡vªº¡AºÙ¬°¡u®Ú¶µ¥Ø¡v( root item )¡C¹³³oºØ¡A¬YÓ¶µ¥ØªþÄÝ©ó¥t¤@Ó¶µ¥Ø¡AºÙ¬°¶¥¼h©Ê¡A¦p¦P¾ð·F¨Ìªþ¾ð®Ú¡A¾ðªK¨Ìªþ¾ð·F¡C
¤W¹Ï¤¤¡A¡u¹q¸£¤¤ªºµwºÐ¡v´N¬O©Ò¿×ªº®Ú¶µ¥Ø¡A¨ä¤U¦³¤TÓ¤l¶µ¥Ø¡G¡u¹êÅéºÏºÐ 0¡v¡B¡u¹êÅéºÏºÐ 1¡v¡B¡u¹êÅéºÏºÐ 2¡v¡A³o¨Ç¡u¹êÅéºÏºÐ 0¡v¡B¡u¹êÅéºÏºÐ 1¡vµ¥ºÙ¬°¶µ¥Ø¦WºÙ©Î¼ÐÅÒ ( item label )¡C³o¤TÓ¤l¶µ¥Ø¤§¤U¤S¦U¦³¤l¶µ¥Ø¡A¹ï¡u¹q¸£¤¤ªºµwºÐ¡v¦Ó¨¥¡A´N¬O¡u®]¶µ¥Ø¡v¤F¡A¨Ò¦p¡u¹êÅéºÏºÐ 2¡v´N¦³¤@Ó¤l¶µ¥Ø¡AºÙ¬°¡uD:¡v¡A¬O¡u¹q¸£¤¤ªºµwºÐ¡vªº®]¶µ¥Ø¡C¦b¹w³]ªº±¡§Î¤U¡A¾ðª¬À˵øªº¶µ¥Ø«e¬O¨S¦³«ö¶s»P½u±ø¡AµLªk²M·¡ªºÅã¥Ü¶¥¼hÃö«Y¡A¤]µLªk±oª¾¬Y¶µ¥Ø¬O§_§t¤l¶µ¥Ø¡A¶·¥H·Æ¹«ÂùÀ»¡A¦pªG¯àÅã¥Ü¤U¤@¼hªº¤l¶µ¥Ø¤~¯àª¾¹D¨ä¹ê¸Ó¶µ¥Ø§t¦³¤l¶µ¥Ø¡C
¦ý¬O¡A°²¦p¾ðª¬À˵ø³]¦³ TVS_HASBUTTONS ·®æ¡A«h·|¦b¨CӨ㦳¤l¶µ¥Øªº¶µ¥Ø«e¥X²{©Î
«ö¶s¡A¤À§Oªí¥Ü¥¼®i¶} ( ¦U¤l¶µ¥Ø¦¬Ãl°_¨Ó ) ©Î¤w®i¶} ( §â¤l¶µ¥ØÅã¥Ü©ó¸Ó¶µ¥Ø©³¤U ) ª¬ºA¡F¨Ï¥ÎªÌ¤]¥i¥H¥H·Æ¹«³æÀ»³o¨âºØ«ö¶s¡A¥H®i¶}©Î¦¬Ãl¶µ¥Ø¡C¦ý¬O®Ú¶µ¥Ø«e¤£·|¦³«ö¶s¡A¦pªGn©ó®Ú¶µ¥Ø«eÅã¥Ü«ö¶s¡A¶·¥[¤W TVS_LINESATROOT ·®æ¡C¦pªG¸Ó¶µ¥Ø¨S¦³¤l¶µ¥Ø¡A´N¤£Åã¥Ü«ö¶s¡C°²¦p³]©w¤F TVS_HASLINES ·®æ¡A¨t²ÎÁÙ·|¥Hµê½u³s±µ¤÷¶µ¥Ø»P¤l¶µ¥Ø¡C³o¼Ë´NÅܦ¨¤W¹Ïªºµøµ¡¤F¡C
¦b¹w³]ªº±¡§Î¤U¡A¦pªG·Æ¹«´å¼Ð¦b¬YÓ¶µ¥Ø¤WªÅ¡A¨S«ö·Æ¹«¥ªÁä¡A¦Ó¸Ó¶µ¥Ø¦WºÙ¤S¶W¥Xµøµ¡½d³ò¡A¨º»ò¾ðª¬À˵ø·|¼u¥X¤@Ó¤u¨ã´£¥Ü ( tooltip ) Åã¥Ü§¹¾ãªº¶µ¥Ø¦WºÙ¡C³oÓ¤u¨ã´£¥Ü¤]¥s infotip¡A¥¦¬O¾ðª¬À˵øªº¤lµøµ¡¡Aµ{¦¡¥i¥H³]©w TVS_NOTOOLTIPS ·®æ¡A¸T¤îÅã¥Ü¤u¨ã´£¥Ü¡C¤]¥i¥H³B²z TVN_GETINFOTIP ³qª¾½X¡A³]©w¤u¨ã´£¥Üªº·®æ©Î¤å¦r¡C¤W¹Ï¤¤¡A¥H²H¶À¦â©³ªº®ð²yª¬ªºµøµ¡¡A´N¬O¤u¨ã´£¥Ü¡C
«Ø¥ß¾ðª¬À˵ø±±¨î¶µ¦³¨âºØ¤èªk¡G¤@¬O¦b¸ê·½´yzÀɤ¤ªº¹ï¸Ü²°±ªOùØ©w¸q¡F©ÎªÌ¬O¦bµ{¦¡¤¤©I¥s CreateWindowEx «Ø¥ß¡C¤£½×¬Oþ¤@ºØ¤èªk¡A©Ò¨Ï¥Îªºµøµ¡Ãþ§O³£¬O¡uSysTreeView32¡v¡A¨Ã¥Bn©I¥s InitCommonControls ©Î InitCommonControlsEx¡C¦p©³¤U¬O©I¥s CreateWindowEx «Ø¥ß¾ðª¬À˵ø±±¨î¶µ¡G
.CONST szClass DB "SysTreeView32",0 .CODE INVOKE CreateWindowEx,0,OFFSET szClass,0,WS_BORDER or WS_CHILD or WS_VISIBLE,\ 10,10,160,200,hWnd,0,hInstance,0 mov hTreeView,eax
©³¤U¬O¾ðª¬À˵øªº·®æ¡G
·®æ | »¡©ú |
TVS_CHECKBOXES | 4.70 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¦b¶µ¥Ø«eÅã¥ÜÀËÅç²°¡A¥i¨Ñ¨Ï¥ÎªÌ¤Ä¿ï¡A¦Ó¥B¥u¦³¾ðª¬À˵ø»P Image List ³sµ²«á¤~·|Åã¥ÜÀËÅç²°¡C§ó¸Ô²Óªº²Ó¸`°Ñ¦Ò MSDN¡C |
TVS_DISABLEDRAGDROP | ¤£µo°e TVN_BEGINDRAG µ¹¾ðª¬À˵ø±±¨î¶µ¡A¦]¦¹µLªk¥H·Æ¹«©ì¦²¶µ¥Ø¡C |
TVS_EDITLABELS | ¤¹³\´N¦a½s¿è¶µ¥Ø¦WºÙ |
TVS_FULLROWSELECT | ¥u¦³ 4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¨Ï¥ÎªÌ¿ï¨ú¶µ¥Ø®É¡A¾ã¦C³£·|ÅÜ°ª«G«×Åã¥Ü¡A¤£¯à»P TVS_HASLINES ·f°t¨Ï¥Î |
TVS_HASBUTTONS | Åã¥Ü![]() ![]() |
TVS_HASLINES | ¥Hµê½u¬q§â¤÷¶µ¥Ø»P¤l¶µ¥Ø³s±µ¡Aªí¥Ü¶¥¼hÃö«Y |
TVS_INFOTIP | 4.70 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¨ã¦³¦¹·®æ®É¡A·í·Æ¹«²¾¹L¶µ¥Ø¤WªÅ®É¡A¾ðª¬À˵ø·|µo°e TVN_GETINFOTIP ³qª¾½Xµ¹¤÷µøµ¡¡C |
TVS_LINESATROOT | ¥Hµê½u³s±µ®Ú¶µ¥Ø¡C¦pªG¨S«ü©w TVS_HASLINES¡A¨t²Î·|©¿²¤¦¹·®æ¡C |
TVS_NOHSCROLL | 5.80 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¦¹·®æ¨Ï¾ðª¬À˵ø¤£Åã¥Ü¤ô¥±²¶b |
TVS_NONEVENHEIGHT | ¶µ¥Ø¹w³]°ª«×¬°°¸¼ÆÈ¡A³]©w¦¹·®æ«á¥i¥Hµo¥X TVM_SETITEMHEIGHT ³]©w©_¼ÆȪº¶µ¥Ø°ª«×¡A4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡C |
TVS_NOSCROLL | 4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¤£Åã¥Ü¤ô¥±²¶b¤Î««ª½±²¶b |
TVS_NOTOOLTIPS | 4.70 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¸T¥Î¤u¨ã´£¥Ü ( ¦b¾ðª¬À˵ø±±¥ó«Ø¥ßªº¦P®É¡A¤]·|«Ø¥ß¤@Ó¤u¨ã´£¥Ü¬°¨ä¤lµøµ¡¡A¦pªG¤£»Ýn«Ø¥ß¤u¨ã´£¥Ü¡A´Nn«ü©w TVS_NOTOOLTIPS¡C¾ðª¬À˵øªº¤u¨ã´£¥Ü¦n¹³¤]¥s INFOTIP¡C) |
TVS_RTLREADING | 4.70 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¶µ¥Ø¦WºÙ¥Ñ¥k¦Ü¥ªÅã¥Ü¡A¥u¦³¦b§Æ§B¨Ó»y¡Bªü©Ô§B»yµ¥ª©¥»ªº Windows ¤~¦³¥i¥Î¦¹·®æ¡C |
TVS_SHOWSELALWAYS | §Y¨Ï¾ðª¬À˵ø¥¢¥h¿é¤JµJÂI¡A¤]¯à¥H°ª«G«×Åã¥Ü³Q¿ï©wªº¶µ¥Ø |
TVS_SINGLEEXPAND | 4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A¥u¦³³Q¿ï¨ú¶µ¥Ø©³¤Uªº¤l¶µ¥Ø®i¶}¡A¨ä¾l¶µ¥Ø³£·|¦¬Ãl¡F¦Ó¥B·Æ¹«ÂIÀ»¬Y¶µ¥Ø¤@¦¸´N¯à®i¶}¤l¶µ¥Ø¡A¦AÂIÀ»¸Ó¶µ¥Ø´N¦¬Ãl¡C¦pªG¦b¥H·Æ¹«ÂI¿ï¶µ¥Ø¦P®É¡AÁÙ«ö¦í Ctrl Áä¡A«h¨ä¾l¶µ¥Ø¤£·|¦¬Ãl©Î®i¶}¡C |
TVS_TRACKSELECT | 4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡A·Æ¹«´å¼Ð«ü¨ì¥ô¤@¶µ¥Ø®É¡A¸Ó¶µ¥Ø·|Åܦ¨¡u¶W³sµ²¡vªº¼Ë¤l¡A·Æ¹«´å¼ÐÅܦ¨¤â§Î¡C |
§Y¨Ï¾ðª¬À˵ø¤w«Ø¥ß¦n¤F¡A§ÚÌÁÙ¬O¥i¥H¨Æ«á§ïÅܩΦs¨ú¾ðª¬À˵øªº·®æ¡A«eªÌ¥i¥H©I¥s SetWindowLong¡F«áªÌ«h¬O©I¥s GetWindowLong¡C½Ð°Ñ¦Ò²Ä 22 ³¹¡C
©³¤U¬O Tree View ªº©µ¦ù·®æ¡G
©µ¦ù·®æ | »¡©ú |
TVS_EX_AUTOHSCROLL | ¤£Åã¥Ü¤ô¥±²¶b¡A¦ý¬O¥i¥H§â©Ò¿ï¨úªº¶µ¥Ø¡A¦Û°ÊªºÅã¥Ü¦b¾ðª¬À˵ø¥i¬Ý¨£ªº°Ï°ì¤¤¡C |
TVS_EX_DIMMEDCHECKBOXES | |
TVS_EX_DOUBLEBUFFER | TVS_EX_DOUBLEBUFFER ·|§i¶D¾ðª¬À˵øn³z¹LÂù«½w½Ä¶i¦æø»s¡A³o¥i¥HÁקK±±¨î¶µ¦b½Õ¾ã¤j¤p®É°{Ã{¡C |
TVS_EX_DRAWIMAGEASYNC | |
TVS_EX_EXCLUSIONCHECKBOXES | |
TVS_EX_FADEINOUTEXPANDOS | ¥in¨D²H¥X®ÄªG |
TVS_EX_MULTISELECT | ¦b Windows XP ¤§«e³£¤£¤ä´©¡A³Ì¦n§O¨Ï¥Î |
TVS_EX_NOINDENTSTATE | |
TVS_EX_PARTIALCHECKBOXES | |
TVS_EX_RICHTOOLTIP |
¾ðª¬À˵ø±±¨î¶µªº©µ¦ù·®æ¦ü¥G¸ò²M³æÀ˵ø¤@¼Ë¡A³£¤£¯à¦b¸ê·½ÀÉùس]©w¡A¦]¦¹¥u¦n¹ï¾ðª¬À˵øµo¥X TVM_SETEXTENDEDSTYLE °T®§¡A¨Ó³]©w©µ¦ù·®æ¡C¤£¹L¬°¤F¤£¯}Ãa¨ä¥L©µ¦ù·®æ¡A¶È¶È³]©w§ÚÌ·Qnªº©µ¦ù·®æ¡A©Ò¥HÀ³¸Ó¥ý¥H TVM_GETEXTENDEDSTYLE ¨ú±o©µ¦ù·®æ¡A¦A°µ¹Bºâ¡A³Ì«á¤~§â©µ¦ù·®æ¶Çµ¹¾ðª¬À˵øùØ¡C¨Ò¦pn³]©w TVS_EX_AUTOHSCROLL¡A§@ªkÀ³¸Ó¦p¤Uµ{¦¡¡G
INVOKE SendMessage,hTreeView,TVM_GETEXTENDEDSTYLE,0,0 ;¨ú±o©µ¦ù·®æ¡A¦s©ó EAX or eax,TVS_EX_AUTOHSCROLL ;¥[¤W TVS_EX_AUTOHSCROLL INVOKE SendMessage,hTreeView,TVM_SETEXTENDEDSTYLE,hTreeView,eax ;µo°e©µ¦ù·®æµ¹¾ðª¬À˵ø
¦pªGn¨ú®ø TVS_EX_AUTOHSCROLL¡A°µªk¦p¤U¡G
INVOKE SendMessage,hTreeView,TVM_GETEXTENDEDSTYLE,0,0 ;¨ú±o©µ¦ù·®æ¡A¦s©ó EAX or eax,not TVS_EX_AUTOHSCROLL ;¨ú®ø TVS_EX_AUTOHSCROLL INVOKE SendMessage,hTreeView,TVM_SETEXTENDEDSTYLE,hTreeView,eax ;µo°e©µ¦ù·®æµ¹¾ðª¬À˵ø
¾ðª¬À˵øùتº¨CÓ¶µ¥Ø³£¦³¬Y¨Çª¬ºA¡A³o¨Çª¬ºA¬O«ü¬O§_³Q¿ï¨úªº ( selected )¡B¬O§_¦³®Äªº ( disabled )¡B¬O§_®i¶}ªº ( expanded )¡K¡Kµ¥µ¥¡C¨C¤@ºØª¬ºA³£¥Ñ¤@Ӧ줸ªí¥Ü¡A¤j³¡¤Àªº±¡§Î¤U¡A¨t²Î·|¦Û¦æ³]©w¡A¨Ò¦p·í¨Ï¥ÎªÌ¥H·Æ¹«¦b¶µ¥Ø¤WÂIÀ»®É¡A´N·|¨Ï¸Ó¶µ¥Ø¦Û°ÊªºÅܬ°³Q¿ï¨úªº¡F¦ý¬Oµ{¦¡¤]¯à¦Û¦æ³]©w¬Y¶µ¥Øªºª¬ºA¡An³o¼Ë°µ¥i¥H¹ï¾ðª¬À˵øµo¥X TVM_SETITEM °T®§³]©w¬YÓ¶µ¥Øªºª¬ºA¡Aµ{¦¡¤]¥i¥Hµo°e TVM_GETITEM °T®§¥H¨ú±o¬YÓ¶µ¥Øªºª¬ºA¡C©³¤U¬Oµo¥X TVM_SETITEM °T®§ªº¹Lµ{¡G
INVOKE SendMessage,hTreeView,TVM_SETITEM,0,ADDR tvi
hTreeView ¬O¾ðª¬À˵øªº¥N½X¡AwParam ¤£¨Ï¥Î¶·³]¬° 0¡AlParam ¬Oµ²ºcÅé tvi ªº¦ì§}¡Atvi ¬O¤@ÓºÙ¬° TVITEM ªºµ²ºcÅé¡ATVITEM µ²ºcÅ骺¦UÓÄæ¦ì¬O¡G
TVITEM STRUCT imask UINT ? hItem HANDLE ? state UINT ? stateMask UINT ? pszText LPTSTR ? cchTextMax DWORD ? iImage DWORD ? iSelectedImage DWORD ? cChildren DWORD ? lParam LPARAM ? TVITEM ENDS
TVITEM ªº²Ä¤@ÓÄæ¦ì¬O imask¡A¦b MSDN ºÙ¬° mask¡A¦ý mask »P MASM ªº«O¯d¦r¬Û¦P¡A¬G MASM32 §ï¬° imask ©Î _mask¡A¦¹Äæ¦ì«ü¥X TVITEM ùتºþ¨ÇÄæ¦ì¬O¦³®Äªº¡A¥²¶·³]©w¡A¤Uªí¦C¥X imask »P¨ä¥LÄæ¦ìªºÃö«Y¡G
·íµ{¦¡n¦Û¦æ§ïÅܬYÓ¶µ¥Øª¬ºA®É¡A³q±`¶È¶È§ïÅܤ@Óª¬ºA¡A¦Ó¨ä¾lª¬ºA¤£ÅÜ¡A¥ç§Y¨ä¾lª¬ºAªº¦ì¤¸¶·¾B¸n ( mask )¡C¨Ò¦p©³¤Uªºµ{¦¡¬O¨Ï¬YÓ¶µ¥ØÅܲÊÅé¦r¡A¦Ó¨ä¾lª¬ºA«h¤£ÅÜ¡G
mov tvi.imask,TVIF_HANDLE or TVIF_STATE mov ecx,hitem mov tvi.hItem,ecx ;§ïÅÜ hitem ¶µ¥Ø¬°²ÊÅé¦rª¬ºA mov tvi.state,TVIS_BOLD ;²ÊÅé¦rª¬ºA mov tvi.stateMask,TVIS_BOLD ;¾B¸n°£¤F²ÊÅé¦r¥H¥~ªº¦ì¤¸ INVOKE SendMessage,hTreeView,TVM_SETITEM,0,OFFSET tvi
¤W±µ{¦¡ªº²Ä¤@¦æ¡A´N¬O§i¶D¨t²Î TVITEM Äæ¦ì¥u¦³ hItem¡Bstate ¦³®Ä¡A²Ä¥|¦æ«h¬O§ïÅܪ¬ºA¬°²ÊÅé¡A²Ä¤¦æ«h¬O¥u¦³²ÊÅ騺Ӧ줸ÅÜ°Ê¡A¨ä¾l¤£ÅÜ¡C
©³¤U¬O¾ðª¬À˵øªº¶µ¥Øª¬ºA¡G
ª¬ºA | ¤Q¤»¶i¦ì ¼ÆÈ |
»¡©ú |
TVIS_FOCUSED | 1 | ¦¹¶µ¥Ø³B©óµJÂIª¬ºA¡A¤]´N¬O³Qµê½u®Ø¥]³ò¦í¡C |
TVIS_SELECTED | 2 | ¦¹¶µ¥Ø³B©ó³Q¿ï¨úªºª¬ºA¡A¦¹®É¸Ó¶µ¥Øªº©³¦â·|¥H¤Ï¥ÕÅã¥Ü¡A¦pªG¦P®É¤]¨ã¦³¿é¤JµJÂI ( ¤j³¡¥÷ªº±¡§Î¤U )¡A¨º»ò¸Ó¶µ¥Ø¤]·|¬°µê½u¥~®Ø¥]³ò¦í¡C |
TVIS_CUT | 4 | ¦¹¶µ¥Ø³B©ó¼Ð°O ( marked ) ª¬ºA¡C |
TVIS_DROPHILITED | 8 | ¦¹¶µ¥Ø³Q¿ï¬°©ì¦² ( drag and drop ) ªº¥Ø¼Ð¡A¥ç§Y·í¨Ï¥ÎªÌ©ì¦²¥Ò¶µ¥Ø¨ì¤A¶µ¥Ø®É¡A¤A¶µ¥Ø¨ã¦³ TVIS_DROPHILITED ª¬ºA¡C |
TVIS_BOLD | 10h | ¶µ¥Ø¬°²ÊÅé¦r¡C |
TVIS_EXPANDED | 20h | ¬YÓ¤÷¶µ¥Ø©³¤Uªº¤l¶µ¥Ø¤w³Q®i¶}¡A¨ä¤l¶µ¥Ø¯àÅã¥Ü¥X¨Ó¡A¥u¦³¨ã¦³¤l¶µ¥Øªº¶µ¥Ø¤~¯à¦³¦¹ª¬ºA¡C |
TVIS_EXPANDEDONCE | 40h | ¬YÓ¤÷¶µ¥Ø©³¤Uªº¤l¶µ¥Ø´¿¸g³Q®i¶}¹L¡A¦¹ª¬ºA¥u¯à³]¦b¨ã¦³¤l¶µ¥Øªº¤÷¶µ¥Ø¤W¡C¦pªG¦b³B²z TVM_EXPAND °T®§®É¡A¤÷¶µ¥Ø¦³¦¹ª¬ºA¡A´N¤£·|¬°²£¥Í TVN_ITEMEXPANDING ©M TVN_ITEMEXPANDED ³qª¾½X¡CY·Q°£¥h¦¹ª¬ºA¡A¥i¥Hµo¥X TVM_EXPAND °T®§¡A¨Ã¨Ï wParam ¬°¡uTVE_COLLAPSE or TVE_COLLAPSERESET¡v¡C |
TVIS_OVERLAYMASK | 0F00h | ¥Î¨ÓÀò±o¶µ¥Ø«Å|¹Ï¤ù¯Á¤Þªº¾B¸n½X |
TVIS_STATEIMAGEMASK | 0F000h | ¥Î¨ÓÀò±o¶µ¥Øª¬ºA¹Ï¤ù¯Á¤Þªº¾B¸n½X |
TVIS_USERMASK | 0F000h | »P TVIS_STATEIMAGEMASK ¬Û¦P |
¨Æ¹ê¤W¡A¦b TVITEM µ²ºcÅéùتº state Äæ¦ì¡A¥u¦³ 0¡ã7 ¦ì¤¸¡A¤~¬Oªí¥Ü¶µ¥Øª¬ºA¡F8¡ã11 ¦ì¤¸¡Aªí¥Ü«Å|¹Ï¤ù ( overlay image )¡A³o¥|Ӧ줸ªí¥Ü¤@Ó¤Q¤»¦ì¤¸¼ÆÈ¡A¦¹¼ÆȬ° image list ªº¯Á¤Þ¡A¥Ñ¤@¶}©l¡C¦pªG¦¹¼ÆȬ°¹s¡Aªí¥Ü¨S¦³«Å|¹Ï¤ù¡Cn¨ú±o«Å|¹Ï¤ù¯Á¤Þ¡A´N¥²¶·¨Ï state Äæ¦ì»P TVIS_OVERLAYMASK °µ AND ¹Bºâ¡Cstate Äæ¦ìªº 12¡ã15 ¦ì¤¸¡Aªí¥Üª¬ºA¹Ï¤ù¡A¥Ñ¤@¶}©l¡A¦pªG¦¹¼ÆȬ°¹s¡Aªí¥Ü¨S¦³ª¬ºA¹Ï¤ù¡Cn¨ú±oª¬ºA¹Ï¤ù¯Á¤Þ¡A´N¥²¶·¨Ï state Äæ¦ì»P TVIS_STATEIMAGEMASK °µ AND ¹Bºâ¡C
¦b¾ðª¬À˵ø¤¤·s¼W¡B¬d¸ß¶µ¥Øµ¥µ¥°Ê§@¡A³£¬O©I¥s SendMessage¡A¹ï¾ðª¬À˵øµo¥X¯S©wªº°T®§¡A¸Ó°T®§¥]§t¾Þ§@¤Î©Ò»Ý¸ê®Æ¡A¦Ó©I¥s¦¨¥\«á¡A¾ðª¬À˵ø§Y¨Ì¸Ó¾Þ§@§¹¦¨°Ê§@¡C¨Ò¦pn·s¼W¶µ¥Ø´N¬Oµo¥X TVM_INSERTITEM °T®§¡C·í¨Ï¥ÎªÌ¹ï¾ðª¬À˵ø¤¤ªº¶µ¥Ø°µ×§ï©Î©ì¦² ( drag and drop ) ®É¡A¾ðª¬À˵ø«h¬Oµo¥X³qª¾½Xµ¹¤÷µøµ¡¡A¦Ó¤÷µøµ¡«h¦b³B²z¸Ó³qª¾½X®É¡A°µ¤@¨Ç³B²z¡C
n¦b¾ðª¬À˵ø±±¨î¶µ¤¤·s¼W¤@Ó¶µ¥Ø¡A¥²¶·¹ï¾ðª¬À˵ø±±¨î¶µµo¥X TVM_INSERTITEM °T®§¡Aµ{¦¡¦p¤U¡G
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
¦pªG¦¨¥\´¡¤J·s¶µ¥Ø¡A¶Ç¦^·s¶µ¥Øªº¥N½X¡A§_«hªð¦^ 0¡C³oÓ°T®§ªº¶Ç¦^È»P²M³æÀ˵ø±±¨î¶µ ( list view ) ´¡¤J¶µ¥Ø°T®§ ( LVM_INSERTITEM ) ªº¶Ç¦^ȫܤ£¦P¡A LVM_INSERTITEM °T®§¶Ç¦^¯Á¤ÞÈ¡A¦ý¬O TVM_INSERTITEM «o¶Ç¦^¥N½X¡A¥Dn¬O¦]¬°¾ðª¬À˵ø±±¨î¶µªº¤l¶µ¥Ø©M¤÷¶µ¥Ø¦³¶¥¼hªºÃö«Y¡A©Ò¥H¬°¤FÂç²M¦U¶µ¥Ø¤§¶¡ªºÃö«Y¡A¨CÓ¶µ¥Ø³£¦³¥N½X¡C¤W±µ{¦¡ùØ¡AhTreeView ¬O¾ðª¬À˵ø±±¨î¶µ¥N½X¡A¦¹¥N½X¥i±µ¦¬¨ì TVM_INSERTITEM °T®§¡A¥H¼W²K·s¶µ¥Ø¡Ctvis ¬O¤@ÓºÙ¬° TVINSERTSTRUCT µ²ºcÅé ( ¦b MASM32 v.11 ªº WINDOWS.INC v.1.60 ¤]ºÙ¬° TV_INSERTSTRUCT µ²ºcÅé )¡ASendMessage ªº³Ì«á¤@ӰѼƬO TVINSERTSTRUCT µ²ºcÅ骺¦ì§}¡A¦¹µ²ºcÅ餺§t¦³·s¥[¤J¶µ¥Øªº¸ê®Æ¡A¨äÄæ¦ì¬O¡G
TVINSERTSTRUCT STRUC hParent HANDLE ? hInsertAfter HANDLE ? UNION itemex TVITEMEX <> item TVITEM <> ENDS TVINSERTSTRUCT ENDS
²Ä¤@ÓÄæ¦ì¡AhParent¡A¬O¤÷¶µ¥Øªº¥N½X¡A¦pªG¬On´¡¤J®Ú¶µ¥Ø¡A¦¹Äæ¦ì¬° TVI_ROOT ©Î NULL¡ChInsertAfter ¬O¬YÓ¶µ¥Øªº¥N½X¡A·s¥[¤Jªº¶µ¥Ø·|¦w´¡¦b¦¹¶µ¥Ø¤§«á¡A¦ý¤]¥i¥H¬O TVI_FIRST¡Aªí¥Ü´¡¦b¦P¤@¶¥¼h¶µ¥Øªº²Ä¤@Ó¡F©Î¬O TVI_LAST¡Aªí¥Ü´¡¦b³Ì«á¤@Ó¡F©Î¬O TVI_SORT¡Aªí¥Ü¨Ì¶µ¥Ø¦WºÙ±Æ§Ç¡C²Ä¤TÓÄæ¦ì¬O TVITEMEX µ²ºcÅé©Î TVITEM µ²ºcÅé¡C4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¥i¥Î TVITEMEX¡A§_«h¥u¯à¨Ï¥Î TVITEM¡C¦w¸Ë¤F IE 4.0 ¥H«á¡ACOMCTL32.DLL ´N¬O 4.71 ª©¤F¡CTVITEM ¤]¥s TV_ITEM¡A«e±¤w¸g»¡©ú¹L¤F¡CTVITEMEX ¤]¥s TV_ITEMEX¡A¬O TVITEM ªº©µ¦ù¡ATVITEMEX µ²ºcÅ骺Äæ¦ì¦p¤U¡G
TVITEMEX STRUCT imask UINT ? hItem HANDLE ? state UINT ? stateMask UINT ? pszText LPTSTR ? cchTextMax DWORD ? iImage DWORD ? iSelectedImage DWORD ? cChildren DWORD ? lParam LPARAM ? iIntegral DWORD ? uStateEx DWORD ? hwnd HWND ? iExpandedImage DWORD ? TVITEMEX ENDS
±q imask ¨ì lParam ¬OÄÝ©ó TVITEM µ²ºcÅé¡AiIntegral ¨ì iExpandedImage ¬O TVITEMEX ¦h¥Xªº³¡¥÷¡A¦Ó uStateEx ¨ì iExpandedImage «h¬O Windows XP ¤Î¨ä¥H«áªº¨t²Î¤~¦³ªºÄæ¦ì¡C©³¤Uªºªí®æ¬O imask »P¦UÄæ¦ì¤§¶¡ªºÃö«Y¡G
imask | ¼vÅTÄæ¦ì | »¡¡@¡@¡@©ú |
TVIF_HANDLE | hItem | ¶µ¥Øªº¥N½X |
TVIF_STATE | state stateMask |
³]©w©Î¨ú±o¶µ¥Øªºª¬ºA¡A½Ð°Ñ¦Ò¾ðª¬À˵øªº¶µ¥Øª¬ºA¡C |
TVIF_TEXT | pszText cchTextMax |
pszText «ü¦V¥H NULL µ²§Àªº¦r¦ê¡A°µ¬°¶µ¥Øªº¦WºÙ¡F¦pªG pszText ¬° LPSTR_TEXTCALLBACK ªº¸Ü¡A¨º»ò¾ðª¬À˵ø±±¨î¶µ·|¦bnÅã¥Ü¡B©Î±Æ§Ç¡B©Î½s¿è¶µ¥Ø¦WºÙ®É¡A©Î¬O¶µ¥Ø¦WºÙ§ïÅܦӵo¥X TVN_GETDISPINFO ³qª¾½Xµ¹¤÷µøµ¡¡Aµ{¦¡À³¦b³B²z¦¹³qª¾½X®É³]¦n¶µ¥Ø¦WºÙ¡C cchTextMax ¬O pszText ©Ò«ü¦r¦êªº¤j¤p¡A¥H¦r¤¸¬°³æ¦ì¡A¦pªG¬O³]©w¦r¦ê¡A¦]¬°¥i¥Ñ NULL °µµ²§À¡A©Ò¥H cchTextMax ·|³Q¨t²Î©¿²¤¡C |
TVIF_IMAGE | iImage | image list ªº¯Á¤ÞÈ¡A¥iÅã¥Ü¥X¶µ¥Ø¥¼³Q¿ï©w®Éªº¹Ï¥Ü¡C¦pªG¦¹Äæ¦ì¬° I_IMAGECALLBACK¡A«h¾ðª¬À˵ø·|§â¦b»ÝnÅã¥Ü¹Ï¥Ü®É¡Aµo¥X TVN_GETDISPINFO ³qª¾½Xµ¹¤÷µøµ¡¡A¤÷µøµ¡ªºµøµ¡¨ç¦¡³B²z¦¹³qª¾½X®É¦A«ü©w¥¼³Q¿ï©wªº¹Ï¥Ü¡C |
TVIF_SELECTEDIMAGE | iSelectedImage | image list ªº¯Á¤ÞÈ¡A¥iÅã¥Ü¥X¶µ¥Ø³Q¿ï©w®Éªº¹Ï¥Ü¡C¦pªG¦¹Äæ¦ì¬° I_IMAGECALLBACK¡A«h¾ðª¬À˵ø·|§â¦b»ÝnÅã¥Ü¹Ï¥Ü®É¡Aµo¥X TVN_GETDISPINFO ³qª¾½Xµ¹¤÷µøµ¡¡A¤÷µøµ¡ªºµøµ¡¨ç¦¡³B²z¦¹³qª¾½X®É¦A«ü©w³Q¿ï©wªº¹Ï¥Ü¡C |
TVIF_CHILDREN | cChildren | «ü¥X¦¹¶µ¥Ø©³¤U¦³¦h¤ÖÓ¤l¶µ¥Ø¡A¥i¥H¬O¡G
|
TVIF_PARAM | lParam | µ{¦¡¦Û¦æ©w¸qªº¼ÆÈ |
TVIF_INTEGRAL | iIntegral | ¶µ¥Øªº°ª«×¡C¦pªG¦¹Äæ¦ì¬° 2¡Aªí¥Ü¦¹¶µ¥Ø°ª«×¬°¥¿±`ªº 2 ¿¡F¦pªG¦¹Äæ¦ì¬° 3¡Aªí¥Ü¦¹¶µ¥Ø°ª«×¬°¥¿±`ªº 3 ¿¡C¦¹Äæ¦ì¥u³]©w³æ¤@¶µ¥Øªº°ª«×¡An³]©w©Ò¦³¶µ¥Øªº°ª«×¡Anµo°e TVM_SETITEMHEIGHT °T®§µ¹¾ðª¬À˵ø¡C |
TVIF_STATEEX | uStateEx | ¥u¦³ XP ¤Î¨ä¥H«áªº¨t²Î¥i¥Î¦¹ºX¼Ð¡C¥i¥H¬O¤U±¨ä¤¤¤@ºØ¡G
|
¡@ | hwnd | ¥¼¨Ï¥Î¡AÀ³³]¬° 0¡C |
TVIF_EXPANDEDIMAGE | iExpandedImage | Vista ¤Î¨ä¥H«á¨t²Î¤~¥i¨Ï¥Î¡A®i¶}ªº¤l¶µ¥Ø¹Ï¥Ü¡A¦¹¹Ï¥Ü¬O image list ¤¤ªº¯Á¤Þ¡C |
TVIF_DI_SETITEM | ¡@ | ¥u¯à¦b³B²z TVN_GETDISPINFO ®É¥i¥Î¡A¥¦¥iºû«ùìÈ¡C |
¦pªG·Q¦A¶µ¥Ø¥ªÃä¥[¤W¹Ï¤ùªº¸Ü¡A¦³¥|Ó¨BÆJ¡G
º¥ý¥²¶·©I¥s ImageList_Create «Ø¥ß¡u¹Ï¤ù²M³æ¡v( image list )¡AImageList_Create 쫬¬O¡G
ImageList_Create PROTO cx:DWORD,cy:DWORD,flags:DWORD,cInitial:DWORD,cGrow:DWORD
¦pªG¦¨¥\«Ø¥ß¡A«h·|¶Ç¦^¹Ï¤ù²M³æªº¥N½X¡A¸Ô²Ó»¡©ú°Ñ¦Ò²Ä 21 ³¹¡C
±N»Ýn¥Î¨ìªº¹Ï¤ù¡A¦p BMP ¦ì¤¸¹Ï©Î¹Ï¥Ü¡A¥[¤J¨ì¹Ï¤ù²M³æùØ¡C¦pªG¬On¥[¤J¦ì¤¸¹Ï¡A¥i¥H©I¥s ImageList_Add¡Fn¥[¤J¹Ï¥Ü¡A©I¥s ImageList_ReplaceIcon¡C¸Ô²Ó»¡©ú°Ñ¦Ò²Ä 21 ³¹¡C
µo°e TVM_SETIMAGELIST µ¹¾ðª¬À˵ø¡A§â¹Ï¤ù²M³æ»P¾ðª¬À˵ø³sµ²°_¨Ó¡C¤èªk¬O¡G
INVOKE SendMessage,hTreeView,TVM_SETIMAGELIST,iImage,himl
iImage °Ñ¼Æ¥i¥H¦³¨âºØÈ¡GTVSIL_NORMAL ©M TVSIL_STATE¡A«eªÌ¥Nªí³Q¿ï©w©Î¥¼³Q¿ï©wªº¹Ï¤ù¡F«áªÌ¥Nªíµ{¦¡³]p®v¦Û¦æ©w¸qªºªºª¬ºA¹Ï¤ù¡Chiml «h¬O¹Ï¤ù²M³æªº¥N½X¡AY himl ¬° NULL¡A«h¨t²Î·|²¾°£¾ðª¬À˵øªº image list¡C
³Ì«á¤@¨B¡A«h¬O¦b·s²K¥[¶µ¥Ø®É ( µo¥X TVM_INSERTITEM °T®§µ¹¾ðª¬À˵ø ) ©ÎªÌ¹ï¦b¤w¦s¦bªº¶µ¥Øµo¥X TVM_SETITEM ®É¡A³]©w TVITEM µ²ºcÅ骺 imask¡BiImage¡BiSelectedImage Äæ¦ì¡Cn³]©w¥¿±`Åã¥Ü©Î¥¼³Q¿ï¨úªº¹Ï¤ù®É¡A¥²¶·³]©w imask ªº TVIF_IMAGE ºX¼Ð¡A¨Ã©ó iImage Äæ¦ì¶ñ¤W image list ªº²Ä´XӹϤù¡CnÅã¥Ü³Q¿ï¨úªº¹Ï¤ù¡A«hn³]©w imask ªº TVIF_SELECTEDIMAGE ºX¼Ð¡A¨Ã©ó iSelectedImage Äæ¦ì¶ñ¤W image list ªº²Ä´XӹϤù¡C
«e±´£¹L¡A¦b¾ðª¬À˵øùبC·s²K¤@Ó¶µ¥Ø¡A¸Ó¶µ¥Ø´N¾Ö¦³¤@Ó¥N½X¡A¨º»ò¡Aµ{¦¡»Ý¤£»Ýnµe¥X¤@¶ô°O¾ÐÅé¨Ó«O¦s¨CÓ¶µ¥Øªº¥N½X©O¡Hµª®×¬O¤£»Ýn¡A¤×¨ä¬O§âºÏºÐùتº¥Ø¿ý·í¦¨¾ðª¬À˵øªº¶µ¥Ø®É¡A³o®É¶µ¥Øªº¼Æ¶q¥i¯à·|µLªk¹wª¾¦Ó¥B¥i¯à«D±`¦h¡C¬JµM¤£¥²«O¦s¶µ¥Øªº¥N½X¡A¨º»ò¸Ó¦p¦ó¤~¯à¨ú±o¶µ¥Øªº¸ê®Æ©O¡H¤@¯ë¦Ó¨¥¡An¨ú±o¬YÓ¶µ¥Øªº¸ê®Æ¦³¨â¨BÆJ¡G
¥ýµo¥X TVM_GETNEXTITEM µ¹¾ðª¬À˵ø¡A¥H¨ú±o¯S©w¶µ¥Øªº¥N½X¡Cµo¥X TVM_GETNEXTITEM °T®§ªºµ{¦¡¦p¤U¡G
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,flag,hitem
hTreeView ¬O¦¬¨ì TVM_GETNEXTITEM °T®§ªº¾ðª¬À˵ø¥N½X¡A¨t²Î±N·|¨Ì¾Ú flag ©Ò«ü©wªº¸ê®Æ¡Aªð¦^¶µ¥Ø¥N½X¡F¦pªG©I¥s¥¢±Ñ¡A¤@¯ëªð¦^ NULL¡Chitem ¬O¶µ¥Ø¥N½X¡A¨Ì¾Ú flag ¤£¦P¦Ó·N¸q¤£¦P¡A¦³®É¥i¯à¤£»Ýn¡Cflag ¥i¥H¬O¤U±´XºØ±¡§Î¡G
flag | »¡¡@¡@©ú |
TVGN_CARET | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ°³Q¿ï©w¶µ¥Øªº¥N½X¡C |
TVGN_CHILD | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ° hitem ªº²Ä¤@Ó¤l¶µ¥Ø¥N½X¡C |
TVGN_DROPHILITE | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ°©ì©ñ¥Øªºªº¶µ¥Ø¥N½X¡C |
TVGN_FIRSTVISIBLE | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ°¾ðª¬À˵øµøµ¡¤ºªº²Ä¤@Ó¥i¬Ý¨£ªº¶µ¥Ø¥N½X¡C |
TVGN_LASTVISIBLE | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ°³Ì«á¤@Ó®i¶}¶µ¥Øªº¥N½X¡A4.71 ª©¤Î¨ä¥H«áªº COMCTL32.DLL ¤~¥i¨Ï¥Î¡C¦¹°T®§¨Ã¤£¬O¶Ç¦^¾ðª¬À˵øµøµ¡¤ºªº³Ì«á¤@Ó¥i¬Ý¨£ªº¶µ¥Ø¥N½X¡C |
TVGN_NEXT | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ° hitem ¤U¤@Ó¦P¶¥¼hªº¶µ¥Ø¥N½X¡C |
TVGN_NEXTSELECTED | ¥u¦³ Vista ¤Î¨ä¥H«áªº¨t²Î¥i¨Ï¥Î¡A¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ° hitem ¤U¤@Ó³Q¿ï©wªº¶µ¥Ø¡C |
TVGN_NEXTVISIBLE | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^ hitem ªº¤U¤@Ó¥i¬Ý¨£ªº¶µ¥Ø¥N½X¡Ahitem ©Ò«ü©wªº¶µ¥Ø¤]¥²¶·¥i¨£¡C¥i¥Hµo°e TVM_GETITEMRECT ¨Ó¨M©w¬YÓ¶µ¥Ø¬O§_¥i¨£¡C |
TVGN_PARENT | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ° hitem ªº¤÷¶µ¥Ø¥N½X¡C |
TVGN_PREVIOUS | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ° hitem «e¤@Ó¦P¶¥¼hªº¶µ¥Ø¥N½X¡C |
TVGN_PREVIOUSVISIBLE | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^ hitem ªº«e¤@Ó¥i¬Ý¨£ªº¶µ¥Ø¥N½X¡Ahitem ©Ò«ü©wªº¶µ¥Ø¤]¥²¶·¥i¨£¡C¥i¥Hµo°e TVM_GETITEMRECT ¨Ó¨M©w¬YÓ¶µ¥Ø¬O§_¥i¨£¡C |
TVGN_ROOT | ¦pªG©I¥s¦¨¥\¡A¶Ç¦^Ȭ°®Ú¶µ¥Ø¥N½X¡C |
¥Ñ²Ä¤@¨B¨ú±o¯S©w¶µ¥Øªº¥N½X«á¡A´N¥i¥H§â¦¹¥N½X¶ñ¤J TVITEM µ²ºcÅ餤ªº hItem Äæ¦ìùØ¡A³]©w¦nn±o¨ìªº¸ê®Æ¡A¦A¹ï¾ðª¬À˵øµo¥X TVM_GETITEM °T®§¡C¦p¤U±µ{¦¡¡G
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvi
ADDR tvi «üªº¬O TVITEM µ²ºcÅ骺¦ì§}¡A©I¥s«e¡A¥²¶·§â±q²Ä¤@¨B©Ò±o¨ìªº¶µ¥Ø¥N½X¶ñ¤J¨ä¤¤ªº hItem Äæ¦ì¡A¦A§ân¨ú±oþ¨Ç¸ê®Æ¶ñ¤J imask Äæ¦ì¡C©I¥s¦¨¥\«á¡A¨t²Î·|±Nn¨ú±oªº¸ê®Æ¤À§O¶ñ¤J¨ì tvi ªº¦UÄæ¦ì¤º¡C
©³¤U¥H¨ú±o®Ú¶µ¥Øªº¦WºÙ¬°¨Ò¤l¡A»¡©ú³o¨âÓ¨BÆJ¡Aµ{¦¡½X¦p¤U¡G
LOCAL tvi:TVITEM LOCAL buffer[200]:BYTE ;¦s©ñ®Ú¶µ¥Ø¦WºÙ³B INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_ROOT,0 ;EAX¡×®Ú¶µ¥Ø¥N½X lea edx,buffer mov tvi.hItem,eax mov tvi.imask,TVIF_TEXT mov tvi.pszText,edx mov tvi.cchTextMax,SIZEOF buffer INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvi ;©I¥s¦¨¥\«á¡Abuffer ¦s¦³®Ú¶µ¥Ø¦WºÙ
¦pªGn±o¨ì®Ú¶µ¥Ø¦³´XÓ¤l¶µ¥Ø¡A«h¨Ï tvi.imask Äæ¦ìÅܦ¨¡uTVIF_TEXT or TVIF_CHILDREN¡v¡A©I¥s¦¨¥\«á¡A·|¦b cChildren Äæ¦ì¦s¦³¤l¶µ¥ØӼơC
°²¦p¾ðª¬À˵ø¨ã¦³¡uTVS_EDITLABELS¡v·®æ®É¡A´N¥i¥H¨Ï¥Î´N¦a½s¿è¡C´N¦a½s¿èªº·N«ä¬O¡A¦b¬YÓ³Q¿ï©wªº¶µ¥Ø¤W¡A¦A¥H·Æ¹«¥ªÁä³æÀ»¤@¦¸¡A´N·|¦b¸Ó¶µ¥Ø¤W¥X²{¤@Ó½s¿è®Ø¡A¥i¥H¨Ñ¨Ï¥ÎªÌקﶵ¥Ø¦WºÙ¡C¦bµ{¦¡¤¤n³B²z´N¦a½s¿è¡A¥²¶·³B²z¨âÓ³qª¾½X¡ATVN_BEGINLABELEDIT ©M TVN_ENDLABELEDIT¡C³o¨âÓ³qª¾½X¬O¨Ï¥ÎªÌ°µ¤F´N¦a½s¿èªº°Ê§@¤§«á¡A³z¹L¾ðª¬À˵ø¶Çµ¹¤÷µøµ¡ªºµøµ¡¨ç¦¡¡A¤÷µøµ¡¦A¥[¥H³B²z¡C¤÷µøµ¡¤]¥i¥H¦Û¦æµo¥X TVM_EDITLABEL °T®§µ¹¾ðª¬À˵ø¡An¨D´N¦a½s¿è¡C
·í¨Ï¥ÎªÌ°µ¤F´N¦a½s¿èªº°Ê§@©Î¤÷µøµ¡¹ï¾ðª¬À˵øµo¥X TVM_EDITLABEL ¤§«á¡A¾ðª¬À˵ø·|«Ø¥ß¤@Ó½s¿è®Ø¨Ñ¨Ï¥ÎªÌ½s¿è¶µ¥Ø¦WºÙ¡C¦b¦¹½s¿è®Ø©|¥¼Åã¥Ü©ó¿Ã¹õ®É¡A¾ðª¬À˵ø«Kµo¥X TVN_BEGINLABELEDIT ³qª¾½Xµ¹¤÷µøµ¡¡Aµ{¦¡¥i¥H¦b³B²z TVN_BEGINLABELEDIT ³qª¾½X®É¡Aµo¥X TVM_GETEDITCONTROL °T®§µ¹¾ðª¬À˵ø¦ÓÀò±o½s¿è®Ø¥N½X¡A¨Ï½s¿è®Ø²Å¦Xn¨D¡C¨Ò¦pµo¥X EM_SETLIMITTEXT µ¹½s¿è®Ø¨î¿é¤J¦r¼Æ¡C
«Ý¨Ï¥ÎªÌ¥H·Æ¹«¥ªÁä³æÀ»¨ä¥L°Ï°ì¡Aªí¥Ü¨Ï¥ÎªÌ¿é¤J§¹¦¨¡A³o®É¾ðª¬À˵øµo¥X TVN_ENDLABELEDIT ³qª¾½Xµ¹¤÷µøµ¡¡C³o¬q®É´Á¤º¡A¤÷µøµ¡À³¥Ñ§â½s¿è®Øªº¤º®e³]©wµ¹¶µ¥Ø¦WºÙ¡C¤èªk¦³´XÓ¡A¨ä¤¤¤@¬O¥Ñ½s¿è®ØÀò±o¨ä¤º®e¡A¦s©ó¬Y¦ì§}¤º¡A¦A§â¸Ó¦ì§}«ü©wµ¹ TVITEM µ²ºcÅ餤ªº pszText Äæ¦ì¡A³Ì«áµo¥X TVM_SETITEM °T®§µ¹¾ðª¬À˵ø¡A³]©w·sªº¶µ¥Ø¦WºÙ¡C«Ý¤÷µøµ¡³]©w¦n¶µ¥Øªº·s¦WºÙ¤§«á¡A¾ðª¬À˵ø¦A±N½s¿è®Ø¾P·´¡C¾ãÓ¹Lµ{¦p¤U¡J
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 |
hTreeView DWORD ?
hEdit DWORD ?
LOCAL tviex:TVITEMEX ;tviex µ²ºcÅ鬰 26 ¦æµo¥X TVM_SETITEM °T®§©Ò¥Î
LOCAL buffer[40]:BYTE
.ELSEIF uMsg==WM_NOTIFY
push ebx
ASSUME ebx:PTR NM_TREEVIEW
mov ebx,lParam
mov eax,[ebx].hdr.hwndFrom ;EAX¡×µo¥X WM_NOTIFY ªº±±¨î¶µ¥N½X
.IF eax==hTreeView
.IF [ebx].hdr.code==TVN_BEGINLABELEDIT ;³qª¾½X¬O§_¬° TVN_BEGINLABELEDIT
ASSUME ebx:PTR NMTVDISPINFO
INVOKE SendMessage,hTreeView,TVM_GETEDITCONTROL,0,0 ;¨ú±o½s¿è®Ø¥N½X
mov hEdit,eax
INVOKE SendMessage,eax,EM_SETLIMITTEXT,32,0 ;³]©w³Ì¦h¶È¯à¿é¤J 32 Ó¦r
.ELSEIF [ebx].hdr.code==TVN_ENDLABELEDIT ;³qª¾½X¬O§_¬° TVN_ENDLABELEDIT
ASSUME ebx:PTR NMTVDISPINFO
INVOKE GetWindowText,hEdit,ADDR buffer,32 ;¨ú±o½s¿è®Ø¤º®e¡A¦s©ó buffer °Ï°ìÅܼÆùØ
mov edx,[ebx].item.hItem ;¨ú±o¶µ¥Ø¥N½X
mov tviex.hItem,edx ;§â¶µ¥Ø¥N½X¦s¤J tviex µ²ºcÅ餺
mov tviex.imask,TVIF_TEXT ;³]©wºX¼Ð¡A¶È§ïÅÜ pszText
lea ecx,buffer
mov tviex.pszText,ecx ;§â pszText «ü¦V buffer ¦ì§}
INVOKE SendMessage,hTreeView,TVM_SETITEM,0,ADDR tviex ;³]©w¶µ¥Ø
.ENDIF
.ENDIF
ASSUME ebx:PTR NOTHING
pop ebx |
è¤~´£¹L¡A·í¨Ï¥ÎªÌ¦b¾ðª¬À˵øªº¬YÓ³Q¿ï©wªº¶µ¥Ø¤W¡A¦A¥H·Æ¹«¥ªÁä³æÀ»¤@¦¸«á¡A¾ðª¬À˵ø«K·|µo¥X WM_NOTIFY µ¹¤÷µøµ¡¡CWM_NOTIFY ªº wParam ¬O¾ðª¬À˵øªºÃѧO½X¡A¦Ó lParam «h¬O NMTVDISPINFO µ²ºcÅé¦ì§}¡A¦¹®É³oÓµ²ºcÅ骺 hdr.hwndFrom ¬°¾ðª¬À˵øªº¥N½X¡Ahdr.idFrom ¬°¾ðª¬À˵øªºÃѧO½X¡Ahdr.code ¬° TVN_BEGINLABELEDIT¡C¦Ó NMTVDISPINFO µ²ºcÅ骺 item Äæ¦ì¤¤¡AhItem¡Bstate¡BlParam ¤Î pszText ªº¸ê®Æ·|³Q¨t²Î¶ñ¦n¡A¥i¨Ñ¤÷µøµ¡¨Ï¥Î¡C
·í¨Ï¥ÎªÌµ²§ô´N¦a½s¿è®É¡A¾ðª¬À˵øÁÙ¬Oµo¥X WM_NOTIFY °T®§µ¹¤÷µøµ¡¡A¨ä¤¤ hdr ªºÄæ¦ì¸ò¤W±¤@¼Ë¡A¥u¦³ hdr.code Åܬ° TVN_ENDLABELEDIT¡C¦Ó item Äæ¦ìªº hItem¡BlParam ¤Î pszText ªº¸ê®Æ·|³Q¶ñ¦n¡A¥i¨Ñ¤÷µøµ¡¨Ï¥Î¡C¤]´N¬O»¡¡A·í¤÷µøµ¡¦¬¨ì TVN_ENDLABELEDIT ³qª¾½X®É¡A¶µ¥Ø¦WºÙ¤w¸g³Q¶ñ¦b pszText ©Ò«ü¦ì§}¤º¡AhItem ¤º¤]¤w¦s¦³¶µ¥Ø¥N½X¡C©Ò¥H³B²z TVN_ENDLABELEDIT ¨ä¹ê¥i¥H²¤Æ¦p¤U¡J
1 2 3
4 5 6 |
.ELSEIF [ebx].hdr.code==TVN_ENDLABELEDIT ;³qª¾½X¬O§_¬° TVN_ENDLABELEDIT
ASSUME ebx:PTR NMTVDISPINFO
mov [ebx].item.imask,TVIF_TEXT ;§ó§ï imask ºX¼Ð¡A¥H°t¦X TVM_SETITEM ³]©w¶µ¥Ø¦WºÙ
lea eax,[ebx].item ;EAX «ü¦V ITEM µ²ºcÅé¦ì§}
INVOKE SendMessage,hTreeView,TVM_SETITEM,0,eax ;³]©w¶µ¥Ø
.ENDIF |
¦pªG¨S¦³µo¥X TVM_SETITEM¡A«·s³]©w¶µ¥Ø¡A©ÎªÌ¥H¨ä¥L¤èªk§ó§ï¶µ¥Ø¦WºÙ¡A¨º»ò¶µ¥Ø¦WºÙ¤´µM·|¬Oì¨Óªº¡C¤£¹L¤Wz¤èªk¡AÁö¸g²¤Æ¡A¦ý¤´¶û³Â·Ð¡A½Ð¬Ý©³¤Uªº¡uTVN_BEGINLABELEDIT »P TVN_ENDLABELEDIT ªºªð¦^È¡v¡C
»¡°_¨Ó¡A¹ï¸Ü®Øªºªð¦^ÈÆZ½ÆÂøªº¡A¥²¶·n¦³¥¿½TªºÆ[©À¤~¦æ¡C¹ï¸Ü²°¨ç¦¡¬Oµ{¦¡³]p®v©Ò¼¶¼gªº¡A¨ä¦a¦ìÃþ¦üµøµ¡¨ç¦¡¡C·í¨Ï¥ÎªÌ¾Þ§@¹ï¸Ü²°¤Wªº±±¨î¤¸¥ó®É¡A°T®§¬O¶Çµ¹¹ï¸Ü²°ºÞ²z¾¹¡A¹ï¸Ü²°ºÞ²z¾¹¦A©I¥s¹ï¸Ü²°¨ç¦¡¡C¦b¹ï¸Ü²°¨ç¦¡¤º¡A¥u»Ý³B²z§ÚÌ·P¿³½ìªº°T®§§Y¥i¡C³B²z§¹«á¡Aªð¦^ TRUE¡A¥Nªí³B²z¹L¦¹°T®§¡F¦Ó¨ä¾l¥¼³B²z¹Lªº°T®§¡A«hªð¦^ FALSE¡C¦ý¬O¡A³Q³B²z¹Lªº°T®§¡A³B²z«áªº±¡§Î¬O¤°»ò¡A¤]À³¦bªð¦^®É§iª¾¹ï¸Ü²°ºÞ²z¾¹¤~¬O¡C³o®É¥²¶·¥H DWL_MSGRESULT ¬°°Ñ¼Æ¡A©I¥s SetWindowLong API ¤~¥i¥H±N³B²z¹L«áªºªð¦^È¡A¶Çµ¹¹ï¸Ü²°ºÞ²z¾¹¡CSetWindowLong 쫬¬O¡G
INVOKE SetWindowLong,hWnd,nIndex,dwNewLong
¨Æ¹ê¤W¡ASetWindowLong ¥i¥H³]©wµøµ¡ªº³\¦h©Ê½è¡A¨Ò¦p³]©wªð¦^È¡Bµøµ¡¨ç¦¡¦ì§}µ¥µ¥¡ChWnd ¬°n³]©wªºµøµ¡¥N½X¡AnIndex ¬O«ün³]©wþ¤@өʽè¡A¥i¥H¬O¤U±´XºØ¡C¦Ón³]©wªº¼ÆÈ¡A«h¬O¥H dwNewLong ¶Çµ¹¨t²Î¡CY°õ¦æ¦¨¥\¡A«hªð¦^ì¨Óªº³]©wÈ¡FY¥¢±Ñ¡A«h¶Ç¦^ 0¡C
·®æ | »¡¡@¡@©ú |
GWL_EXSTYLE | ³]©w·sªº©µ¦ù·®æ |
GWL_STYLE | ³]©w·sªº·®æ |
GWL_WNDPROC | ³]©w·sªºµøµ¡¨ç¦¡¦ì§} |
GWL_HINSTANCE | ³]©w·sªº°õ¦æ¹ê¨Ò¥N½X |
GWL_ID | ³]©w·sªºµøµ¡ÃѧO½X |
GWL_USERDATA | ³]©w·sªº¨Ï¥ÎªÌ¸ê®Æ |
DWL_DLGPROC | ³]©w·sªº¹ï¸Ü²°¨ç¦¡¦ì§} |
DWL_MSGRESULT | ³]©w¹ï¸Ü²°¨ç¦¡ªºªð¦^È |
DWL_USER | ³]©w·sªºÃB¥~¸ê®Æ |
¦b¤j³¡¤À±¡§Î¤U¡A¹ï¸Ü²°¨ç¦¡¨Ã¤£Ãö¤ßªð¦^È¡CµM¦Ó¡A¦pªGn¸T¤î¨Ï¥ÎªÌ§ó§ï¬Y¨Ç¾ðª¬À˵øªº¶µ¥Ø¦WºÙ®É¡A´N±o³]©w TVN_BEGINLABELEDIT ªð¦^ȤF¡CTVN_BEGINLABELEDIT ªºªð¦^Ȧ³¨âºØ¡ATRUE »P FALSE¡C¦pªGªð¦^ TRUE ªí¥Ü¨ú®ø½s¿è¶µ¥Ø¦WºÙ¡A³o®Éµ{¦¡½X¬°¡G
INVOKE SetWindowLong,hDlg,DWL_MSGRESULT,TRUE
¦pªGªð¦^ FALSE¡Aªí¥Ü¤¹³\½s¿è¡C
TVN_ENDLABELEDIT ªð¦^Ȭ° TRUE¡A«h±µ¨ü½s¿è®Ø¤ºªº¤å¦r¬°·sªº¶µ¥Ø¦WºÙ¡FYªð¦^Ȭ° FALSE¡A«h¥á±ó½s¿è®Øªº¤å¦r¡A«ì´_춵¥Ø¦WºÙ¡C
¦b´N¦a½s¿è®É¡A¦pªG·Q¥H«ö Enter Áä¡A·í§@½s¿è§¹¦¨¨Ã§ó§ï¶µ¥Ø¦WºÙ¡F¥H«ö Esc Áä¡A¥Nªí©ñ±ó§ó§ï«ì´_ì¨Ó¶µ¥Ø¦WºÙ¡AÀ³¸Ó¬O¤@ºØ«Ü¤è«Kªº°µªk¡A§Y¨Ï¬O²{¦b·Æ¹«·í¹Dªº¤µ¤é¡CµM¦Ó¡A½s¿è®Ø³B²z«öÁ䪺¤º©w¤è¦¡¡A¨Ã¤£¯àº¡¨¬³oÓn¨D¡C¦b½s¿è®Øªºµøµ¡¨ç¦¡ùØ¡A¹ï©ó³æ¦æªº½s¿è®Ø¨Ã¤£³B²z Enter Áä¡F¹ï©ó¦h¦æªº½s¿è®Ø ( ¨ã¦³ ES_MULTILINE »P ES_WANTRETURN ·®æ )¡AEnter Á䪺§@¥Î¦¡´«¦æ¡C³o®É¥i¥H¦³¨âºØ¤è¦¡Åý½s¿è®Ø²Å¦X§Ú̪ºn¨D¡G¤@¬O¦Û¦æ³]p½s¿è®Ø¡F¤G¬Oµøµ¡¤lÃþ§O¤Æ ( window subclass )¡CÅãµM«eªÌ¬O¤Ó¹L³Â·Ð¤F¡A¤j³¡¤Àªº¤H³£·|±Ä¥Î«áªÌ¡A½Ð°Ñ¦Òªþ¿ý¤C¡C¦¹³B¡A¤p¤ì°¸¥u»Ý±N¾ðª¬À˵ø©Ò«Ø¥ßªº½s¿è®Ø¤lÃþ§O¤Æ¡A¨Ï¨ä¯à³B²z Enter Áä¤Î Esc Áä§Y¥i¡C
¤£¹L¡A¤£¦Pªº¦a¤è¬O¡A¦pªG¾ðª¬À˵ø¬O¦b¹ï¸Ü²°¤º¡A¹ï¸Ü²°ºÞ²z¾¹³B²z Esc ©M Enter Áä¡A¨Ã¤£·|±N¨ä¶Ç»¼¦Ü¾ðª¬À˵ø©Ò«Ø¥ßªº½s¿è®Ø¡A¥HP©ó¨Ï«öÁäµL®Ä¡CYn¸Ñ¨M³oÓ°ÝÃD¡AÀ³¸Ó¦b¾ðª¬À˵ø¶Ç°e TVN_BEGINLABELEDIT ³qª¾½X®É¡A¥H TVM_GETEDITCONTROL ¬°°Ñ¼Æ¡A©I¥s SendMessage¡A¨ú±o½s¿è®Ø¥N½X¡A¦A¤lÃþ§O¤Æ½s¿è®Ø¡C¦Ó¦b¤lÃþ§O¤Æ«áªº½s¿è®Øªºµøµ¡¨ç¦¡¤º¡A³B²z WM_GETDLGCODE °T®§¡A¨Ï¨ä¶Ç¦^ DLGC_WANTALLKEYS¡C³o¥i¨Ï¾ðª¬À˵ø¤¤ªº¤lÃþ§O¤Æ¨ç¦¡¯à³B²z Esc ©M Enter Áä¡C
ºî¦X¡uTVN_BEGINLABELEDIT »P TVN_ENDLABELEDIT ªºªð¦^È¡v»P¡u´N¦a½s¿è®É¡A³B²z Enter Áä»P Esc Áä¡v¨â¤p¸`¡A³Ì«á³B²z´N¦a½s¿èªºµ{¦¡¤ù¬q¡A³Q²¤Æ¦¨¤U±¡G
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
32 33 34 35
36 37 38 39
40 41 42 43
44 45 46 47
48 49 50 51
52 53 54 55
56 57 |
;---------------------------------------------------------------------------------------------------
;¤lÃþ§O¤Æªº¦Û¦æ¼¶¼gªº½s¿è®Øµøµ¡¨ç¦¡
new_edit_proc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_CHAR
mov eax,wParam
.IF al==VK_RETURN
INVOKE SendMessage,hTreeView,TVM_ENDEDITLABELNOW,FALSE,0
.ELSEIF al==VK_ESCAPE
INVOKE SendMessage,hTreeView,TVM_ENDEDITLABELNOW,TRUE,0
.ELSE
INVOKE CallWindowProc,lpOldEditProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
.ELSEIF uMsg==WM_GETDLGCODE
mov eax,DLGC_WANTALLKEYS
ret
.ELSE
INVOKE CallWindowProc,lpOldEditProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
new_edit_proc ENDP
;---------------------------------------------------------------------------------------------------
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
¡K¡K
.IF uMsg==WM_NOTIFY
push ebx
ASSUME ebx:PTR NM_TREEVIEW
mov ebx,lParam
mov eax,[ebx].hdr.hwndFrom ;EAX¡×µo¥XWM_NOTIFYªº±±¨î¶µ¥N½X
.IF eax==hTreeView
;³B²zTVN_BEGINLABELEDIT³qª¾½X¡A¸T¤î¨Ï¥ÎªÌ´N¦a½s¿è¡u¹q¸£¤¤ªºµwºÐ¡v¡B¡u¹êÅéºÏºÐ¡v¡B¡uÅÞ¿èºÏºÐ¡v¡A¦ýã³\½s¿èÀÉ®×
;©Î¤l¥Ø¿ý´N¦a½s¿è¡A¤£¹L¦³¨î¡A·sªº¶µ¥Ø¦WºÙªø«×¦b32¦ì¤¸²Õ¥H¤º
.IF [ebx].hdr.code==TVN_BEGINLABELEDIT
ASSUME ebx:PTR NMTVDISPINFO
.IF ([ebx].item.lParam==504d5e43h)||([ebx].item.lParam==4448474ch)||([ebx].item.lParam==44485946h)
INVOKE SetWindowLong,hDlg,DWL_MSGRESULT,TRUE ;¸T¤î¨Ï¥ÎªÌ´N¦a½s¿è¡u¹q¸£¤¤ªºµwºÐ¡vµ¥¤TºØ¶µ¥Ø
.ELSE
INVOKE SendMessage,hTreeView,TVM_GETEDITCONTROL,0,0
mov hEdit,eax
INVOKE SendMessage,eax,EM_SETLIMITTEXT,20h,0 ;½s¿è®Ø¥u¯à¿é¤J32¦ì¤¸ªø«×
INVOKE SetWindowLong,hEdit,GWL_WNDPROC,OFFSET new_edit_proc ;¤lÃþ§O¤Æ½s¿è®Ø
mov lpOldEditProc,eax
.ENDIF
;³B²zTVN_ENDLABELEDIT³qª¾½X¡AY½s¿è®Ø¤ºµL¦r¤¸¡A«h«ì´_춵¥Ø¦WºÙ¡FY¦³¦r¤¸¡A«h¥H½s¿è®Ø¤º®e¬°¶µ¥Ø·s¦WºÙ
.ELSEIF [ebx].hdr.code==TVN_ENDLABELEDIT
INVOKE GetWindowTextLength,hEdit ;EAX¡×½s¿è®Ø¤º¦r¤¸ªø«×
.IF eax==0
mov ecx,FALSE
.ELSE
mov ecx,TRUE
.ENDIF
INVOKE SetWindowLong,hDlg,DWL_MSGRESULT,ecx
|
·í¨Ï¥ÎªÌ§â·Æ¹«´å¼Ð²¾¦Ü¬YÓ¶µ¥Ø¤W¡A¦A«ö¦í·Æ¹«¥ªÁ䤣©ñ¡A²¾°Ê·Æ¹«¡A³o®É¶}©l©ì¦²¹Lµ{¡C¤@¯ë¦Ó¨¥¡A³o®É·Æ¹«´å¼Ð°£¤Fì¨Óªº¥Õ¦â½b¸¹ ( ) ¤§¥~¡AÁÙ·|¦h¥X¤@ӹϹ³¡AºÙ¬°©ì¦²¹Ï¹³¡C·í·Æ¹«´å¼Ð²¾¨ì¥Øªº¦a«á¡A¨Ï¥ÎªÌ¤~©ñ¶}·Æ¹«¥ªÁä¡A§¹¦¨©ì¦²°Ê§@¡A·Æ¹«´å¼Ð¤]«ì´_¦¨ì¨Óªº¥Õ¦â½b¸¹¡C©³¤U¬O©ì¦²®É¡Aµ{¦¡À³¦³ªº¨BÆJ¡G
·í¶}©l°µ©ì¦²°Ê§@®É¡A¾ðª¬À˵ø·|µo¥X TVN_BEGINDRAG ³qª¾½Xµ¹¤÷µøµ¡¡A¤÷µøµ¡©ó³B²z¦¹³qª¾½X®É¡A¥i¥Hµo¥X TVM_CREATEDRAGIMAGE °T®§µ¹¾ðª¬À˵ø¡AÅý¾ðª¬À˵ø¦Û¦æ«Ø¥ß¤@Ó image list¡A¨Ã¥B§â¸Ó¶µ¥Øªº¹Ï¤ù¥[¤J¨ì image list ùØ¡A³Ì«á§â¸Ó image list ªº¥N½X¶Ç¦^µ¹¤÷µøµ¡¡A¨ä쫬¬O¡G
INVOKE SendMessage,hTreeView,TVM_CREATEDRAGIMAGE,0,hitem
wParam ¥²¶·¬° 0¡AlParam ¬O³Q©ì¦²ªº¶µ¥Ø¥N½X¡C¦pªG±z¤£¥´ºâ¦b©ì¦²®ÉÅã¥Ü¹Ï¹³¡A·íµM¥i¥H¤£°µ¦¹¨BÆJ¡C¤S©ÎªÌ¦pªG§A¤£·Q¥Î¶µ¥Øªº¹Ï¹³¡An·s«Ø¨ä¥L¹Ï¹³¤]¥¼¹Á¤£¥i¡C
±µµÛn°µªº¬O¦b¹Ï¹³¤W«ü©w¤@ÓÂI¡A°µ¬°·Æ¹«¦b©ì°Ê®É¡A·Æ¹«¼öÂI«ü¦b¹Ï¹³¤Wªº¦ì¸m¡C´å¼Ðªº¼öÂI ( hot spot ) «üªº´N¬O·í·Æ¹«ÂIÀ»®É¡A§@¥Îªº¨º¤@ÓÂI¡A¤@¯ë¬O«ü´å¼Ð¥ª¤W¨¤ªº¨º¤@ÂI¡C§ÚÌ¥i¥H©I¥s ImageList_BeginDrag «ü©w¹Ï¹³¤Wªº¼öÂI¦ì¸m¡A¨ä쫬¬O¡G
ImageList_BeginDrag PROTO himlTrack:DWORD,iTrack:DWORD,dxHotspot:DWORD,dyHotspot:DWORD
himlTrack ©M iTrack ¤À§Oªí¥Ü image list ¥N½X¤Î¸Ó image list ªº¯Á¤ÞÈ¡A³o¨â¶µ«ü©w¤F¹Ï¹³¡CdxHotspop¡BdyHotspot «ü©w¹Ï¹³ªºþ¤@ÂI°µ¬°´å¼Ðªº¼öÂI¡A¥¦Ì¬O¬Û¹ï©ó¹Ï¹³ªº¥ª¤W¨¤¡A¦]¦¹¦pªG¥H¥ª¤W¨¤¬°¼öÂI¡A¨º»ò³o¨âÓ¼Æȧ¡³]¬° 0¡C
±µµÛ¬O©I¥s ImageList_DragEnter¡A³oÓ API ·|©ó«ü©wªº¦ì¸mÅã¥Ü©ì¦²¹Ï¹³¡A¨Ã³qª¾¨t²Î¶}©l©ì¦²¤F¡C¨ä쫬¬°¡G
ImageList_DragEnter PROTO hwndLock:DWORD,x:DWORD,y:DWORD
hwndLock ¬O¾Ö¦³©ì¦² image list ªºµøµ¡¥N½X¡A¦b¦¹³B§Y¬°¾ðª¬À˵ø¥N½X¡Fx¡By ¤À§O¬O¹Ï¹³ªº x ®y¼Ð»P y ®y¼Ð¡A¦¹®y¼ÐªºìÂI¬O¦b¸Óµøµ¡ªº¥ª¤W¨¤¡A¨Ã«D¤u§@°Ïªº¥ª¤W¨¤¡A¦ý¬O¹ï©ó¾ðª¬À˵ø¦Ó¨¥¡A¨Ã¨S¦³¿ï³æ¡B¼ÐÃDÄæ¡A©Ò¥Hµøµ¡ªº¥ª¤W¨¤¤]¬O¤u§@°Ïªº¥ª¤W¨¤¡C¦]¬°¦b¤W¤@¨BÆJ¡A¤w¸g©I¥s ImageList_BeginDrag ¤F¡A©Ò¥H¨t²Î¤]¤w¸gª¾¹D¸Óµøµ¡ªº©ì¦² image list ¬Oþ¤@Ó¡A¤]ª¾¹D¹Ï¹³¯Á¤Þ¡C
¨ì¦¹¡AÁÙ¦³¤@Ó°ÝÃDn¸Ñ¨M¡C·í§ÚÌ°µ©ì¦²°Ê§@®É¡A¹Ï¹³·|ÀHµÛ·Æ¹«´å¼Ð²¾°Ê¦Ó²¾°Ê¡A§ÚÌ¥²¶·¦b¤÷µøµ¡ªºµøµ¡¨ç¦¡¤¤±o¨ì·Æ¹«¦ì¸m¡A¤~¯à°µ¥X³oºØ®ÄªG¨Ó¡A¤@¯ëªº¤èªk¬O³B²z WM_MOUSEMOVE °T®§ ( °Ñ¦Ò²Ä¤³¹ªº»¡©ú )¡C¦ý¬O§Ú̬O¥H·Æ¹«¦b¾ðª¬À˵øùة즲¶µ¥Ø¡A¨Ã¤£¬O¦b¤÷µøµ¡©ì¦²¶µ¥Ø¡C¨º»ò¡A¤÷µøµ¡¤S¬O¦p¦ó¤~¯à±oª¾·Æ¹«¦ì¸m©O¡H³o®ÉÔ´N¥²¶·©I¥s SetCapture ¤F¡CSetCapture ªºì«¬¬O¡G
SetCapture PROTO hWnd:HWND
hWnd ¬Oµøµ¡¥N½X¡A·í·Æ¹«´å¼Ð²¾¨ì¦¹µøµ¡ªº¤lµøµ¡©Î±±¨î¶µ®É¡A¨t²Î¤´·|§â·Æ¹«°T®§ ( «ü WM_MOUSEMOVE¡BWM_LBUTTONDOWN¡BWM_LBUTTON_UP µ¥µ¥¦³Ãö·Æ¹«¿é¤Jªº°T®§ ) ¶Çµ¹ hWnd¡A¦Ó¤£¬O¤lµøµ¡©Î±±¨î¶µ¡C¦pªG·Æ¹«´å¼Ð²¾¨ì¨ä¥Lµøµ¡ ( ¤£¬O hWnd µøµ¡¡A¤]¤£¬O¨ä¤lµøµ¡©Î±±¨î¶µ¡A¦Ó¬O¨ä¥Lµ{¦¡²£¥Íªºµøµ¡ )¡A¨º»ò·Æ¹«°T®§´N¤£·|µo°e¨ì hWnd ùØ¡A°£«D·Æ¹«¨Æ¥ý¦b hWnd µøµ¡ùؤw«ö¤U·Æ¹«¥ªÁä©Î¥kÁä¡A¥B¨S¦³ÃP¶}¡A¦A²¾¨ì¨ä¥Lµøµ¡¤W¡C
¨ì¦¹¤@¨BÆJ®É¡A¤w¸g¦³©ì¦²¹Ï¹³¡A¤]¥i¥HÂÇ¥Ñ SetCapture ¯à°÷¦b¤÷µøµ¡ªºµøµ¡¨ç¦¡¤¤ºÊµø WM_MOUSEMOVE °T®§¡A§Y¨Ï·Æ¹«¦b±±¨î¶µùز¾°Ê¡C³B²z WM_MOUSEMOVE °T®§ªººn¤u§@¡A¤j·§¬O§â©ì¦²¹Ï¹³ÀHµÛ·Æ¹«´å¼Ð²¾°Ê¦Ó²¾°Ê¡C³oÓ¤u§@¥i¥H©I¥s ImageList_DragMove §¹¦¨¡AImageList_DragMove ªº§@¥Î´N¬O²¾°Ê©ì¦²ªº¹Ï¹³¨ä쫬¬O¡G
ImageList_DragMove PROTO x:DWORD,y:DWORD
¨ä¤¤ x¡By ¤À§O¥Nªí¬Û¹ï©ó¾ðª¬À˵ø¤lµøµ¡¥ª¤W¨¤ªº x ®y¼Ð»P y ®y¼Ð¡C¹ï¾ðª¬À˵ø¦Ó¨¥¡A¦]¨S¦³¿ï³æ¡B¼ÐÃDÄæ¡A©Ò¥Hµøµ¡¥ª¤W¨¤¤]´N¬O¤u§@°Ï¥ª¤W¨¤¡C¦ý¬O¥Ñ WM_MOUSEMOVE ©ÒÄâ±aªº°Ñ¼Æ lParam ©Ò±o¨ìªº®y¼Ð¬O¬Û¹ï©ó¹ï¸Ü²°¤u§@°Ï¥ª¤W¨¤¡A¦]¦¹ÁÙ±o°µ¤@¨ÇÂà´«¡AÂà´«¤è¦¡´N¬O¦©°£¹ï¸Ü²°¤u§@°Ï¥ª¤W¨¤¨ì¾ðª¬À˵ø¥ª¤W¨¤¤§ x¡By ®y¼Ð¤§®t¶Z¡C¥i¥H©I¥s GetWindowRect ±o¨ì¹ï¸Ü²°»P¾ðª¬À˵ø¨âµøµ¡ªº¦ì¸m¡A¦¹¦ì¸m¬O¥H¿Ã¹õ¥ª¤W¨¤¬°ìÂI¡C
¨Ï¥ÎªÌ¤@¯ëªº²ßºD¬O·í©ì¦²¹Ï¹³¸g¹L¬YÓ¶µ¥Ø¤WªÅ®É¡A¸Ó¶µ¥ØÀ³¸Ó¥H°ª«G«×Åã¥Ü¡C¬°¹F¦¹®ÄªG¡Aµ{¦¡¥ýµo¥X TVM_HITTEST °T®§µ¹¾ðª¬À˵ø¡A½T©w¬O§_¸g¹L¬YÓ¶µ¥Øªº¤WªÅ¡F¦Aµo¥X TVM_SELECTITEM °T®§¡A¨Ï¸Ó¶µ¥ØÅܦ¨°ª«G«×Åã¥Ü¡C¥ý»¡ TVM_HITTEST °T®§¡Aµo¥X TVM_HITTEST ¹Lµ{¦p¤U¡G
INVOKE SendMessage,hTreeView,TVM_HITTEST,0,ADDR tvhti
TVM_HITTEST ªº wParam ¥²¶·¬°¹s¡AlParam «ü¦V¤@ÓºÙ¬° TVHITTESTINFO ªºµ²ºcÅé¡A¨äÄæ¦ì¬O¡G
TVHITTESTINFO STRUCT pt POINT <> flags DWORD ? hItem DWORD ? TVHITTESTINFO ENDS
©I¥s SendMessage «e¥²¶·¥ý§â pt ¶ñ¤J¬YÓÂIªº®y¼Ð¡A¥H´ú¸Õ³oÓÂI¬O§_¥]§t¦b¬YÓ¶µ¥Ø¤º¡A³oÓ®y¼Ð¬O¥H¾ðª¬À˵øªº¤u§@°Ï¥ª¤W¨¤¬°ìÂI¡C¦pªG¾ðª¬À˵ø¨ã¦³±²¶b¡A¦Ó¥B¤w±²°Ê¨ì¬YÓ¦ì¸m¡A¨Ò¦p¦V¥k±²°Ê®É¡Aµe±·|¦V¥ª²¾¡A¥i¯à·|¬Ý¤£¨£ì¨ÓªºìÂI¡A¦ý¬O¦¹ÂIªº®y¼Ð¬O¥H¥i¬Ý¨£ªº°Ï°ì¥ª¤W¨¤¬°ìÂI¡A¦Ó¤£¬O¥Hì¨ÓªºìÂI¬°ìÂI¡C¦pªG³oÓÂI¥]§t¦b¬YÓ¶µ¥Ø¤º¡Aµ{¦¡¥Ñ SendMessage ªð¦^®É¡A¨t²Î·|¦b TVHITTESTINFO ¤ºªº hItem ¶ñ¤W¸Ó¶µ¥Øªº¥N½X¡A§_«h¶ñ¤W NULL¡Aªð¦^È»P hItem ¬Û¦P¡CTVHITTESTINFO ªº flags Äæ¦ì¥i¥H¬O¥H¤U¤@өμÆÓ¼ÆÈ¡G
±`¡@¼Æ | ¼ÆÈ | ·N¡@¸q |
TVHT_ABOVE | 100H | ¸ÓÂI¦b¾ðª¬À˵ø¥i¨£°Ï°ì¥~ªº¤W¤è¡C |
TVHT_BELOW | 200H | ¸ÓÂI¦b¾ðª¬À˵ø¥i¨£°Ï°ì¥~ªº¤U¤è¡C |
TVHT_NOWHERE | 1H | ¸ÓÂI¦b¥i¨£°Ï°ì¤º¡A¦ý¬O¦b³Ì«á¤@Ó¶µ¥Øªº¤U¤è¡C |
TVHT_ONITEM | 46H | ¸ÓÂI¦b¬YÓ¶µ¥Øªº¹Ï¹³©Î¦WºÙ¤W¡C |
TVHT_ONITEMBUTTON | 10H | ¸ÓÂI¦b¬YÓ¶µ¥Øªº«ö¶s¤W¡C |
TVHT_ONITEMICON | 2H | ¸ÓÂI¦b¬YÓ¶µ¥Øªº¹Ï¥Ü¤W¡C |
TVHT_ONITEMINDENT | 8H | ¸ÓÂI¦b¬YÓ¶µ¥ØªºÁY±Æ¦ì¸m¤W¡C |
TVHT_ONITEMLABEL | 4H | ¸ÓÂI¦b¬YÓ¶µ¥Øªº¦WºÙ¤W¡C |
TVHT_ONITEMRIGHT | 20H | ¸ÓÂI¦b¥i¨£°Ï°ì¤º¡A¬YÓ¶µ¥Øªº¥k¤è¡C |
TVHT_ONITEMSTATEICON | 40H | ¸ÓÂI¦b¬YÓ¶µ¥Øªº state icon ¤W¡C |
TVHT_TOLEFT | 800H | ¸ÓÂI¦b¾ðª¬À˵ø¥i¨£°Ï°ì¥~ªº¥ª¤è¡C¥u¦³¸ÓÂIªº X ®y¼Ð¬°tÈ¡A¤~·|³o¼Ë¡C |
TVHT_TORIGHT | 400H | ¸ÓÂI¦b¾ðª¬À˵ø¥i¨£°Ï°ì¥~ªº¥k¤è¡C |
¦bµo°e°T®§ TVM_SELECTITEM «e¡A¥²¶·¥ýÁôÂé즲¹Ï¹³¡A§_«h·|¯d¤UÃø¬Ýªº²ª¸ñ¡CnÁôÂé즲¹Ï¹³¥i¥H©I¥s ImageList_DragShowNolock¡A¦bÅã¥Ü§¹°ª«G«×ªº¶µ¥Ø¤§«á¡A¦A©I¥s¤@¦¸¸Ó API¡A¥H¨Ï±o©ì¦²¹Ï¹³¥¿±`Åã¥Ü¡CImageList_DragShowNolock 쫬¬°
ImageList_DragShowNolock PROTO fShow:BOOL
Y fShow ¬° TRUE¡Aªí¥ÜÅã¥Ü¹Ï¹³¡FFALSE ªí¥ÜÁôÂùϹ³¡Cªð¦^Ȭ°¹s¡Aªí¥Ü©I¥s¥¢±Ñ¡F«D¹sªí¥Ü©I¥s¦¨¥\¡C
n¨Ï¶µ¥ØÅܬ°°ª«G«×Åã¥Ü¡Aµ{¦¡nµo¥X TVM_SELECTITEM µ¹¾ðª¬À˵ø¡A¦³Ãö TVM_SELECTITEM °T®§µo°e¤è¦¡¬°¡G
INVOKE SendMessage,hTreeView,TVM_SELECTITEM,flag,hitem
hitem ¬On¿ï¾Üªº¶µ¥Ø¥N½X¡Aflag ¥i¥H¬O¥H¤U¼ÆÈ¡C¦pªG³Q¿ï¾Üªº¶µ¥Ø¬O¬YÓ¤l¶µ¥Ø¡A¦Ó¨ä¤÷¶µ¥Ø³B©ó¦¬Ãlª¬ºA¡A¨º»ò¦¹°T®§·|¨Ï±o¤÷¶µ¥Ø®i¶}¡A¦P®É¨Ï³Q¿ï¾Üªº¤l¶µ¥ØÅã²{¡A¦b³oºØ±¡§Î¤U¡A¾ðª¬À˵øÁÙ·|µo¥X TVN_ITEMEXPANDING »P TVN_ITEMEXPANDED ¨â³qª¾½Xµ¹¤÷µøµ¡¡C¦pªG¦¨¥\ªº¿ï©w¶µ¥Ø¡Aªð¦^ TRUE¡F§_«hªð¦^ FALSE¡C
flag | ¼ÆÈ | ·N¡@¸q |
TVGN_CARET | 9H | ¿ï©w hitem ¶µ¥Ø¡A¨Ãµo¥X TVN_SELCHANGING »P TVN_SELCHANGED ³qª¾½Xµ¹¤÷µøµ¡¡C |
TVGN_DROPHILITE | 8H | ¥Ñ©ó©ì¦²¥Ø¼Ð¦Ó«Ã¸ hitem¡C |
TVGN_FIRSTVISIBLE | 5H | ¨Ï hitem ³Q¿ï©w¡A¨Ã¥B¾¨¶q¨Ï¨ä««ª½±²°Ê¡AÅܦ¨¥i¨£°Ï°ìªº²Ä¤@Ó¶µ¥Ø¡C¦ý¬O¦pªG¶µ¥Ø¤Ó¤Ö¡A¥B hitem ¦b«Ü«á±¡A´NµLªk¹F¦¨¡A¦]¦¹»¡¡u¾¨¶q¡v¡C |
TVSI_NOSINGLEEXPAND | 8000H | ³Q¿ï©wªº¤l¶µ¥Ø¤£®i¶}¡A¥²¶··f°t TVGN_CARET ¨Ï¥Î¡C |
·í¨Ï¥ÎªÌ©ñ¶}·Æ¹«¥ªÁä®É¡Aªí¥Üµ²§ô©ì¦²°Ê§@¡A¨t²Î·|µo¥X WM_LBUTTONUP °T®§¡A§ÚÌ¥²¶·©ó¦¹°T®§¤¤³B²z©³¤Uªº¨Æ±¡¡A¤~¤£·|³y¦¨¿ù»~¡C«Ý³o¨Ç¥²nªº¨Æ³B²z§¹«á¡A¦A¨Ì§Ú̪º»Ý¨D¡A§¹¦¨n¨D¡C
¾ðª¬À˵øªº°T®§¡A§¡¥H TVM_ ¬°¶}ÀY¡A«Ü©úÅã¬O tree view message ªºÁY¼g¡Cµ{¦¡¥i¥H¹ï¾ðª¬À˵øµo¥X°T®§¡An¨D¾ðª¬À˵ø°µ¤@¨Ç¨Æ±¡¡C©³¤U¨Ó¬Ý¬Ý¾ðª¬À˵øªº°T®§¡G
°T®§ | wParam | lParam | ·N¡@¡@¡@¸q | ªð¦^È |
TVM_CREATEDRAGIMAGE | 0 | hitem | ¨Ï¾ðª¬À˵ø¦Û¦æ«Ø¥ß¤@Ó image list¡A¨Ã¥B§â hitem ¶µ¥Øªº¹Ï¤ù¥[¤J¨ì image list ùØ¡C¦pªG¾ðª¬À˵ø¨S¦³¬ÛÃöªº image list¡A«hµLªk¨Ï¥Î¥»°T®§¡A¥²¶·¦Û¦æ«Ø¥ß image list¡C¤£¦A¨Ï¥Î©ì¦²¹Ï¹³®É¡Aµ{¦¡±o¦Û¦æ¾P·´¨ä image list¡C | ¦¨¥\®Éªð¦^ image list ªº¥N½X¡F§_«hªð¦^ NULL |
TVM_DELETEITEM | 0 | hitem | §R°£ hitem ¶µ¥Ø¤Î¨ä¥H¤Uªº©Ò¦³¤l¶µ¥Ø¡A¦pªG hitem ¬° TVI_ROOT ©Î NULL ´N·|§R°£©Ò¦³¶µ¥Ø¡C·í¶µ¥Ø³Q§R°£®É¡A¤÷µøµ¡·|¦¬¨ì TVN_DELETEITEM¡C | ¦¨¥\®Éªð¦^ TRUE¡F§_«hªð¦^ FALSE |
TVM_EDITLABEL | 0 | hitem | ´N¦a½s¿è ( in-place editing ) hitem ¶µ¥Øªº¦WºÙ¡C¦¹°T®§·|¨Ï¾ðª¬À˵ø¦b hitem ©Ò¦b¦ì¸m¡A«Ø¥ß³æ¦æ½s¿è®Ø¡A¥H§ó§ï¶µ¥Ø¦WºÙ¡A¨Ãµo¥X TVN_BEGINLABELEDIT µ¹¤÷µøµ¡¡Cµo°e¦¹°T®§«e¡A¾ðª¬À˵øÀ³¸Ón¦³¿é¤JµJÂI¡C | ¦¨¥\®Éªð¦^³æ¦æ½s¿è®Ø¥N½X¡F§_«hªð¦^ NULL |
TVM_ENDEDITLABELNOW | fCancel | 0 | µ²§ô´N¦a½s¿è¡CfCancel ¬° TRUE ®É¡Aªí¥Üµ²§ô´N¦a½s¿è¤£Àx¦s¡FFALSE ªí¥ÜnÀx¦s¡C¦¹°T®§·|¨Ï¾ðª¬À˵øµo¥X TVN_ENDLABELEDIT µ¹¤÷µøµ¡¡C | ¦¨¥\®Éªð¦^ TRUE¡F§_«hªð¦^ FALSE |
TVM_ENSUREVISIBLE | 0 | hitem | ½T©w hitem ¯à¦b¾ðª¬À˵ø¤¤¬Ý¨£¡A¦pªG¥²n¡A·|®i¶} hitem ªº¤÷¶µ¥Ø¥B±²°Ê¡C¦pªG¦³®i¶}ªº°Ê§@¡A´N·|µo¥X TVN_ITEMEXPANDING¡BTVN_ITEMEXPANDED µ¹¤÷µøµ¡¡C | ¦pªG¥u¦³±²°Ê¥BµL¶µ¥Ø³Q®i¶}¡Aªð¦^«D¹sÈ¡F§_«hªð¦^ 0 |
TVM_EXPAND | flag | hitem | ¨Ì¾Ú flag ¤§È¡A¨M©w hitem ®i¶}©Î¦¬Ãl¤l¶µ¥Ø¡Aflag ¥i¥H¬O
·í¶µ¥Ø³Q®i¶}¡A¾ðª¬À˵ø·|µo¥X TVN_ITEMEXPANDING ©M TVN_ITEMEXPANDED ³qª¾½Xµ¹¤÷µøµ¡¡A¨Ã³]©w TVIS_EXPANDEDONCE ª¬ºA¡C |
¦¨¥\®Éªð¦^«D¹s¡F§_«hªð¦^ 0 |
TVM_GETBKCOLOR | 0 | 0 | ¨ú±o¾ðª¬À˵øªº©³¦â¡A¤@¯ëªð¦^ COLORREF È¡AYªð¦^ -1¡Aªí¥Ü¨Ï¥Î¨t²Î¹w©wªº©³¦â¡C | °Ñ¦Ò¥ªÄæ |
TVM_GETCOUNT | 0 | 0 | ªð¦^¶µ¥ØÁ`¼Æ¡C | °Ñ¦Ò¥ªÄæ |
TVM_GETEDITCONTROL | 0 | 0 | ¨ú±o´N¦a½s¿è®Éªº½s¿è®Ø¥N½X¡C°Ñ¦Ò´N¦a½s¿èªº»¡©ú¡C | ¦¨¥\®Éªð¦^½s¿è®Ø¥N½X¡F§_«hªð¦^ 0 |
TVM_GETEXTENDEDSTYLE | 0 | 0 | ¨ú±o¾ðª¬À˵øªº©µ¦ù·®æ¡A°Ñ¦Ò©µ¦ù·®æ¡C | ªð¦^©µ¦ù·®æ |
TVM_GETIMAGELIST | iImage | 0 | ¨ú±o¾ðª¬À˵øªº image list ©Î state image list¡CiImage ¥i¥H¬O TVSIL_NORMAL¡Aªí¥Ü¨ú±o image list¡F¤]¥i¥H¬O TVSIL_STATE¡Aªí¥Ü¨ú±o state image list¡C | ªð¦^ image list ¥N½X |
TVM_GETINDENT | 0 | 0 | ¨ú±o¤l¶µ¥Ø¥ªÃäÁY±Æ¦h¤ÖÂI¡C | °Ñ¦Ò¥ªÄæ |
TVM_GETINSERTMARKCOLOR | 0 | 0 | ¨ú±o´¡¤J°O¸¹ªºÃC¦â¡Cªð¦^®É¡AEAX ªº¬°ì¦³ªº´¡¤J°O¸¹ÃC¦â¡C | °Ñ¦Ò³oùØ¡C |
TVM_GETISEARCHSTRING | ||||
TVM_GETITEM | 0 | pitem | ¨ú±o¬YÓ¶µ¥Øªº¸ê®Æ¡C©I¥s SendMessage «á¡A¸Ó¶µ¥Ø¸ê®Æ·|¦s¦b pitem ©Ò«ü¦ì§}¡A¦¹¦ì§}¨ä¹ê¬O¤@ÓºÙ¬° TV_ITEM ªºµ²ºcÅé¡C¦b©I¥s SendMessage «e¡A¥²¶·§ân¨ú±o¸ê®Æªº¶µ¥Ø¥N½X¦s©ó TV_ITEM ªº hItem Äæ¦ì¡An¨ú±oþ¨Ç¸ê®Æn¦s©ó imask Äæ¦ì¡C¦³Ãö§ó¸Ô²Óªº¥Îªk¡A½Ð°Ñ¦Ò¨ú±o¶µ¥Øªº¸ê®Æ¡C | ¦¨¥\®Éªð¦^ TRUE¡F§_«hªð¦^ FALSE |
TVM_GETITEMHEIGHT | 0 | 0 | ¨ú±o¶µ¥Øªº°ª«×¡A¥HÂI¬°³æ¦ì¡C¦b¾ðª¬À˵ø¤¤¡A¨CÓ¶µ¥Ø¤@¼Ë°ª¡C | ªð¦^Ȭ°¶µ¥Øªº°ª«× |
TVM_GETITEMRECT | fItemRect | prc | ¨ú±o³ò¦í¶µ¥Øªº¯x§Î¤j¤p¡A¥HÀ˵ø¬O§_¯à¬Ý±o¨£¦¹¶µ¥Ø¡CY fItemRect ¬° TRUE¡Aªí¥Ü¶È¨ú±o³ò¦í¶µ¥Ø¦WºÙªº¯x§Î¡FY¬° FALSE¡A«h¨ú±o³ò¦í¶µ¥Ø¾ã¦Cªº¯x§Î¡C¦Ó¯x§Îªº¦ì§}¬O¥H prc «ü©w¡A¨ä®y¼Ð¥H¾ðª¬À˵ø¥ª¤W¨¤¬°ìÂI¡C¦b©I¥s«e prc ©Ò«ü RECT µ²ºcÅ骺 left Äæ¦ì¬°n¨úªº³ò¦í¯x§Îªº¶µ¥Ø¡C | ¦pªG¶µ¥Ø¥i¨£¥B¦¨¥\¨ú±o³ò¦íªº¯x§Î¡Aªð¦^ TRUE¡F§_«hªð¦^ FALSE¡C |
TVM_GETITEMSTATE | hItem | stateMask | ¨ú±o hItem ¶µ¥Øªº¬Y¨Çª¬ºA¡An¨ú±oªºª¬ºA¥H stateMask ªí¥Ü¡AstateMask ªº·N¸q»P TVITEMEX ªº stateMask Äæ¦ì¬Û¦P¡C | ¥u¦³³Q stateMask «ü©w¥B³]©wªºª¬ºA¦ì¤¸¬° 1 |
TVM_GETLINECOLOR | 0 | 0 | ¨ú±o¶µ¥Ø»P¤l¶µ¥Ø½u¬qªºÃC¦â¡Cn¨ú±o![]() ![]() |
ªð¦^½u¬qÃC¦â¡A¦pªG¨S¦³«ü©w¡Aªð¦^ CLR_DEFAULT |
TVM_GETNEXTITEM | flag | hitem | ¨ú±o flag ©Ò«ü©wªº¶µ¥Ø¥N½X¡A½Ð°Ñ¦Ò¨ú±o¶µ¥Øªº¸ê®Æ¡C | ½Ð°Ñ¦Ò¨ú±o¶µ¥Øªº¸ê®Æ¡C |
TVM_GETSCROLLTIME | 0 | 0 | ¨ú±o³Ì¤j±²°Ê®É¶¡ ( maximum scroll time )¡C³Ì¤j±²°Ê®É¶¡¬O«ü§¹¦¨±²°Ê©Òªáªº³Ìªø®É¶¡¡A¥H²@¬í¬°³æ¦ì¡C | ªð¦^Ȭ°³Ì¤j±²°Ê®É¶¡¡C |
TVM_GETTEXTCOLOR | 0 | 0 | Y¦¨¥\¡A¨ú±o¶µ¥Ø¦WºÙªºÃC¦â¡A¥H COLORREF §Î¦¡¦s©ó EAX¡FY¥¢±Ñ¡Aªð¦^ ¡Ð1¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_GETTOOLTIPS | 0 | 0 | ªð¦^®É¡AEAX ¬°¾ðª¬À˵øªº¤lµøµ¡¡A¤u¨ã´£¥Ü ( tool tip ) ªº¥N½X¡FY EAX ¬° NULL¡Aªí¥Ü¦¹¾ðª¬À˵ø¨S¦³¤u¨ã´£¥Ü¡C«Ø¥ß¾ðª¬À˵ø®É¡A¨t²Î·|¦Û°Ê¬°¨ä«Ø¥ß¤@Ó¤u¨ã´£¥Üªº¤lµøµ¡¡A°£«D¾ðª¬À˵ø¨ã¦³ TVS_NOTOOLTIPS ·®æ¡A¤~¤£«Ø¥ß¤u¨ã´£¥Ü¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_GETUNICODEFORMAT | 0 | 0 | ªð¦^«D¹sÈ¡Aªí¥Ü¾ðª¬À˵ø¨Ï¥Î¸U°ê½X¦r¤¸¡Fªð¦^ 0 È¡Aªí¥Ü¨Ï¥Î ANSI ¦r¤¸¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_GETVISIBLECOUNT | 0 | 0 | ¨ú±o¯à¦b¾ðª¬À˵ø¤¤¨£¨ì§¹¾ãªº¶µ¥ØӼơA³oӼƥإi¯à¤ñ¼Æª¬À˵øªº¶µ¥Ø¼ÆÁÙ¦h¡A¦]¬°¨t²Î¬O¥H¾ðª¬À˵øªº°ª«×°£¥H¶µ¥Ø°ª«×©Ò±oªº°Ó¡A¤wµL±ø¥ó±Ë¥hÅܾã¼Æ¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_HITTEST | 0 | lpht | Àˬd¬YÓÂI ( ¨ä®y¼Ð¥H¾ðª¬À˵ø¥ª¤W¨¤¬°ìÂI ) ¬O§_¦b¬YÓ¶µ¥Ø¤WªÅ¡CY¦b¬YÓ¶µ¥Ø¤W¡Aªð¦^®É¡AEAX ¬°¶µ¥Ø¥N½X¡F§_«h¬° NULL¡C°Ñ¦Ò«e±¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_INSERTITEM | 0 | lpis | ©ó¾ðª¬À˵ø¤¤·s²K¥[¤@Ó¶µ¥Ø¡Alpis ¬°«ü¦V TVINSERTSTRUCT µ²ºcÅé¦ì§}ªº«ü¼Ð¡A¸Ô²Ó¸ê®Æ½Ð°Ñ¦Ò¼W²K¶µ¥Ø¡C | ¦¨¥\®Éªð¦^¶µ¥Ø¥N½X¡F§_«h¬° NILL¡C |
TVM_MAPACCIDTOHTREEITEM | id | 0 | ¨C·í·s¼W¶µ¥Ø®É¡A¨t²Î·|¬°¦¹¶µ¥Ø«ü©w¤@Ó¥N½X¤ÎÃѧO½X ( accessibility ID )¡A¦¹°T®§¥i¥Ñ¶µ¥ØªºÃѧO½X¨ú±o¶µ¥Ø¥N½X¡C¥u¯à¦b XP ¤Î¨ä¥H¤Wªº¨t²Î¨Ï¥Î¡C | ªð¦^¶µ¥Ø¥N½X¡C |
TVM_MAPHTREEITEMTOACCID | htreeitem | 0 | ¥Ñ¶µ¥Ø¥N½XÀò±oÃѧO½X¡C¥u¯à¦b XP ¤Î¨ä¥H¤Wªº¨t²Î¨Ï¥Î¡C | ªð¦^¶µ¥ØÃѧO½X¡C |
TVM_SELECTITEM | flag | hitem | ¿ï©w hitem ©Ò«ü©wªº¶µ¥Ø¡A§â¥¦²¾¨ì¥i¨£°Ï°ì¤º¡A©Î¬O¦]©ì¦²°Ê§@¦Ó«Ã¸¡C½Ð°Ñ¦Ò«e±ªº»¡©ú¡C | ¦¨¥\®Éªð¦^ TRUE¡F§_«hªð¦^ FALSE¡C |
TVM_SETAUTOSCROLLINFO | uPixPerSec | uUpdateTime | ³]©w¦Û°Ê±²°Êªº©Ê½è¡AuPixPerSec ¬°¨C¬í±²°ÊÂI¼Æ¡A¥u¯à¦b Vista ¤Î¨ä¥H¤Wªº¨t²Î¨Ã¥B¨ã¦³ TVS_EX_AUTOHSCROLL ©µ¦ù·®æªº¾ðª¬À˵ø¤¤¨Ï¥Î¡C | ªð¦^ TRUE¡C |
TVM_SETBKCOLOR | 0 | clrBk | ³]©w¾ðª¬À˵øªºI´ºÃC¦â¬° clrBk¡AclrBk ªº¸ê®Æ§ÎºA¬O COLORREF¡AY clrBk ¬° ¡Ð1¡Aªí¥Ü¨Ï¥Î¨t²Î¤º©wÈ¡C | ªð¦^Ȭ°¥ý«eªºI´ºÃC¦â¡C |
TVM_SETEXTENDEDSTYLE | hwnd | messageID | ³]©w¾ðª¬À˵øªº©µ¦ù·®æ¡Ahwnd ¬O¾ðª¬À˵ø¥N½X¡AmessageID ¬On³]©wªº©µ¦ù·®æ¡A°Ñ¦Ò¤W±ªº»¡©ú¡C | ³]©w¦¨¥\ªð¦^ S_OK¡F¨ä¥LȪí¥Ü¥¢±Ñ¡C |
TVM_SETIMAGELIST | iImage | himl | °Ñ¦Ò¦b¶µ¥Ø«e¥[¤J¹Ï¤ù | ªð¦^ì¥ýªº image list ¥N½X¡C |
TVM_SETINDENT | indent | 0 | ³]©w¤l¶µ¥Ø¬Û¶Z¤÷¶µ¥ØªºÁY±ÆªºÂI¼Æ¡AY¦¹ÂI¼Æ¤p©ó¨t²Î¹w©w³Ì¤pÁY±ÆÂI¼Æ¡A«h¥H¨t²Î¹w©w³Ì¤pÁY±ÆÂI¼Æ¬°·Ç¡C¤@¯ë¦Ó¨¥¡A¨t²Î¹w©w³Ì¤pÁY±ÆÂI¼Æ¬° 5 ÂI¡A¦ý¤]¥i¯à¤£¬O¡Cn¨ú±o½T¤Áªº³Ì¤pÁY±ÆÂI¼Æ¡A¥i¥H¥ýµo¥X¨Ï undent ³]¦¨ 0¡Aµo¥X TVM_SETINDENT ¤§«á¡A¦Aµo¥X TVM_GETINDENT °T®§¡Aªð¦^ȧY¬°³Ì¤pÁY±ÆÂI¼Æ¡C | µL¡C |
TVM_SETINSERTMARK | fAfter | htiInsert | ¦pªG·Q§â¬YÓ¶µ¥Ø©ì¦²¨ì¾ðª¬À˵øªº³Ì¤U±¶µ¥Ø¤§¤U¡A³o®ÉÔ¦pªG¯à¦b³Ì«á¤@Ó¶µ¥Ø¤§¤U¥X²{¤@Ó°O¸¹ªí©ú¶µ¥Ø±N¦w´¡¦b³oùØ¡A¬O¤Íµ½¬É±ªº°µªk¡A³o¤]´N¬O´¡¤J°O¸¹ ( insert mark ) ¥¥¨|¦Ó¥Íªºì¦]¡CTVM_SETINSERTMARK ¥u¯àÅã²{¥X´¡¤J°O¸¹¨Ã¤£·|¯u¥¿·s²K¶µ¥Ø¡An¯u¥¿²K¥[¶µ¥Ønµo¥X TVM_INSERTITEM¡CTVM_SETINSERTMARK °T®§ªº htiInsert °Ñ¼Æ¬O«ü´¡¤J°O¸¹·|Åã¥Ü¦b³oÓ¶µ¥Ø©Ò¦b¤§³B¡A¦Ó fAfter ¬° TRUE¡Aªí¥Ü´¡¤J°O¸¹¦b³oÓ¶µ¥Ø¤§«á¡FY¬° FALSE¡Aªí¥Ü¤§«á¡C | ªð¦^«D¹s¡Aªí¥Ü¦¨¥\¡F§_«h¥¢±Ñ¡C |
TVM_SETINSERTMARKCOLOR | 0 | clrInsertMark | ³]©w´¡¤J°O¸¹ªºÃC¦â¡A¸ÓÃC¦â¬° clrInsertMark¡Cªð¦^®É¡AEAX ªº¬°ì¦³ªº´¡¤J°O¸¹ÃC¦â¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_SETITEM | 0 | pitem | ³]©w¬YÓ¶µ¥ØªºÄÝ©Ê¡A¦p¦WºÙ¡B¹Ï¤ùµ¥µ¥¡Cpitem ¬°µ²ºcÅé TVITEM ªº¦ì§}¡A©I¥s«e TVITEM ªº hItem «ü©wn³]©wªº¶µ¥Ø¥N½X¡Aimask Äæ¦ì«ü©wn³]©wªºÄæ¦ì¡A¦P®É°t¦X¬Û¹ïÀ³ªºÄæ¦ì¡C | ¦¨¥\®Éªð¦^ TRUE¡F¥¢±Ñ®Éªð¦^ FALSE¡C |
TVM_SETITEMHEIGHT | cyItem | 0 | ¦b¾ðª¬À˵øùØ¡A¨CÓ¶µ¥Ø§¡µ¥°ª¡C°£«D¨ã¦³ TVS_NONEVENHEIGHT ·®æ¡A¨ä°ª«×¤~¯à¬°©_¼ÆÂI¡CTVM_SETITEMHEIGHT ¬O¥Î¨Ó³]©w¨CÓ¶µ¥Øªº°ª«×¡A·sªº°ª«×¥i¦b cyItem ùØ«ü©w¡A¥HÂI¬°³æ¦ì¡C¦pªG cyItem ¬°©_¼Æ¡A¥B¤£¨ã TVS_NONEVENHEIGHT ·®æ¡A¨º»ò¨t²Î·|¦Û°Ê¨Ï cyItem ´î¤@¡CY cyItem ¬° ¡Ð1¡A«h¨t²Î·|«ì´_¹w³]È¡C | ªð¦^ì¥ý°ª«×¡A¥HÂI¬°³æ¦ì¡C |
TVM_SETLINECOLOR | 0 | clr | ³]©w¶µ¥Ø¤§¶¡ªº½u¬qÃC¦â¡A¥H clr ªí¥Ü¡CY clr ¬° CLR_DEFAULT¡A«h³]¬°¨t²Î¹w³]ªºÃC¦â¡Cn¨ú±o![]() ![]() |
ªð¦^ì¥ýÃC¦â¡C |
TVM_SETSCROLLTIME | uScrollTime | 0 | ³]©w³Ì¤j±²°Ê®É¶¡¡CuScrollTime ¬°³Ì¤j±²°Ê®É¶¡¡A¥H²@¬í¬°³æ¦ì¡Aªð¦^ì¥ý³Ì¤j±²°Ê®É¶¡¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_SETTEXTCOLOR | 0 | clrText | ³]©w¤å¦rÃC¦â¡AclrText ¤å¦rÃC¦â¡Aªð¦^ì¥ý¤å¦rÃC¦â¡CY clrText ¬°¡Ð1¡A«h¨t²Î·|«ì´_¹w³]È¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_SETTOOLTIPS | hwndTooltip | 0 | ³]©w¾ðª¬À˵øªº¤lµøµ¡¡A¤u¨ã´£¥Ü¡A¨ä¤u¨ã´£¥Ü¥N½X¦s©ó hwndTooltip¡Cªð¦^Ȭ°ì¥ý¤u¨ã¥N½X¡AYªð¦^Ȭ° NULL¡A«hªí¥Üì¥ýµL¤u¨ã´£¥Ü¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_SETUNICODEFORMAT | fUnicode | 0 | Y fUnicode ¬°«D¹sÈ¡A³]©w¾ðª¬À˵ø¨Ï¥Î¸U°ê½X¡FY¬°¹s¡A«h¨Ï¥Î ANSI¡Cªð¦^Ȭ°ì¥ý¦r¶°¡C | °Ñ¦Ò¥ªÄæ¡C |
TVM_SHOWINFOTIP | 0 | hitem | Åã¥Ü hitem ¶µ¥Øªº¤u¨ã´£¥Ü¡C«Ü¤Öµ{¦¡¥Î¦¹°T®§¡A¦]¬°¤j³¡¤Àªº±¡§Î¤U¡A¨t²Î·|¦Û°ÊÅã¥Ü¤u¨ã´£¥Ü¡C | ªð¦^ 0¡C |
TVM_SORTCHILDREN | fRecurse | hitem | ¹ï«ü©wªº hitem ¶µ¥Ø¤§¤Uªº¤l¶µ¥Ø°µ±Æ§Ç¡CY fRecurse ¬° TRUE ®É¡A¨t²Î·|¹ï hitem ©Ò¦³¶¥¼hªº¤l¶µ¥Ø°µ±Æ§Ç¡FY fRecurse ¬° FALSE ®É¡A¶È¹ï¤U¤@¶¥¼hªº¤l¶µ¥Ø±Æ§Ç¡C | ¦¨¥\®Éªð¦^ TRUE¡F¥¢±Ñ®Éªð¦^ FALSE¡C |
TVM_SORTCHILDRENCB | 0 | psort | ¥Hµ{¦¡³]p®v©Ò©w¸qªº call back ¨ç¦¡±Æ§Ç¡A¦¹¨ç¦¡ºÙ¤ñ¸û¨ç¦¡¡A¨ä¦ì§}¦s©ó TVSORTCB µ²ºcÅ餤ªº lpfnCompare Äæ¦ì¡A¦Ó psort «h¬° TVSORTCB ªº¦ì§}¡CTVSORTCB ªº¦UÄæ¦ì¬O¡GTVSORTCB STRUCT hParent HTREEITEM ? lpfnCompare PFNTVCOMPARE ? lParam LPARAM ? TVSORTCB ENDShParent ¤÷¶µ¥Ø¥N½X¡A¦b¦¹¤÷¶µ¥Ø¤§¤U¤@¶¥¼hªº¤l¶µ¥Ø·|³Q±Æ§Ç¡F²Ä¤TÓÄæ¦ì¡Alparam¡A·|¶Çµ¹¤ñ¸û¨ç¦¡ªº²Ä¤TӰѼơAlParamSort¡A§@¬°±Æ§Ç¤è¦¡¡C¤ñ¸û¨ç¦¡ªºì«¬¬O¡G CompareFunc PROTO lParam1:LPARAM, lParam2:LPARAM, lParamSort:LPARAM¨ä¥L§ó²Ó¸`ªº³¡¥÷¥i°Ñ¦Ò²Ä 22 ³¹²M³æÀ˵øªº±Æ§Ç³¡¥÷¡C |
¦¨¥\®Éªð¦^ TRUE¡F¥¢±Ñ®Éªð¦^ FALSE¡C |
¾ðª¬À˵øµ¥³q¥Î±±¨î¶µ¬O¥H WM_NOTIFY °T®§»P¤÷µ{¦¡·¾³q¡A¨ä°T®§¤¤ªº wParam ¬Oµo¥X WM_NOTIFY ªº±±¨î¶µÃѧO½X¡A¤£¹LÃѧO½X¥i¥H«½Æ¡A¦]¦¹³Ì¦nÁÙ¬OnÀˬdµo¥X WM_NOTIFY ªº±±¨î¶µ¥N½X¤~¦n¡ClParam ¬O¤@Ó«ü¼Ð¡A¦¹«ü¼Ð«ü¦V¬YÓµ²ºcÅ骺¦ì§}¡A³oÓµ²ºcÅé»P³qª¾½X¦³Ãö¡A¤£¹L¦¹µ²ºcÅ骺«e¤TÓÂù¦r²ÕÄæ¦ì¦XºÙ NMHDR¡A¨ä«á¤]¥i¯àÁÙ¥]§t¨ä¥LÄæ¦ì¡A©³¤U¬O²²¤¤º®e¡G
³o¤KÓ³qª¾½X¬O©Ò¦³³q¥Î±±¨î¶µ¡A¥]§t¾ðª¬À˵ø¡A³£¯àµo¥Xªº¡A½Ð°Ñ¦Ò²Ä¤G¤Q¤@³¹ªºWM_NOTIFY °T®§¡C
Y·Æ¹«´å¼Ð¦b¬YÓµøµ¡²¾°Ê¥B·Æ¹«¥¼³Q®·Àò®É ( ©I¥s SetCapture ¥i®·Àò·Æ¹«°T®§ )¡A¨t²Î´N·|§â WM_SETCURSOR °T®§µo°eµ¹¸Óµøµ¡ªºµøµ¡¨ç¦¡¡C¦ý¾ðª¬À˵ø³q±`¬O¬YÓµøµ¡ªº¤lµøµ¡¡A©Ò¥H¾ðª¬À˵øÅÜ·|µo¥X WM_NOTIFY °T®§µ¹¾ðª¬À˵øªº¤÷µøµ¡¡A¦Ó WM_NOTIFY °T®§ªº³qª¾½X§Y¬° NM_SETMOUSE¡CWM_NOTIFY ªº lParam °Ñ¼Æ¬O«ü¦V NMMOUSE µ²ºcÅ骺¦ì§}¡ANMMOUSE µ²ºcÅ骺¦UÄæ¦ì¬O¡G
NMMOUSE STRUCT hdr NMHDR <> dwItemSpec DD ? dwItemData DD ? pt POINT <> dwHitInfo DD ? NMMOUSE ENDS
·í¾ðª¬À˵ø´yø¹Ï¥Ü©Î«Å|¹Ï¥Ü¥X¿ù¥B¨ã¦³ TVS_EX_DRAWIMAGEASYNC ©µ¦ù·®æ®É¡Aµo¥X¦¹³qª¾½Xµ¹¤÷µøµ¡¡C§¹¦¨¦¹³qª¾½X«á¤£»Ýªð¦^È¡A§Y¥iªð¦^¡C¦¹³qª¾½Xªº lParam °Ñ¼Æ«ü¦V NMTVASYNCDRAW µ²ºcÅé¡A¨äÄæ¦ì¬O¡G
NMTVASYNCDRAW STRUCT hdr NMHDR <> pimldp IMAGELISTDRAWPARAMS <> hr HRESULT ? hItem HTREEITEM ? lParam LPARAM ? dwRetFlags DWORD ? iRetImageIndex DWORD ? NMTVASYNCDRAW ENDS
¨Ï¥ÎªÌ¤w¸gÀ£¦í·Æ¹«¥ªÁ䤣©ñ¡A·Ç³Æ©ì¦²°Ê§@®É¡A¾ðª¬À˵ø´N·|µo¥X TVN_BEGINDRAG ³qª¾½Xµ¹¨ä¤÷µøµ¡¡C¨ä lParam °Ñ¼Æ«ü¦V NMTREEVIEW µ²ºcÅé¦ì§}¡CNMTREEVIEW µ²ºcÅéº٬O NM_TREEVIEW µ²ºcÅé¡A¨äÄæ¦ì¬O¡G
NMTREEVIEW STRUCT hdr NMHDR <> action DWORD ? itemOld TVITEM <> itemNew TVITEM <> ptDrag POINT <> NMTREEVIEW ENDS
hdr µ²ºcÅéÀ³¤£¥Î¦A»¡©ú¤F¡A½Ð°Ñ¦Ò²Ä 21 ³¹¡AWM_NOTIFY ªº³¡¥÷¡Caction ¥u¥Î©ó TVN_ITEMEXPANDING¡BTVN_ITEMEXPANDED¡BTVN_SELCHANGING¡BTVN_SELCHANGED ³qª¾½X¡A¦b TVN_BEGINDRAG ¤¤¤£¨Ï¥Î¡CitemOld ©M itemNew ¨âÓµ²ºcÅé¡A¤À§O¬Oì¨Ó¶µ¥Ø©M·s¶µ¥Øªºª¬ºA¡A¨ä¤¤ itemNew ¤¤ªº hItem¡Bstate ©M lParam ¦b¶}©l©ì¦²®É¡A¥i´£¨Ñ¤@¨Ç¸ê°T ( TVITEM ½Ð°Ñ¦Ò³oùØ )¡CptDrag ¥i¦b¶}©l©ì¦²®É¡A´£¨Ñ·Æ¹«¬Û¹ï©ó¿Ã¹õ¥ª¤W¨¤ªº®y¼Ð¡C³B²z§¹¦¹³qª¾½X¡Aªð¦^È·|³Q¨t²Î©¿²¤¡CY¬O¾ðª¬À˵ø¨ã¦³ TVS_DISABLEDRAGDROP ·®æ¡A«h¨ä¤÷µøµ¡¤£¯à±µ¦¬¨ì TVN_BEGINDRAG¡C¦Ü©ó¹ê»Ú³B²z©ì¦²°Ê§@ªº¨BÆJ¡A½Ð°Ñ¦Ò©ì¦²¶µ¥Ø¡C
°Ñ¦Ò´N¦a½s¿è¶µ¥Ø¦WºÙ¡C
¨Ï¥ÎªÌ¤w¸gÀ£¦í·Æ¹«¥kÁ䤣©ñ¡A·Ç³Æ©ì¦²°Ê§@®É¡A¾ðª¬À˵ø´N·|µo¥X TVN_BEGINDRAG ³qª¾½Xµ¹¨ä¤÷µøµ¡¡C¨ä¾l§¡»P TVN_BEGINDRAG ¬Û¦P¡C
·í¾ðª¬À˵ø§R°£¬YÓ¶µ¥Ø®É¡A´N·|µo¥X TVN_DELETEITEM ³qª¾½Xµ¹¤÷µøµ¡¡C³B²z§¹¦¹³qª¾½X¡Aªð¦^È·|³Q¨t²Î©¿²¤¡C¦¹³qª¾½Xªº lParam «ü¦V NMTREEVIEW µ²ºcÅé¡A¨ä itemOld ¤¤ªº hItem¡BlParam ¥]§t¤F³Q§R°£¶µ¥Øªº¸ê®Æ¡C
¦b¤j³¡¥÷®ÉÔ¡A¾ðª¬À˵ø¤ºªº¶µ¥Ø¸ê®Æ¡A¨Ò¦p¹Ï¥Ü¡B¦WºÙµ¥µ¥¡A¬O¥Ñ§@·~¨t²Ît³dºûÅ@¡A¦ý¬O¤]¥i¥H¥æ¥Ñµ{¦¡¦Û¦æºûÅ@¡C¦pªG¥æ¥Ñµ{¦¡¦Û¦æºûÅ@¶µ¥Øªº¸ê®Æ¡A¨º»ò·í¾ðª¬À˵ønÅã¥Ü³o¨Ç¸ê®Æ®É¡A´N·|µo¥X TVN_GETDISPINFO ³qª¾½X¡An¨Dµ{¦¡´£¨Ñ³o¨Ç¸ê®Æ¡C³o¨Ç¸ê®ÆÀ³¥Ñ¤÷µøµ¡ªºµøµ¡¨ç¦¡¡A¶ñ¤J NMTVDISPINFO µ²ºcÅ餺¡C¦Ó NMTVDISPINFO µ²ºcÅ骺¦ì§}«h¦s©ó lParam °Ñ¼ÆùØ¡C¨ä¤¤ item Äæ¦ì¬O¤@ÓºÙ¬° TVITEM ªºµ²ºcÅé¡ATVITEM ùتº imask¡BhItem¡Bstate ©M lParam ¥²¶·¶ñ¤J¾A·íªº¼ÆÈ¡C¦^À³§¹ TVN_GETDISPINFO ³qª¾½X¡A¨t²Î·|©¿²¤ªð¦^È¡C
©³¤U¬O´XºØ¾ðª¬À˵ø·|µo¥X TVN_GETDISPINFO ³qª¾½Xªº±¡§Î¡G
¨ã¦³ TVS_INFOTIP ·®æªº¾ðª¬À˵ø¡A¦b·Æ¹«²¾¹L¬YÓ¶µ¥Ø¤WªÅ®É¡A¾ðª¬À˵ø·|µo°e TVN_GETINFOTIP ³qª¾½Xµ¹¤÷µøµ¡¡C¦¹³qª¾½Xªº lParam «ü¦V NMTVGETINFOTIP µ²ºcÅé¦ì§}¡CNMTVGETINFOTIP µ²ºcÅ骺¦UÄæ¦ì¬O¡G
NMTVGETINFOTIP STRUCT hdr NMHDR <> pszText LPTSTR ? cchTextMax DWORD ? hItem HTREEITEM ? lParam LPARAM ? NMTVGETINFOTIP ENDS
NMTVGETINFOTIP µ²ºcÅ餤ªº pszText ¬O«ü¦V¥H 0 µ²§Àªº¦r¦ê¦ì§}¡A³oÓ¦r¦ê±N·|Åã¥Ü¦b¤u¨ã´£¥Üªº¤º®eùØ¡CcchTextMax «h¬O¸Ó¦r¦êªºªø«×¡A¦pªG¥H 0 µ²§À¡A«h cchTextMax ·|³Q©¿²¤¡ChItem ¬O·Æ¹«´å¼Ð©Ò¦bªº¶µ¥Øªº¶µ¥Ø¥N½X¡A¥Ñ§@·~¨t²Î¶ñ¦n¡C³B²z§¹ TVN_GETINFOTIP «á¡Aªð¦^®É¡A¨t²Î©¿²¤ªð¦^È¡C
·í¾ðª¬À˵ø¤ºªº¬YÓ¶µ¥Ø¸ê®Æ±Nn§ïÅܮɡA¾ðª¬À˵ø·|µo¥X TVN_ITEMCHANGING ³qª¾½Xµ¹¤÷µøµ¡¡F¤w¸g§ïÅܧ¹¦¨«á¡A«hµo¥X TVN_ITEMCHANGED ³qª¾½X¡C¨âªÌªð¦^®É¡Aªð¦^ TRUE ªí¥Ü©Úµ´§ïÅÜ¡FFALSE ªí¥Ü±µ¨ü§ïÅÜ¡C³o¨âÓ³qª¾½Xªº lParam «ü¦V NMTVITEMCHANGE µ²ºcÅé¡A¨äÄæ¦ì¬O¡G
NMTVITEMCHANGE STRUCT hdr NMHDR <> uChanged DWORD ? hItem HTREEITEM ? uStateNew DWORD ? uStateOld DWORD ? lParam LPARAM ? NMTVITEMCHANGE ENDS
Äæ¦ì¤¤ªº uChanged ¬O«ü§ïÅÜþ¤@ºØ¸ê®Æ¡AÁöµM»¡¡A¬YÓ¶µ¥Ø¸ê®Æ±Nn§ïÅÜ«e¡B«á¡Aµo¥X TVN_ITEMCHANGING ©Î TVN_ITEMCHANGED¡A¦ý¬O¥u¦³ª¬ºA§ïÅܮɡA¤~·|µo¥X³o¨âÓ³qª¾½X¡A¨ä¾l¸ê®Æ§ïÅܨ䣷|µo¥X³o¨âÓ³qª¾½X¡A¦]¦¹ uChanged ¥u¯à¬O TVIF_STATE¡ChItem ¬Oª¬ºA¾D¨ì§ïÅܪº¶µ¥Ø¥N½X¡CuStateNew¡BuStateOld ¬O§ïÅܫ᪬ºA¤Î§ïÅÜ«eª¬ºA¡C
·í¨Ï¥ÎªÌ¥H·Æ¹«ÂIÀ»¶µ¥Ø«eªº©Î
®É¡A·|¨Ï¸Ó¶µ¥Ø¤Uªº¤l¶µ¥Ø®i¶}©Î¦¬Ãl°_¨Ó¡A¦b§Y±N®i¶}©Î¦¬Ãl°_¨Ó¡A©|¥¼Åã¥Ü·sªºµe±«e¡A¾ðª¬À˵ø·|µo¥X TVN_ITEMEXPANDING ³qª¾½Xµ¹¤÷µøµ¡¡F¦b®i¶}©Î¦¬Ãlµe±§¹¦¨«á¡A«hµo¥X TVN_ITEMEXPANDED ³qª¾½X¡C³o¨âÓ³qª¾½Xªº lParam §¡«ü¦V NMTREEVIEW µ²ºcÅé ( ¤]ºÙ¬° NM_TREEVIEW¡A¨ä¦UÓÄæ¦ì¥i°Ñ¦Ò«e±ªº»¡©ú )¡A¨ä¤¤ itemNew ¤º§t®i¶}©Î¦¬Ãlªº¤÷¶µ¥Ø¸ê®Æ¡A¦ý¥u¦³ itemNew ùتº hItem¡Bstate ¤Î lParam Äæ¦ì¦³¥Î¡Caction ¬° TVE_EXPAND¡Aªí¥Ü¶µ¥Ø³Q®i¶}¡FY¬° TVE_COLLAPSE¡Aªí¥Ü¶µ¥Ø³Q¦¬Ãl¡C
TVN_ITEMEXPANDED ªºªð¦^È¡A·|³Q¨t²Î©¿²¤¡C¦Ó TVN_ITEMEXPANDING ªºªð¦^Ȭ° TRUE ®É¡Aªí¥Ü¸T¤î®i¶}©Î¦¬Ãl¡FFALSE ªí¥Ü¤¹³\®i¶}©Î¦¬Ãl¡C
·í¾ðª¬À˵ø¨ã¦³¿é¤JµJÂI®É¡A¨Ï¥ÎªÌ«ö¤UÁä½L¤Wªº«öÁä¡A¾ðª¬À˵ø·|µo¥X TVN_KEYDOWN ³qª¾½Xµ¹¤÷µøµ¡¡A¦pªG¤÷µøµ¡ªºµøµ¡¨ç¦¡¤£³B²z TVN_KEYDOWN¡A¦Ó¨Ï¥ÎªÌ«ö¤Uªº¤S¬O¥i¥Nªí¤å¦rªº«öÁä¡A¨Ò¦p A¡BB¡BC¡Kµ¥«öÁä¡A«h¾ðª¬À˵ø·|¨Ï½ü¬y¨Ï¶µ¥Ø¦WºÙ²Ä¤@Ó¦r¥À¬°¸Ó«öÁ䪺¶µ¥ØÅܬ°³Q¿ï©wªº¶µ¥Ø¡C¦ý¤]¥i¥H¨Ï¾ðª¬À˵ø¤£¶i¦æ¤Wz°Ê§@¡A¨Ïªð¦^Ȭ°«D¹s´N¯à¹F¨ì¦¹¥Øªº¡C( ªð¦^È¥²¶·©I¥s SetWindowLong¡A¨Ã¥B³]©w DWL_MSGRESULT ºX¼Ð¤~¯à¶Ç¦^¨t²ÎùØ )
TVN_KEYDOWN ³qª¾½Xªº lParam «ü¦V¤@ÓºÙ¬° NMTVKEYDOWN µ²ºcÅé ( º٬° TV_KEYDOWN )¡A¨äÄæ¦ì¬O¡G
NMTVKEYDOWN STRUCT hdr NMHDR <> wVKey WORD ? flags DWORD ? NMTVKEYDOWN ENDS
NMTVKEYDOWN ¤¤ªº flags ³q±`¬O 0¡CwVKey ¬OµêÀÀÁä½X ( virtual-key codes )¡C
·í¨Ï¥ÎªÌ°µ¥H¤U¨â¥ó¨Æ¤¤ªº¥ô¤@ºØ¡A´N·|¨Ï¾ðª¬À˵ø¤¤ªº¬YÓ¶µ¥Ø³Q¿ï¨ú¡G
·í³Q¿ï¨úªº¶µ¥Ø¡A¤w¸g§ó´«¦¨¥t¤@Ó¶µ¥Ø«á¡A«hµo¥X TVN_SELCHANGED ³qª¾½Xµ¹¤÷µøµ¡¡ClParam «ü¦V NMTREEVIEW µ²ºcÅé¡A¦¹µ²ºcÅ餤ªº itemOld »P itemNew ¨âÄæ¦ì¡A¤À§Oªí¥Üì¥ý³Q¿ï©wªº¶µ¥Ø©M·sªº¿ï©w¶µ¥Ø¡C¦Ó¥B itemOld »P itemNew ùØ¡A¥u¦³ mask¡BhItem¡Bstate »P lParam Äæ¦ì¦³®Ä¥i¥Î¡Caction Äæ¦ìªí¥Ü¥HþºØ¤è¦¡¿ï©w¶µ¥Ø¡A¥i¥H¬O¤U±¤TºØ¨ä¤¤¤§¤@¡GTVC_BYKEYBOARD ( ¥HÁä½L¿ï©w )¡BTVC_BYMOUSE ( ¥H·Æ¹«ÂIÀ»¿ï©w ) ©M TVC_UNKNOWN ( ¥¼ª¾¤è¦¡ )¡C³Ì«á¡Aªð¦^È·|³Q¨t²Î©¿²¤¡C
·í³Q¿ï¨úªº¶µ¥Ø¡A±Nn§ó´«¦¨¥t¤@Ó¶µ¥Ø¡A©|¥¼Åã¥Ü·s¿ï©wªº¶µ¥Ø«e¡A¾ðª¬À˵ø·|µo¥X TVN_SELCHANGING ³qª¾½Xµ¹¤÷µøµ¡¡ClParam «ü¦V NMTREEVIEW µ²ºcÅé¡A¦¹µ²ºcÅ餤ªº itemOld »P itemNew ¨âÄæ¦ì¡A¤À§Oªí¥Üì¥ý³Q¿ï©wªº¶µ¥Ø©M·sªº¿ï©w¶µ¥Ø¡Caction Äæ¦ìªí¥Ü¥HþºØ¤è¦¡¿ï©w¶µ¥Ø¡A»P TVN_SELCHANGED ¬Û¦P¡C³B²z³oÓ³qª¾½X®É¡A¤£¥i±Nì¨Ó³Q¿ï©w©Î·sªº¿ï©w¶µ¥Ø§R°£¡C
³B²z TVN_SELCHANGING «á¡AYªð¦^ TRUE¡Aªí¥Ü¤£±µ¨üÅܧó¿ï©w¶µ¥Ø¡Fªð¦^ FALSE¡Aªí¥Ü±µ¨ü¿ï©w¶µ¥Ø¡C¦pªG TVN_SELCHANGING ¬Oµo°e¨ì¹ï¸Ü²°ªºµøµ¡¨ç¦¡¡A¨º»ò¥²¶·©I¥s SetWindowLong API ³]©wªð¦^È¡C
·í¾ðª¬À˵ø»ÝnÅã¥Ü¶µ¥Ø¦WºÙ¡B¹ï¶µ¥Ø¦WºÙ±Æ§Ç¡B½s¿è¶µ¥Ø¦WºÙ©ÎªÌ·í¶µ¥Ø¦WºÙ§ïÅܮɡA·|µo°e TVN_SETDISPINFO ³qª¾½Xµ¹¤÷µøµ¡¡A¤÷µøµ¡¶·¶ñ¦n lParam ©Ò«üªº NMTVDISPINFO µ²ºcÅ餺 item Äæ¦ìùØ imask ©Ò«ü¥ÜªºÄæ¦ì¡C¨Ò¦p¡A¦pªG NMTVDISPINFO.item.imask ¬° TVIF_TEXT¡A¨º»ò¤÷µøµ¡ªºµøµ¡¨ç¦¡´NÀ³¸Ó§â NMTVDISPINFO.item.psaText ¶ñ¤J¦r¦ê¦ì§}¡A¥H§ó§ï¶µ¥Ø¦WºÙ¡C
·í¨Ï¥ÎªÌ¥H·Æ¹«³æÀ»¨ã¦³ TVS_SINGLEEXPAND ·®æªº¾ðª¬À˵ø¤¤ªº¬YÓ¶µ¥Ø®É¡A¾ðª¬À˵ø·|µo¥X TVN_SINGLEEXPAND ³qª¾½Xµ¹¤÷µøµ¡¡C¤£¨ã TVS_SINGLEEXPAND ·®æªº¾ðª¬À˵ø¡A¤£·|µo¥X TVN_SINGLEEXPAND ³qª¾½X¡ClParam «ü¦V NMTREEVIEW µ²ºcÅé¡A³oÓµ²ºcÅé¥]§t©Ò»Ý¸ê®Æ¡C
ªð¦^Ȭ° TVNRET_DEFAULT ®É¡Aªí¥Ü¥H¤º©wªº¤è¦¡°õ¦æ®i¶}©Î¦¬Ãl¡A§Y¶µ¥Ø³£·|³Q¦¬Ãl°_¨Ó¡A¥u¦³³Q¿ï¨ú¶µ¥Ø©³¤Uªº¤l¶µ¥Ø®i¶}¡F¦Ó¥B·Æ¹«ÂIÀ»¬Y¶µ¥Ø¤@¦¸´N¯à®i¶}¤l¶µ¥Ø¡A¦AÂIÀ»¸Ó¶µ¥Ø´N¦¬Ãl¡CYªð¦^Ȭ° TVNRET_SKIPOLD ®É¡Aªí¥Ü¸õ¹L¥¼³Q¿ï©w¶µ¥Ø¦¬Ãlªº¨BÆJ¡FYªð¦^Ȭ° TVNRET_SKIPNEW ®É¡Aªí¥Ü¸õ¹L³Q¿ï©w¶µ¥Ø®i¶}ªº¨BÆJ¡C
¨Ì©¹¨Ò¡A¤p¤ì°¸¼¶¼g¤@Ó¾ðª¬À˵øªº¨Ò¤l¡AHDINFO2¡A®i¥Ü¾ðª¬À˵øªº°ò¥»¥Îªk¡CHDINFO2 ¥i¥H§â¹q¸£¤Wªº¹êÅéºÏºÐ·í¦¨¶µ¥ØÅã¥Ü¦b¾ðª¬À˵ø¤º¡A¨Ã§â¨CÓ¹êÅéºÏºÐ¤À³Î¦Ó¦¨ªºÅÞ¿èºÏºÐ¬°¨ä¤l¶µ¥Ø¡C¦Ó¨CÓÅÞ¿èºÏºÐªº¥Ø¿ý©ÎÀɮסA¬°ÅÞ¿èºÏºÐªº¤l¶µ¥Ø¡A¦p¤U¹Ï¡G
©³¤U¬O¸ê·½´yzÀÉ¡AHDINFO2.RC ªº¤º®e¡G
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 |
#include "c:\masm32\include\resource.h"
#define RT_MANIFEST 24
#define IDC_TREEVIEW 1600
#define IDC_TEXT 1601
#define IDK_RENAME 1602
#define TVS_NOHSCROLL 0x8000
Hd_Info DIALOG 100,100,200,150
STYLE WS_CAPTION|WS_VISIBLE|WS_SYSMENU
FONT 10,"·s²Ó©úÅé"
CAPTION "µwºÐ¸ê°T"
BEGIN
CONTROL "",IDC_TREEVIEW,"SysTreeView32",WS_BORDER|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_INFOTIP|TVS_EDITLABELS,
5,5,110,140
LTEXT "",IDC_TEXT ,120,5,75,140
END
1 RT_MANIFEST MOVEABLE PURE "HDINFO2.EXE.MANIFEST"
COMPUTER ICON COMPUTER.ICO
HARDDISK ICON HARDDISK.ICO
FOLDER ICON FOLDER.ICO
FILE ICON FILE.ICO |
©³¤U¬O HDINFO2.EXE.MANIFEST ªº¤º®e¡G
1 2 3
4 5 6 7
8 9 10 11
12 13 14 |
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32'
name='Microsoft.Windows.Common-Controls'
version='6.0.0.0'
processorArchitecture='*'
publicKeyToken='6595b64144ccf1df'
language='*'
/>
</dependentAssembly>
</dependency>
</assembly> |
ì©l½X¡AHDINFO2.ASM ¦p¤U¡G
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 32 33
34 35 36 37
38 39 40 41
42 43 44 45
46 47 48 49
50 51 52 53
54 55 56 57
58 59 60 61
62 63 64 65
66 67 68 69
70 71 72 73
74 75 76 77
78 79 80 81
82 83 84 85
86 87 88 89
90 91 92 93
94 95 96 97
98 99
100 101 102 103
104 105 106 107
108 109 110 111
112 113 114 115
116 117 118 119
120 121 122 123
124 125 126 127
128 129 130 131
132 133 134 135
136 137 138 139
140 141 142 143
144 145 146 147
148 149 150 151
152 153 154 155
156 157 158 159
160 161 162 163
164 165 166 167
168 169 170 171
172 173 174 175
176 177 178 179
180 181 182 183
184 185 186 187
188 189 190 191
192 193 194 195
196 197 198 199
200 201 202 203
204 205 206 207
208 209 210 211
212 213 214 215
216 217 218 219
220 221 222 223
224 225 226 227
228 229 230 231
232 233 234 235
236 237 238 239
240 241 242 243
244 245 246 247
248 249 250 251
252 253 254 255
256 257 258 259
260 261 262 263
264 265 266 267
268 269 270 271
272 273 274 275
276 277 278 279
280 281 282 283
284 285 286 287
288 289 290 291
292 293 294 295
296 297 298 299
300 301 302 303
304 305 306 307
308 309 310 311
312 313 314 315
316 317 318 319
320 321 322 323
324 325 326 327
328 329 330 331
332 333 334 335
336 337 338 339
340 341 342 343
344 345 346 347
348 349 350 351
352 353 354 355
356 357 358 359
360 361 362 363
364 365 366 367
368 369 370 371
372 373 374 375
376 377 378 379
380 381 382 383
384 385 386 387
388 389 390 391
392 393 394 395
396 397 398 399
400 401 402 403
404 405 406 407
408 409 410 411
412 413 414 415
416 417 418 419
420 421 422 423
424 425 426 427
428 429 430 431
432 433 434 435
436 437 438 439
440 441 442 443
444 445 446 447
448 449 450 451
452 453 454 455
456 457 458 459
460 461 462 463
464 465 466 467
468 469 470 471
472 473 474 475
476 477 478 479
480 481 482 483
484 485 486 487
488 489 490 491
492 493 494 495
496 497 498 499
500 501 502 503
504 505 506 507
508 509 510 511
512 513 514 515
516 517 518 519
520 521 522 523
524 525 526 527
528 529 530 531
532 533 534 535
536 537 538 539
540 541 542 543
544 545 546 547
548 549 550 551
552 553 554 555
556 557 558 559
560 561 562 563
564 565 566 567
568 569 570 571
572 573 574 575
576 577 578 579
580 581 582 583
584 585 586 587
588 589 590 591
592 593 594 595
596 597 598 599
600 601 602 603
604 605 606 607
608 609 610 611
612 613 614 615
616 617 618 619
620 621 622 623
624 625 626 627
628 629 630 631
632 633 634 635
636 |
.586
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
INCLUDE WINDOWS.INC
INCLUDE COMCTL32.INC
INCLUDE KERNEL32.INC
INCLUDE USER32.INC
INCLUDELIB COMCTL32.LIB
INCLUDELIB KERNEL32.LIB
INCLUDELIB USER32.LIB
INCLUDELIB HD.LIB ;°Ñ¦Òªþ¿ý¤»©Ò»s¦¨ªº°ÊºA³sµ²µ{¦¡®w
GetLogicalDriveFromPhysicalDrive PROTO :LPSTR
IDC_TREEVIEW EQU 1600
IDC_TEXT EQU 1601
IOCTL_DISK_GET_DRIVE_GEOMETRY_EX EQU 700a0h
MEDIA_TYPE TYPEDEF DWORD
TVINSERTSTRUCT TYPEDEF TV_INSERTSTRUCT ;°t¦X1.60ª©ªºWINDOWS.INC¡A¦¹ª©¥]§t¦bMASM32 v11ùØ
;DISK_GEOMETRY¡BDISK_GEOMETRY_EX³o¨âÓµ²ºcÅé¡A¨S¦³¦b1.60ª©ªº
;WINDOWS.INC¤¤©w¸q¡A¬G¦b¦¹©w¸q¡A¥LÌ»P¨ú±o¹êÅéºÏºÐªº¸ê®Æ¦³Ãö
DISK_GEOMETRY STRUCT
Cylinders LARGE_INTEGER <>
MediaType MEDIA_TYPE ?
TracksPerCylinder DWORD ?
SectorsPerTrack DWORD ?
BytesPerSector DWORD ?
DISK_GEOMETRY ENDS
DISK_GEOMETRY_EX STRUCT
Geometry DISK_GEOMETRY <>
DiskSize LARGE_INTEGER <>
DataOne BYTE ?
DISK_GEOMETRY_EX ENDS
;***************************************************************************************************
.CONST
szDlgName BYTE "HdInfo",0 ;¹ï¸Ü²°¦WºÙ
szIconComputer BYTE "COMPUTER",0 ;¹q¸£¹Ï¥Ü
szIconHardisk BYTE "HARDDISK",0 ;µwºÐ¹Ï¥Ü
szIconFolder BYTE "FOLDER",0 ;¤l¥Ø¿ý¹Ï¥Ü
szIconFile BYTE "FILE",0 ;Àɮ׹ϥÜ
szIconOpnFolder BYTE "OPENFOLDER",0 ;¶}±Òªº¤l¥Ø¿ý¹Ï¥Ü
szRootItem BYTE "¹q¸£¤¤ªºµwºÐ",0
szHdInfoFmt BYTE "¹êÅéºÏºÐ %d",0dh,0ah
BYTE "ºÏ¬W¼Æ¡G%I64d",0dh,0ah,"ºÏÀY¼Æ¡G%d",0dh,0ah,"¨CºÏyªººÏ°Ï¼Æ¡G%d",0dh,0ah
BYTE "¨CºÏ°Ï¦ì¤¸²Õ¼Æ¡G%d",0dh,0ah,"ºÏºÐ®e¶q¡G%d GB",0
szLogInfoFmt0 BYTE "ºÏºÐ%c:",0dh,0ah,"Á`¦@®e¶q¡G%d GB",0dh,0ah,"³Ñ¤U%d GB ¥i¥Î",0
szLogInfoFmt1 BYTE "ºÏºÐ%c:",0dh,0ah,"Á`¦@®e¶q¡G%d MB",0dh,0ah,"³Ñ¤U%d MB ¥i¥Î",0
szFileInfoFmt BYTE "Àɮפj¤p¡G",0dh,0ah,"%I64d¦ì¤¸²Õ",0dh,0ah,0dh,0ah,0
szDate0Fmt BYTE "«ØÀɮɶ¡¡G",0dh,0ah,"yyyy/MM/dd",0
szDate1Fmt BYTE "³Ì«á¦s¨ú®É¶¡¡G",0dh,0ah,"yyyy/MM/dd",0
szDate2Fmt BYTE "³Ì«áקï®É¶¡¡G",0dh,0ah,"yyyy/MM/dd",0
szTimeFmt BYTE " HH:mm:ss",0dh,0ah,0dh,0ah,0
szThisIsCmputer BYTE "³o¬O¹q¸£¡C",0
szThisIsDrv BYTE "³o¬OºÏºÐ¾÷¡C",0
szThisIsDir BYTE "³o¬O¥Ø¿ý¡C",0
szThisIsFile BYTE "³o¬OÀɮסC",0
szThisIsUnknown BYTE "¤£ª¾¹D³o¬O¤°»ò¡I",0
szInfoTipTitle BYTE "¸ê°T",0
szCantDnDHere BYTE "µLªk©ì©ñ¨ì"
;***************************************************************************************************
.DATA
hInstance HINSTANCE ? ;°õ¦æ¹ê¨Ò¥N½X
hImageList HANDLE ? ;¾ðª¬À˵øªº image list ¥N½X
hTreeView HANDLE ? ;¾ðª¬À˵ø¥N½X
hStatic HANDLE ? ;ÀRºAÀ˵ø¥N½X¡A¥Î©óÅã¥Ü¾ðª¬À˵ø¤ºªº¶µ¥Ø¸ê®Æ
hComputer HTREEITEM ? ;®Ú¶µ¥Ø¥N½X
hEdit HANDLE ? ;¾ðª¬À˵ø¶i¦æ´N¦a½s¿è®É¡A½s¿è®Ø¥N½X
lpOldEditProc DWORD ?
hDragImage HANDLE ?
DragMode DWORD FALSE ;¬O§_¶i¦æ©ì¦²°Ê§@¡C¬O¬°TRUE¡F§_¬°FALSE
dwCx DWORD ? ;¾ðª¬À˵ø¶ZÂ÷¹ï¸Ü²°¦h»·¡GX®y¼Ð
dwCy DWORD ? ;¾ðª¬À˵ø¶ZÂ÷¹ï¸Ü²°¦h»·¡GY®y¼Ð
szPhyHD BYTE "¹êÅéºÏºÐ "
szPhyHDNo BYTE "0",0
szPhyDrv BYTE "\\.\PhysicalDrive0",0
szInfo BYTE 200 DUP (0)
szPath BYTE 512 DUP (0)
;***************************************************************************************************
.CODE
;---------------------------------------------------------------------------------------------------
;·sªº½s¿è®Øµøµ¡¨ç¦¡¡A¶È³B²zWM_CHAR¡BWM_GETDLGCODE
new_edit_proc PROC USES ebx esi edi hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg==WM_CHAR
mov eax,wParam
.IF al==VK_RETURN
INVOKE SendMessage,hTreeView,TVM_ENDEDITLABELNOW,FALSE,0
.ELSEIF al==VK_ESCAPE
INVOKE SendMessage,hTreeView,TVM_ENDEDITLABELNOW,TRUE,0
.ELSE
INVOKE CallWindowProc,lpOldEditProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
.ELSEIF uMsg==WM_GETDLGCODE
mov eax,DLGC_WANTALLKEYS
ret
.ELSE
INVOKE CallWindowProc,lpOldEditProc,hWnd,uMsg,wParam,lParam
ret
.ENDIF
xor eax,eax
ret
new_edit_proc ENDP
;---------------------------------------------------------------------------------------------------
;¦b¶µ¥Ø¤¤²K¥[¤l¶µ¥Ø¡A¦¹¶µ¥Ø¬°¤@¤l¥Ø¿ý¡A©Ò²K¥[ªº¤l¶µ¥Ø¤D¬O¦¹¤l¥Ø¿ý¤ºªºÀɮשΤl¥Ø¿ý
;¿é¤J¡GpDir¡Ð¶µ¥Ø©Ò¥Nªíªº¤l¥Ø¿ý¸ô®|
;¡@¡@¡@hItm¡Ð¶µ¥Ø¥N½X
add_item_from_subdir PROC USES edi pDir:LPSTR,hItm:HTREEITEM
LOCAL w32fd:WIN32_FIND_DATA
LOCAL hSearch:HANDLE
LOCAL tvis:TVINSERTSTRUCT
mov al,0
mov edi,pDir
mov ecx,MAX_PATH
repne scasb
mov DWORD PTR[edi-1],2a2e2a5ch ;"\*.*,0"¦r¦ê
mov BYTE PTR[edi+3],0
cld
INVOKE FindFirstFile,pDir,ADDR w32fd
mov hSearch,eax
cmp eax,INVALID_HANDLE_VALUE
je finish
.WHILE eax!=0
mov ecx,hItm
mov tvis.hInsertAfter,TVI_LAST
mov tvis.hParent,ecx
mov tvis.itemex.imask,TVIF_CHILDREN or TVIF_TEXT or TVIF_IMAGE or TVIF_SELECTEDIMAGE or TVIF_PARAM
lea edx,w32fd.cFileName
.IF (WORD PTR [edx]!=2e2eh)&&(BYTE PTR [edx]!=2eh)
mov tvis.itemex.pszText,edx
mov tvis.itemex.cChildren,0
mov tvis.itemex.iImage,3
mov tvis.itemex.iSelectedImage,3
mov tvis.itemex.lParam,454c4946h ;"FILE"¦r¦ê
;Àˬd¬O§_¬°¤l¥Ø¿ý¡AY¬O«htvis.itemexÄæ¦ì¤¤ªºcChildren¡BiImage¡BiSelectedImage¤À§O»Ýק令1¡B2¡B4
test w32fd.dwFileAttributes,FILE_ATTRIBUTE_DIRECTORY
jz @f
mov tvis.itemex.cChildren,1
mov tvis.itemex.iImage,2
mov tvis.itemex.iSelectedImage,4
mov tvis.itemex.lParam,44425553h ;"SUBD"¦r¦ê
@@: INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
.ENDIF
INVOKE FindNextFile,hSearch,ADDR w32fd
.ENDW
finish: INVOKE FindClose,hSearch
ret
add_item_from_subdir ENDP
;---------------------------------------------------------------------------------------------------
;pºâ¶µ¥Ø¦WºÙªºªø«× ( ¶µ¥Ø¦WºÙ¦ì§}¦s©óEDI )¡A¨Ã¦s©óECXùØ¡A¦¹ªø«×¥]§t¡u0¡v
get_len PROC
mov al,0
mov ecx,MAX_PATH
repne scasb
sub ecx,MAX_PATH
neg ecx
ret
get_len ENDP
;---------------------------------------------------------------------------------------------------
;¨ú±o¬Y¶µ¥Øªº¸ô®|¦WºÙ¡A¦s©ószPath¦r¦êùØ
;¿é¤J¡GhItm¡Ð¬Y¶µ¥Øªº¥N½X
;¡@¡@¡@pName¡Ð¬Y¶µ¥Øªº¦WºÙ©Ò¦b¦ì§}
get_path PROC USES ebx esi edi hItm:HTREEITEM,pName:LPSTR
LOCAL pFullname:LPSTR
LOCAL tvi:TVITEM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL szFullname[512]:BYTE
cld
mov edx,hItm
mov tvi.lParam,0
mov tvi.hItem,edx
;§â¿ï©w¶µ¥Ø¦WºÙ²¾¨ìszFullname³Ì°ª¦ì§}¡A¥ç§Y¦r¦ê³Ì«á±
mov edi,pName
call get_len
lea edi,szFullname
mov esi,pName
add edi,SIZEOF szFullname
sub edi,ecx
mov pFullname,edi
rep movsb
.WHILE tvi.lParam!=4448474ch ;"LGHD"¦r¦ê
;¨ú±o¤÷¶µ¥Ø¥N½X
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PARENT,tvi.hItem
lea edx,buffer
mov tvi.imask,TVIF_TEXT or TVIF_HANDLE or TVIF_PARAM
mov tvi.hItem,eax
mov tvi.pszText,edx
mov tvi.cchTextMax,SIZEOF buffer
;¨ú±o¤÷¶µ¥Ø¦WºÙ
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvi
lea edi,buffer
mov ecx,MAX_PATH
call get_len
mov edi,pFullname
sub edi,ecx
lea esi,buffer
mov pFullname,edi
rep movsb
mov BYTE PTR [edi-1],'\'
.ENDW
lea ecx,szFullname
mov esi,pFullname
add ecx,512
mov edi,OFFSET szPath
sub ecx,esi
rep movsb
ret
get_path ENDP
;---------------------------------------------------------------------------------------------------
;Àò±oÀɮ׸ê®Æ¡A¥]§tÀɮפj¤p¡B«ØÀɮɶ¡¡B³Ì«á¦s¨ú¤é´Á¤Î®É¶¡¡B³Ì«áקï¤é´Á¤Î®É¶¡¡A¦s©ószInfoùØ
;¿é¤J¡GszPath¡Ð§¹¾ãªºÀɮצWºÙ¦r¦ê
;¿é¥X¡GszInfo¡ÐÀɮ׸ê®Æªº¦r¦ê
;¡@¡@¡@EAX¡ÐszInfo¦ì§}
get_file_info PROC USES ebx esi edi
LOCAL hFile:HFILE
LOCAL fi:BY_HANDLE_FILE_INFORMATION
LOCAL ft:FILETIME
LOCAL syst:SYSTEMTIME
LOCAL pszInfo:LPSTR
LOCAL dwSizeSzInfo:DWORD
INVOKE CreateFile,OFFSET szPath,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_WRITE_THROUGH,0
.IF eax==INVALID_HANDLE_VALUE
mov eax,OFFSET szInfo
mov BYTE PTR [eax],0
.ELSE
mov hFile,eax
mov pszInfo,OFFSET szInfo
mov dwSizeSzInfo,SIZEOF szInfo
INVOKE GetFileInformationByHandle,hFile,ADDR fi
INVOKE FileTimeToLocalFileTime,ADDR fi.ftCreationTime,ADDR ft
INVOKE FileTimeToSystemTime,ADDR ft,ADDR syst
INVOKE wsprintf,OFFSET szInfo,OFFSET szFileInfoFmt,fi.nFileSizeLow,fi.nFileSizeHigh
add pszInfo,eax
sub dwSizeSzInfo,eax
;Åã¥Ü«ØÀɤé´Á¤Î®É¶¡
INVOKE GetDateFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szDate0Fmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
INVOKE GetTimeFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szTimeFmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
;Åã¥Ü³Ì«á¦s¨ú¤é´Á¤Î®É¶¡
INVOKE FileTimeToLocalFileTime,ADDR fi.ftLastAccessTime,ADDR ft
INVOKE FileTimeToSystemTime,ADDR ft,ADDR syst
INVOKE GetDateFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szDate1Fmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
INVOKE GetTimeFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szTimeFmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
;Åã¥Ü³Ì«áקï¤é´Á¤Î®É¶¡
INVOKE FileTimeToLocalFileTime,ADDR fi.ftLastWriteTime,ADDR ft
INVOKE FileTimeToSystemTime,ADDR ft,ADDR syst
INVOKE GetDateFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szDate2Fmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
INVOKE GetTimeFormat,LOCALE_USER_DEFAULT,0,ADDR syst,OFFSET szTimeFmt,pszInfo,dwSizeSzInfo
dec eax
add pszInfo,eax
sub dwSizeSzInfo,eax
INVOKE CloseHandle,hFile
mov eax,OFFSET szInfo
.ENDIF
ret
get_file_info ENDP
;---------------------------------------------------------------------------------------------------
;¨ú±oÅÞ¿èºÏºÐ¸ê®Æ¡A¥]§tÅÞ¿èºÏºÐ¤j¤p¤Î³Ñ¾l©ó¤j¤p
;¿é¤J¡GpLogHdName¡ÐÅÞ¿èºÏºÐ¦W¡A¨Ò¦p¡u"C:",0¡v¦r¦ê
;¿é¥X¡GszInfo¡ÐÅÞ¿èºÏºÐ¸ê®Æªº¦r¦ê
;¡@¡@¡@EAX¡ÐszInfo¦ì§}
get_log_drv PROC USES ebx pLogHdName:LPSTR
LOCAL hAvailable,lAvailable:DWORD
LOCAL hTotal,lTotal:DWORD
LOCAL hFree,lFree:DWORD
mov eax,pLogHdName
mov WORD PTR [eax+2],5ch ;§ï¦¨¡u"C:\",0¡v¦r¦ê
INVOKE GetDiskFreeSpaceEx,pLogHdName,ADDR lAvailable,ADDR lTotal,ADDR lFree
mov eax,lTotal
.IF (eax>=40000000h&&hTotal==0)||(hTotal>0)
;¶W¹L1GB
mov ecx,1000*1000*1000
mov ebx,OFFSET szLogInfoFmt0
.ELSE
;¤£¨¬1GB¡A§ï¥ÎMB¬°³æ¦ì
mov ecx,1000*1000
mov ebx,OFFSET szLogInfoFmt1
.ENDIF
mov edx,hTotal
div ecx
mov lTotal,eax
mov eax,lAvailable
mov edx,hAvailable
div ecx
mov edx,pLogHdName
mov lAvailable,eax
movzx eax,BYTE PTR [edx] ;EAX¡×ÅÞ¿èºÏºÐ¦WºÙ
INVOKE wsprintf,OFFSET szInfo,ebx,eax,lTotal,lAvailable
mov eax,OFFSET szInfo
ret
get_log_drv ENDP
;---------------------------------------------------------------------------------------------------
;¨ú±o¹êÅéµwºÐªº¸ê®Æ¡A¦pºÏ¬W¼Æ¡BºÏÀY¼Æµ¥µ¥
;¿é¤J¡GpPhyHdName¡Ð¦r¦ê¡u"¹êÅéºÏºÐ ?",0¡vªº¦ì§}
;¿é¥X¡GszInfo¦ì§}¡ÐszInfo¦r¦ê¦s¦³¹êÅéµwºÐªº¸ê®Æ¡A¦pºÏ¬W¼Æ¡BºÏÀY¼Æµ¥µ¥
;¡@¡@¡@EAX¡ÐszInfo¦ì§}
get_phy_drv PROC USES esi edi pPhyHdName:LPSTR
LOCAL hPhyDrv:HANDLE
LOCAL dwReturnBytes:DWORD
LOCAL dgex:DISK_GEOMETRY_EX
mov edi,pPhyHdName ;EDI«ü¦VÃþ¦ü¡u"¹êÅéºÏºÐ 0",0¡v¦r¦ê
mov al,0
mov ecx,MAX_PATH
cld
repne scasb
sub edi,2
mov edx,OFFSET szPhyDrv+17 ;EDX«ü¦V¡u"\\.\PhysicalDrive0",0¡v¤¤ªº"0"
mov al,[edi]
mov [edx],al
movzx esi,al
sub esi,"0"
INVOKE CreateFile,OFFSET szPhyDrv,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or \
FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0
mov hPhyDrv,eax
INVOKE DeviceIoControl,hPhyDrv,IOCTL_DISK_GET_DRIVE_GEOMETRY_EX,0,0,\
ADDR dgex,SIZEOF dgex,ADDR dwReturnBytes,0
mov eax,dgex.DiskSize.LowPart
mov edx,dgex.DiskSize.HighPart
mov ecx,1000*1000*1000
div ecx
INVOKE wsprintf,OFFSET szInfo,OFFSET szHdInfoFmt,esi,\
dgex.Geometry.Cylinders.LowPart,dgex.Geometry.Cylinders.HighPart,\ ;ºÏ¬W¼Æ
dgex.Geometry.TracksPerCylinder,\ ;ºÏÀY¼Æ
dgex.Geometry.SectorsPerTrack,\ ;ºÏy¼Æ
dgex.Geometry.BytesPerSector,eax ;ºÏ°Ï¤Î®e¶q
INVOKE CloseHandle,hPhyDrv
mov eax,OFFSET szInfo
ret
get_phy_drv ENDP
;---------------------------------------------------------------------------------------------------
DlgProc PROC hDlg:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL hIcon,hInfoTip:HANDLE
LOCAL tvis:TVINSERTSTRUCT
LOCAL tvhti:TVHITTESTINFO ;©ì¦²¹Ï¹³®É¡A´ú¸Õ¼öÂI¦bþ¤@Ó¶µ¥Ø¤W(µo°eTVM_HITTEST°T®§)
LOCAL hMem,hPhyHD:HANDLE,lphMem:LPSTR
LOCAL buffer[MAX_PATH]:BYTE
.IF uMsg==WM_INITDIALOG
;«Ø¥ßImageList
INVOKE ImageList_Create,16,16,ILC_COLOR32 or ILC_MASK,4,0
mov hImageList,eax
;¸ü¤J¹Ï¥Ü¨ì image list¡A¨Ã§R°£¹Ï¥Ü
INVOKE LoadIcon,hInstance,OFFSET szIconComputer
mov hIcon,eax
INVOKE ImageList_ReplaceIcon,hImageList,-1,eax ;0-COMPUTER
INVOKE SendMessage,hDlg,WM_SETICON,ICON_SMALL,hIcon
INVOKE DestroyIcon,hIcon
INVOKE LoadIcon,hInstance,OFFSET szIconHardisk
mov hIcon,eax
INVOKE ImageList_ReplaceIcon,hImageList,-1,eax ;1-HARDDISK
INVOKE DestroyIcon,hIcon
INVOKE LoadIcon,hInstance,OFFSET szIconFolder
mov hIcon,eax
INVOKE ImageList_ReplaceIcon,hImageList,-1,eax ;2-FOLDER
INVOKE DestroyIcon,hIcon
INVOKE LoadIcon,hInstance,OFFSET szIconFile
mov hIcon,eax
INVOKE ImageList_ReplaceIcon,hImageList,-1,eax ;3-FILE
INVOKE DestroyIcon,hIcon
INVOKE LoadIcon,hInstance,OFFSET szIconOpnFolder
mov hIcon,eax
INVOKE ImageList_ReplaceIcon,hImageList,-1,eax ;4-OPEN FILE
INVOKE DestroyIcon,hIcon
;¨ú±o¾ðª¬À˵ø±±¨î¶µ¤Î½s¿è®Ø¥N½X
INVOKE GetDlgItem,hDlg,IDC_TEXT
mov hStatic,eax
INVOKE GetDlgItem,hDlg,IDC_TREEVIEW
mov hTreeView,eax
;±NImageList»P¾ðª¬À˵ø³sµ²°_¨Ó
INVOKE SendMessage,hTreeView,TVM_SETIMAGELIST,TVSIL_NORMAL,hImageList
;¦b¾ðª¬À˵ø±±¨î¶µ¤¤¥[¤J¡u¹q¸£¤¤ªºµwºÐ¡v
mov tvis.hParent,TVI_ROOT
mov tvis.hInsertAfter,TVI_FIRST
mov tvis.itemex.imask,TVIF_TEXT or TVIF_IMAGE or TVIF_SELECTEDIMAGE or TVIF_CHILDREN or TVIF_PARAM
mov tvis.itemex.pszText,OFFSET szRootItem
mov tvis.itemex.iImage,0
mov tvis.itemex.iSelectedImage,0
mov tvis.itemex.cChildren,1
mov tvis.itemex.lParam,504d5e43h ;"COMP"¦r¦ê
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
mov hComputer,eax
;¨ú±o¦U¹êÅéºÏºÐ¤¤©Ò§tªºÅÞ¿èºÏºÐ¥N½X
INVOKE GetLogicalDriveFromPhysicalDrive,NULL ;©Ò»Ý¸ê®Æ¤j¤p
INVOKE GlobalAlloc,GPTR,eax ;°t¸m©Ò»Ý°O¾ÐÅé
mov hMem,eax
mov lphMem,eax
INVOKE GetLogicalDriveFromPhysicalDrive,eax
;¦b¾ðª¬À˵øùØ¡A²K¥[¦UÓ¡u¹êÅéµwºÐ X¡v¶µ¥Ø¡A¨Ã¦b¸Ó¶µ¥Ø¤U²K¥[¡uX:¡vÅÞ¿èºÏºÐ¤l¶µ¥Ø
.WHILE TRUE
mov ecx,lphMem
add ecx,17 ;«ü¦V"\\.\PhysicalDrive0"¦r¦êªº¡u0¡v
mov edx,OFFSET szPhyHDNo
mov al,[ecx]
mov [edx],al
add lphMem,19
;³]©w¹êÅéºÏºÐ¨Ï¥ÎªºTVINSERTSTRUCT
mov ecx,hComputer
mov tvis.hParent,ecx
mov tvis.hInsertAfter,TVI_LAST
mov tvis.itemex.pszText,OFFSET szPhyHD
mov tvis.itemex.cchTextMax,11
mov tvis.itemex.iImage,1
mov tvis.itemex.iSelectedImage,1
mov tvis.itemex.cChildren,1
mov tvis.itemex.lParam,44485946h ;"FYHD"¦r¦ê
;¦b¾ðª¬À˵ø±±¨î¶µ¤¤¥[¤J¡u¹êÅéºÏºÐ X¡v
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
mov hPhyHD,eax
;³]©wÅÞ¿èºÏºÐ¨Ï¥ÎªºTVINSERTSTRUCT
.WHILE TRUE
mov edx,lphMem
.BREAK .IF BYTE PTR [edx]==5ch ;Àˬd¦¹®ÉÅéºÏºÐ¬O§_ÁÙ¦³¨ä¥LÅÞ¿èºÏºÐ
cmp BYTE PTR [edx],0
jz finish ;Àˬd¬O§_¤w§¹¦¨©Ò¦³¹êÅéºÏºÐ¤ÎÅÞ¿èºÏºÐ
mov ecx,hPhyHD
mov tvis.itemex.pszText,edx
mov tvis.itemex.cChildren,1 ;ÅÞ¿èºÏºÐ¤U¡AÁÙ¦³¤l¶µ¥Ø
mov tvis.hParent,ecx
mov tvis.itemex.iImage,1
mov tvis.itemex.iSelectedImage,1
mov tvis.itemex.lParam,4448474ch ;"LGHD"¦r¦ê
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
add lphMem,3 ;«ü¦V¤U¤@ÓÅÞ¿èºÏºÐ¦ì§}
.ENDW
.ENDW
finish: INVOKE GlobalFree,hMem
.ELSEIF uMsg==WM_NOTIFY
push ebx
ASSUME ebx:PTR NMTREEVIEW
mov ebx,lParam
mov ecx,[ebx].hdr.hwndFrom ;ECX¡×µo¥XWM_NOTIFYªº±±¨î¶µ¥N½X
.IF [ebx].hdr.hwndFrom==ecx ;µo¥XWM_NOTIFYªº±±¨î¶µ¥N½X
;³B²zTVN_SELCHANGED³qª¾½X¡A·í¨Ï¥ÎªÌ¿ï©w¬YÓ¶µ¥Ø®É¡A¥ý¨ú±o¶µ¥Ø¦WºÙ¤ÎlParam¡A¥ÑlParam§PÂ_¸Ó¶µ¥Ø¬O¡u¹q¸£¤¤ªºµwºÐ¡v
;¡B¹êÅéºÏºÐ¡BÅÞ¿èºÏºÐ¡BÀÉ®×ÁÙ¬O¤l¥Ø¿ý¡C¦pªG¬O«e¥|ªÌ¡A«h¦bÀRºA±±¥óhStatic¤¤Åã¥Ü¤@¨Ç¸ê®Æ¡F§_«h¤£Åã¥Ü¸ê®Æ
.IF [ebx].hdr.code==TVN_SELCHANGED
;¨ú±o³Q¿ï©w¶µ¥Øªº¦WºÙ»PlParam¡A¦s©ótvis.itemex
mov edx,[ebx].itemNew.hItem
lea eax,buffer
mov tvis.itemex.hItem,edx
mov tvis.itemex.imask,TVIF_TEXT or TVIF_PARAM
mov tvis.itemex.pszText,eax
mov tvis.itemex.cchTextMax,SIZEOF buffer
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvis.itemex
.IF tvis.itemex.lParam==504d5e43h ;"COMP"¦r¦ê
mov eax,OFFSET szRootItem
.ELSEIF tvis.itemex.lParam==44485946h ;"PHYHD"¦r¦ê
INVOKE get_phy_drv,ADDR buffer
.ELSEIF tvis.itemex.lParam==4448474ch ;"LGHD"¦r¦ê
INVOKE get_log_drv,ADDR buffer
.ELSEIF tvis.itemex.lParam==454c4946h ;"FILE"¦r¦ê¡A¥ý¨ú±o¸ÓÀɮתº§¹¾ã¸ô®|¡A¦A©I¥sget_file_infoÀò±o¸ê®Æ
INVOKE get_path,tvis.itemex.hItem,ADDR buffer
call get_file_info
.ELSE
mov eax,OFFSET szIconFile+4 ;«ü¦VNULL¦r¦ê
.ENDIF
INVOKE SetWindowText,hStatic,eax
;³B²zTVN_ITEMEXPANDING³qª¾½X¡A¥u¦³ÅÞ¿èºÏºÐ©Î¤l¥Ø¿ý®i¶}©Î¦¬Ãl®É¡A¤~»Ý³B²z¦¹³qª¾½X¡C·í®i¶}®É¡A»Ý¨ú±o¸Ó¥Ø¿ý¤º¦U
;ÀɮשΨ䤺ªº¤l¥Ø¿ý¬°¨ä¤l¶µ¥Ø¡C·í¦¬Ãl®É¡Aµo¥XTVM_DELETEITEM§R¥h¸Ó¶µ¥Ø¤Î¨ä¤Uªº©Ò¦³¤l¶µ¥Ø¡A¦ý³o¤£²Å¦Xn¨D¡A©Ò¥H
;ÁÙ±o§â¸Ó¶µ¥ØÁÙì¡A¦]¦¹¥ý¨ú±o¸Ó¶µ¥Øªº¸ê®Æ¡B¦A§R°£¡B¦A¨Ìèè±o¨ìªº¸ê®Æ«·s²K¥[¸Ó¶µ¥Ø
.ELSEIF [ebx].hdr.code==TVN_ITEMEXPANDING
mov edx,[ebx].itemNew.hItem
lea eax,buffer
mov tvis.itemex.hItem,edx
mov tvis.itemex.imask,TVIF_TEXT or TVIF_PARAM or TVIF_SELECTEDIMAGE or TVIF_IMAGE or TVIF_CHILDREN
mov tvis.itemex.pszText,eax
mov tvis.itemex.cchTextMax,SIZEOF buffer
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvis.itemex ;¨ú±o³Q¿ï©w¶µ¥Øªº¸ê®Æ¡A¦s©ótvis.itemex
.IF [ebx].itemNew.lParam==44425553h ;"SUBD"¦r¦ê
.IF [ebx].action==TVE_EXPAND
INVOKE get_path,tvis.itemex.hItem,ADDR buffer
INVOKE add_item_from_subdir,OFFSET szPath,[ebx].itemNew.hItem
.ELSEIF [ebx].action==TVE_COLLAPSE
get_parents: INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PARENT,[ebx].itemNew.hItem
mov tvis.hParent,eax
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PREVIOUS,[ebx].itemNew.hItem
or eax,eax
jnz @f
mov eax,TVI_FIRST
@@: mov tvis.hInsertAfter,eax
INVOKE SendMessage,hTreeView,TVM_DELETEITEM,0,[ebx].itemNew.hItem
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
.ENDIF
.ELSEIF [ebx].itemNew.lParam==4448474ch ;"LGHD"¦r¦ê
.IF [ebx].action==TVE_EXPAND
INVOKE add_item_from_subdir,ADDR buffer,[ebx].itemNew.hItem
.ELSEIF [ebx].action==TVE_COLLAPSE
jmp get_parents
.ENDIF
.ENDIF
;³B²z·Æ¹«©ì¦²°Ê§@¡A«Ø¥ß©ì¦²¹Ï¹³¡B«ü©w¼öÂI¡BÅã¥Ü©ì¦²¹Ï¹³¡B¨Ï¹ï¸Ü²°®·Àò·Æ¹«°T®§¡B³]©w²{¦b¥¿¶i¦æ©ì¦²°Ê§@
.ELSEIF [ebx].hdr.code==TVN_BEGINDRAG
INVOKE SendMessage,hTreeView,TVM_CREATEDRAGIMAGE,0,[ebx].itemNew.hItem
mov hDragImage,eax
INVOKE ImageList_BeginDrag,hDragImage,0,0,0
INVOKE ImageList_DragEnter,hTreeView,[ebx].ptDrag.x,[ebx].ptDrag.y
INVOKE SetCapture,hDlg
mov DragMode,TRUE
;³B²zTVN_GETINFOTIP³qª¾½X¡A¨Ï¤u¨ã´£¥Ü¯à¨Ì¡u¹q¸£¤¤ªºµwºÐ¡v¡B¹êÅéºÏºÐ¡BÅÞ¿èºÏºÐ¡BÀɮשάO¤l¥Ø¿ý¦ÓÅã¥Ü¤£¦Pªº¤å¦r
.ELSEIF [ebx].hdr.code==TVN_GETINFOTIP
ASSUME ebx:PTR NMTVGETINFOTIP
.IF [ebx].lParam==504d5e43h
mov eax,OFFSET szThisIsCmputer
.ELSEIF [ebx].lParam==4448474ch
mov eax,OFFSET szThisIsDrv
.ELSEIF [ebx].lParam==44485946h
mov eax,OFFSET szThisIsDrv
.ELSEIF [ebx].lParam==44425553h
mov eax,OFFSET szThisIsDir
.ELSEIF [ebx].lParam==454c4946h
mov eax,OFFSET szThisIsFile
.ELSE
mov eax,OFFSET szThisIsUnknown
.ENDIF
mov [ebx].pszText,eax
;³]©w¾ðª¬À˵øªº¤lµøµ¡¡A¤u¨ã´£¥Ü¡Aªº·®æ
INVOKE SendMessage,hTreeView,TVM_GETTOOLTIPS,0,0
mov hInfoTip,eax
INVOKE SendMessage,hInfoTip,TTM_SETTITLE,TTI_INFO,OFFSET szInfoTipTitle
INVOKE GetWindowLong,hInfoTip,GWL_STYLE
or eax,TTS_BALLOON or TTS_CLOSE
INVOKE SetWindowLong,hInfoTip,GWL_STYLE,eax
INVOKE SendMessage,hInfoTip,TTM_SETMAXTIPWIDTH,0,400
;³B²zTVN_BEGINLABELEDIT³qª¾½X¡A¸T¤î¨Ï¥ÎªÌ´N¦a½s¿è¡u¹q¸£¤¤ªºµwºÐ¡v¡B¡u¹êÅéºÏºÐ¡v¡B¡uÅÞ¿èºÏºÐ¡v¡A¦ýã³\½s¿èÀÉ®×
;©Î¤l¥Ø¿ý¡A¤£¹L¦³¨î¡A·s¦WºÙ¦b32¦ì¤¸²Õ¥H¤º
.ELSEIF [ebx].hdr.code==TVN_BEGINLABELEDIT
ASSUME ebx:PTR NMTVDISPINFO
.IF ([ebx].item.lParam==504d5e43h)||([ebx].item.lParam==4448474ch)||([ebx].item.lParam==44485946h)
INVOKE SetWindowLong,hDlg,DWL_MSGRESULT,TRUE
.ELSE
INVOKE SendMessage,hTreeView,TVM_GETEDITCONTROL,0,0
mov hEdit,eax
INVOKE SendMessage,eax,EM_SETLIMITTEXT,20h,0
INVOKE SetWindowLong,hEdit,GWL_WNDPROC,OFFSET new_edit_proc
mov lpOldEditProc,eax
.ENDIF
;³B²zTVN_ENDLABELEDIT³qª¾½X¡AY½s¿è®Ø¤ºµL¦r¤¸¡A«h«ì´_춵¥Ø¦WºÙ¡FY¦³¦r¤¸¡A«h¥H½s¿è®Ø¤º®e¬°¶µ¥Ø·s¦WºÙ
.ELSEIF [ebx].hdr.code==TVN_ENDLABELEDIT
INVOKE GetWindowTextLength,hEdit ;EAX¡×½s¿è®Ø¤º¦r¤¸ªø«×
.IF eax==0
mov ecx,FALSE
.ELSE
mov ecx,TRUE
.ENDIF
INVOKE SetWindowLong,hDlg,DWL_MSGRESULT,ecx
;³B²zTVN_KEYDOWN³qª¾½X¡A¶È³B²z¨Ï¥ÎªÌ«ö¤UF2Áä¡A¶i¦æ´N¦a½s¿è
.ELSEIF [ebx].hdr.code==TVN_KEYDOWN
ASSUME ebx:PTR NMTVKEYDOWN
.IF [ebx].wVKey==VK_F2
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_CARET,0
INVOKE SendMessage,hTreeView,TVM_EDITLABEL,0,eax
.ENDIF
.ENDIF
.ENDIF
pop ebx
ASSUME ebx:NOTHING
.ELSEIF uMsg==WM_MOUSEMOVE
.IF DragMode==TRUE
mov eax,lParam
mov ecx,eax
and eax,0ffffh
shr ecx,16
sub eax,dwCx
sub ecx,dwCy
mov tvhti.pt.x,eax
mov tvhti.pt.y,ecx
INVOKE ImageList_DragMove,eax,ecx
INVOKE ImageList_DragShowNolock,FALSE
INVOKE SendMessage,hTreeView,TVM_HITTEST,NULL,ADDR tvhti
.IF eax!=NULL
INVOKE SendMessage,hTreeView,TVM_SELECTITEM,TVGN_DROPHILITE,eax
.ENDIF
INVOKE ImageList_DragShowNolock,TRUE
.ENDIF
.ELSEIF uMsg==WM_LBUTTONUP
.IF DragMode==TRUE
INVOKE ImageList_DragLeave,hTreeView
INVOKE ImageList_EndDrag
INVOKE ImageList_Destroy,hDragImage
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_DROPHILITE,0
mov tvis.itemex.hItem,eax
INVOKE SendMessage,hTreeView,TVM_SELECTITEM,TVGN_CARET,eax
INVOKE SendMessage,hTreeView,TVM_SELECTITEM,TVGN_DROPHILITE,0
INVOKE ReleaseCapture
mov DragMode,FALSE
mov esi,OFFSET szCantDnDHere
lea edi,buffer
mov ecx,SIZEOF szCantDnDHere
rep movsb
mov tvis.itemex.imask,TVIF_TEXT
mov tvis.itemex.pszText,edi
mov tvis.itemex.cchTextMax,SIZEOF buffer-SIZEOF szCantDnDHere
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvis.itemex
INVOKE MessageBox,hTreeView,ADDR buffer,OFFSET szInfoTipTitle,MB_OK or MB_ICONERROR
.ENDIF
.ELSEIF uMsg==WM_CLOSE
INVOKE ImageList_Destroy,hImageList
INVOKE EndDialog,hDlg,NULL
.ELSE ;¨ä¥L°T®§
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
;---------------------------------------------------------------------------------------------------
START: INVOKE GetModuleHandle,NULL
mov hInstance,eax
INVOKE DialogBoxParam,hInstance,OFFSET szDlgName,NULL,OFFSET DlgProc,NULL
INVOKE ExitProcess,eax
INVOKE InitCommonControls
;***************************************************************************************************
END START |
¥H¤å®Ñ³B²z³nÅé¡A¿é¤J¤W±¤TÓÀɮסA¨Ã¦s¦¨¯Â¤å¦rÀÉ¡A¤U¸ü HDINFO2.RAR¡A¦¹À£ÁYÀɧt¦³©Ò»Ýªº¹Ï¥ÜÀÉ ( ¥]§t COMPUTER.ICO¡BFILE.ICO¡BFOLDER.ICO¡BHARDDISK.ICO »P OPENFLD.ICO ) ¤Î°ÊºA³sµ²µ{¦¡®w ( HD.DLL »P HD.LIB )¡A±N¨ä¸ÑÀ£ÁY«á¡A»P«e±ªº¤Tӯ¤å¦rÀÉ©ñ¦b¦P¤@¥Ø¿ýùØ¡CµM«á¿é¤J¤U±«ü¥O¡G
E:\HomePage\SOURCE\Win32\HD_Info>rc hdinfo2.rc [Enter] E:\HomePage\SOURCE\Win32\HD_Info>ml hdinfo2.asm /link hdinfo2.res [Enter] Microsoft (R) Macro Assembler Version 6.14.8444 Copyright (C) Microsoft Corp 1981-1997. All rights reserved. Assembling: hdinfo2.asm *********** ASCII build *********** Microsoft (R) Incremental Linker Version 5.12.8078 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /SUBSYSTEM:WINDOWS "hdinfo2.obj" "/OUT:hdinfo2.exe" "hdinfo2.res" E:\HomePage\SOURCE\Win32\HD_Info>
³o¼Ë´N¥i¥H²£¥Í HDINFO2.EXE ¤F¡C
Æ[¹î¨Ã¾ã²z HDINFO2 ¾ðª¬À˵øªº¶µ¥Ø¡A¤À¬°¤ºØ¡G¡u¹q¸£¤¤ªºµwºÐ¡v¡B¡u¹êÅéºÏºÐ¡v¡B¡uÅÞ¿èºÏºÐ¡v¡B¡u¥Ø¿ý¡v»P¡uÀɮסv¡A«e±¤TºØ¦b HDINFO2 °õ¦æ«á´N¥Ñ WM_INITDIALOG °T®§¤¤¥[¤J¨ì¾ðª¬À˵øùØ¡C²K¥[¡u¹q¸£¤¤ªºµwºÐ¡v¨ì¾ðª¬À˵øùا@¬°®Ú¶µ¥Øªºµ{¦¡¤ù¬q¦b²Ä 390¡ã400 ¦æ¡A¨Ã¨Ï¨ä¶µ¥Ø¥N½X«O¦s¦b hComputer ùØ¡Cȱo¤@´£ªº¬O¦b TVINSERTSTRUCT ¤¤ªº TVITEM µ²ºcÅ餤³]©w¤F lParam Äæ¦ì¬° 504d5e43h¡A¥ç§Y¡uCOMP¡v¦r¦ê¡C³]©wªºì¦]¬O¬°¤Fµ{¦¡¤è«K°Ï¤À¤Wz¤ºØ¶µ¥Ø¡A¦]¦¹¨ä¥Lªº¶µ¥Ø¡G¡u¹êÅéºÏºÐ¡v¡B¡uÅÞ¿èºÏºÐ¡v¡B¡u¥Ø¿ý¡v»P¡uÀɮסv¡A¤]³£³]©w¤F lParam¡A¤À§O¬° 44485946h (¡uFYHD¡v¦r¦ê )¡B4448474ch (¡uLGHD¡v¦r¦ê )¡B44425553h (¡uSUBD¡v¦r¦ê )¡B454c4946h (¡uFILE¡v¦r¦ê )¡C
¦Ü©ó¨ú±o¹q¸£¤ºªº¹êÅéºÏºÐ¡A¤Î¨CÓ¹êÅéºÏºÐ³Q¤ÀÓ¦¨þ¨ÇÅÞ¿èºÏºÐªºµ{¦¡½X¦b²Ä 401¡ã406¡C©I¥s GetLogicalDriveFromPhysicalDrive ( °Ñ¦Òªþ¿ý¤» ) ¥iÀò±o¨CÓ¹êÅéºÏºÐ§t¦³þ¨ÇÅÞ¿èºÏºÐ¡A¨ä쫬¬O¡G
INVOKE GetLogicalDriveFromPhysicalDrive,lpBuffer
¦pªG lpBuffer ¬° NULL¡A«h¨t²Î·|pºâ¥X»Ýn¦h¤Ö¦ì¤¸²Õ¡A¥H®e¯Ç¸ê®Æ¡C¦pªG lpBuffer ¬°¬YÓ¦ì§}¡A¨t²Î·|±N¸ê®Æ¶ñ¨ì lpBuffer ©Ò«üªº¦ì§}¡A®æ¦¡Ãþ¦ü©³¤Uªº¼Ë¤l¡G
00156D28 5C 5C 2E 5C 50 68 79 73 69 63 61 6C 44 72 69 76 \\.\PhysicalDriv 00156D38 65 30 00 43 3A 00 45 3A 00 48 3A 00 49 3A 00 5C e0.C:.E:.H:.I:.\ 00156D48 5C 2E 5C 50 68 79 73 69 63 61 6C 44 72 69 76 65 \.\PhysicalDrive 00156D58 31 00 46 3A 00 47 3A 00 4A 3A 00 5C 5C 2E 5C 50 1.F:.G:.J:.\\.\P 00156D68 68 79 73 69 63 61 6C 44 72 69 76 65 32 00 44 3A hysicalDrive2.D: 00156D78 00 00 ..
µ{¦¡²Ä 407¡ã444 ¦æ¡A¨Ì¾Ú¤W±ªº¸ê®Æ¡A§â¦UÓ¹êÅéºÏºÐ¥[¤J¨ì¡u¹q¸£¤¤ªºµwºÐ¡v¤§¤U¡A§@¬°¨ä¤l¶µ¥Ø¡F¦A©ó¦UÓ¹êÅéºÏºÐ¤§¤U¡A¥[¤J©Ò¤À³Î¥X¨ÓªºÅÞ¿èºÏºÐ¡A§@¬°¡u¹q¸£¤¤ªºµwºÐ¡vªº®]¶µ¥Ø¡C¨ì³oùØ¡AWM_INITDIALOG °T®§¤w³B²z§¹¦¨¡A¦b¾ðª¬À˵øùؤw²K¥[¤F¤T¼h¶µ¥Ø¡G¡u¹q¸£¤¤ªºµwºÐ¡v¡B¡u¹êÅéºÏºÐ¡v¡B¡uÅÞ¿èºÏºÐ¡v¡A³o¤T¼h¶µ¥Ø¡A¦b¥ô¦ó±¡§Î¤U¡A³£¤£·|³Q§R°£¡A¤]¤£·|¦A·s¼W¡C
±µ¤U¨Ó¡A¥»À³¸Ó§â¦UÅÞ¿èºÏºÐ¤ºªº©Ò¦³ÀÉ®×»P¤l¥Ø¿ý¥[¤J¡A¦¨¬°ÅÞ¿èºÏºÐªº¤l¶µ¥Ø¡C¦ý³o¼Ë·|¦³°ÝÃD¡C²{¤µ ( ¤¤µØ¥Á°ê 103 ¦~¡A¦è¤¸ 2014 ¦~ ) ªºµwºÐ¤w¸g¥H TB ¬°³æ¦ì¡A¨ä¤º©Ò§tÀɮצh¦p¤û¤ò¡A¤£¥i³Ó¼Æ¡A¦]¦¹ HDINFO2 ¨Ã¤£¬O¤@¶}©l¡A´N§â©Ò¦³ÅÞ¿èºÏºÐ©³¤Uªº©Ò¦³ÀɮשM¤l¥Ø¿ý³£¥[¶i¨Ó¡A³o¼Ë¥i¯à«Ü¨S¦³®Ä²v¡C
¥ý»¡¤@¨ÇI´ºª¾ÃÑ¡C·í¨Ï¥ÎªÌÂùÀ»¬YÓÅÞ¿èºÏºÐ©Î¬YÓ¤l¥Ø¿ý¡A©ÎÂIÀ»¶µ¥Ø«eªº®É¡A¾ðª¬À˵ø·|§â TVN_ITEMEXPANDING ³qª¾½X¶Çµ¹¹ï¸Ü²°¨ç¦¡¡A³o®ÉÔªº NMTREEVIEW ªº action Äæ¦ì¥i¯à¬O TVE_EXPAND ©Î TVE_COLLAPSE¡A¤À§Oªí¥Ü±Nn®i¶}©Î¦¬Ãl¡C¤p¤ì°¸©Ò±Ä¥Îªº¤èªk¬O¡A¦pªG¬O TVE_EXPAND ¤~§â¸ÓÅÞ¿èºÏºÐ©Î¤l¥Ø¿ý¤ºªºÀɮשΧó¤U¤@¼hªº¤l¥Ø¿ý¥[¶i¨Ó¡F¦pªG¬O TVE_COLLAPSE ®É¡A«h§â¸ÓÅÞ¿èºÏºÐ©Î¸Ó¤l¥Ø¿ý¤Uªº¤l¶µ¥Ø²¾°£¡C¦]¬°¦pªG¶µ¥Ø³B©ó¦¬Ãl®É¡A§Y¨Ï¸Ó¶µ¥Ø¤U¦³³\¦h¤l¶µ¥Ø¡A¨Ï¥ÎªÌ¤´¬O¨£¤£µÛ¡A°®¯Ü§R°£¡Aµ¥¨ìn®i¶}®É¡A¤~²K¥[¶i¥h¡C¦Ü©ó¡u¹q¸£¤¤ªºµwºÐ¡v¡B¡u¹êÅéºÏºÐ¡v©M¡uÅÞ¿èºÏºÐ¡v¡A«h¦]¼Æ¶q¤Ö¡A¦¦b WM_INITDIALOG °T®§¤¤´N¤w¥[¤J¥B¤£§ó°Ê¡A©Ò¥H¤£¥²¦A³B²z¡CY¬O¨Ï¥ÎªÌÂùÀ»¬YÓÀɮ׮ɡA¤]¦]¬°Àɮש³¤U¤£·|¦³¤l¥Ø¿ý©Î¨ä¥LªF¦è¡A¤]¤£³B²z¡C°ò©ó¥H¤Wì¦]¡Aµ{¦¡²Ä 477¡ã509 ¦æ¡A³B²z TVN_ITEMEXPANDING ³qª¾½X®É¡A¶È¶È³B²zÅÞ¿èºÏºÐ©Î¤l¥Ø¿ýªº®i¶}¹Lµ{¡A¨£µ{¦¡²Ä 488 »P 503 ¦æªº .IF/ELSEIF «ü¥O¡AÀˬd TVITEM ªº lParam Äæ¦ì¡A¥H§PÂ_¬OÅÞ¿èºÏºÐÁÙ¬O¤l¥Ø¿ý¡C¾ãÓ¬yµ{¦p¤U±µ{¦¡¤ù¬q¡G
477 478 479
480 481 482 483
484 485 486 487
488 489 490 491
492 493 494 495
496 497 498 499
500 501 502 503
504 505 506 507
508 509 |
;³B²zTVN_ITEMEXPANDING³qª¾½X¡A¥u¦³ÅÞ¿èºÏºÐ©Î¤l¥Ø¿ý®i¶}©Î¦¬Ãl®É¡A¤~»Ý³B²z¦¹³qª¾½X¡C·í®i¶}®É¡A»Ý¨ú±o¸Ó¥Ø¿ý¤º¦U
;ÀɮשΨ䤺ªº¤l¥Ø¿ý¬°¨ä¤l¶µ¥Ø¡C·í¦¬Ãl®É¡Aµo¥XTVM_DELETEITEM§R¥h¸Ó¶µ¥Ø¤Î¨ä¤Uªº©Ò¦³¤l¶µ¥Ø¡A¦ý³o¤£²Å¦Xn¨D¡A©Ò¥H
;ÁÙ±o§â¸Ó¶µ¥ØÁÙì¡A¦]¦¹¥ý¨ú±o¸Ó¶µ¥Øªº¸ê®Æ¡B¦A§R°£¡B¦A¨Ìèè±o¨ìªº¸ê®Æ«·s²K¥[¸Ó¶µ¥Ø
.ELSEIF [ebx].hdr.code==TVN_ITEMEXPANDING
mov edx,[ebx].itemNew.hItem
lea eax,buffer
mov tvis.itemex.hItem,edx
mov tvis.itemex.imask,TVIF_TEXT or TVIF_PARAM or TVIF_SELECTEDIMAGE or TVIF_IMAGE or TVIF_CHILDREN
mov tvis.itemex.pszText,eax
mov tvis.itemex.cchTextMax,SIZEOF buffer
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvis.itemex ;¨ú±o³Q¿ï©w¶µ¥Øªº¸ê®Æ¡A¦s©ótvis.itemex
.IF [ebx].itemNew.lParam==44425553h ;"SUBD"¦r¦ê
.IF [ebx].action==TVE_EXPAND
INVOKE get_path,tvis.itemex.hItem,ADDR buffer
INVOKE add_item_from_subdir,OFFSET szPath,[ebx].itemNew.hItem
.ELSEIF [ebx].action==TVE_COLLAPSE
get_parents: INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PARENT,[ebx].itemNew.hItem
mov tvis.hParent,eax
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PREVIOUS,[ebx].itemNew.hItem
or eax,eax
jnz @f
mov eax,TVI_FIRST
@@: mov tvis.hInsertAfter,eax
INVOKE SendMessage,hTreeView,TVM_DELETEITEM,0,[ebx].itemNew.hItem
INVOKE SendMessage,hTreeView,TVM_INSERTITEM,0,ADDR tvis
.ENDIF
.ELSEIF [ebx].itemNew.lParam==4448474ch ;"LGHD"¦r¦ê
.IF [ebx].action==TVE_EXPAND
INVOKE add_item_from_subdir,ADDR buffer,[ebx].itemNew.hItem
.ELSEIF [ebx].action==TVE_COLLAPSE
jmp get_parents
.ENDIF
.ENDIF |
³B²zÅÞ¿èºÏºÐ©Î¤l¥Ø¿ýªº®i¶}¤è¦¡¬O¤£¦Pªº¡AÅÞ¿èºÏºÐªº¶µ¥Ø¦WºÙ¡A¥²©w¬O¹³¡uC:\¡v³o¼Ëªº¦r¦ê¡A¦]¦¹¥un¦b²Ä 481¡ã487 ¦æ¨ú±o¶µ¥Ø¦WºÙ§Y¥i ( §À³¡¦A¥[¤W¡u\¡v¤Î NULL ¦r¤¸ªº¹Lµ{¦b add_item_from_subdir °Æµ{¦¡¤@¶}©l )¡A´N¥i¥H©I¥s°Æµ{¦¡¡Aadd_item_from_subdir¡A¨ú±o¨ä¤UªºÀɮפΤl¥Ø¿ý°µ¬°ÅÞ¿èºÏºÐªº¤l¶µ¥Ø ( ²Ä 505 ¦æ )¡C¦ý¬O¦pªG¬O¤l¥Ø¿ýªº¸Ü¡A¶·¥ý¨ú±o§¹¾ãªº¸ô®|¦WºÙ¤~¯à¨ú±o¨ä¤UªºÀɮפΤl¥Ø¿ý¡A©Ò¥H¦b²Ä 490 ¦æ¡An¥ý©I¥s get_path °Æµ{¦¡¡A¦A©I¥s add_item_from_subdir °Æµ{¦¡¡C
·í¨Ï¥ÎªÌ¦¬Ãl¤l¥Ø¿ý®É¡A«h§R°£¨ä¤U©Ò¦³¤l¶µ¥Ø¡A¥i¥H¦V¾ðª¬À˵øµo¥X TVM_DELETEITEM °T®§¡C¦ý³oÓ°T®§¡A¤£¶È¤l¶µ¥Ø·|³Q§R°£¡A³s¶µ¥Ø¥»¨¤]·|¾D¨ì§R°£¡C¤p¤ì°¸±Ä¥Î·M²Âªº¤èªk¡A¥ý¨ú±o¶µ¥Ø¥»¨ªº¸ê®Æ ( ²Ä 481¡ã487 )¡B¤÷¶µ¥Ø¥N½X ( ²Ä 493¡ã494 ¦æ ) ¥H¤Î¦P¤@¶¥¼hªº«e¤@Ó¶µ¥Ø¥N½X ( ²Ä 495¡ã499 ¦æ ) ¡A¦A§R°£¶µ¥Ø¥»¨¤Î¨ä¤U¤l¶µ¥Ø ( ²Ä 500 ¦æ )¡C±µµÛ¡A¦A·s¼Wì¨Óªº¶µ¥Ø ( ²Ä 501 ¦æ )¡A³o®É TVINSERTSTRUCT ¤º«nÄæ¦ì³£¤w¬O¥ý¦s¦n¤F¡A©Ò¥H¦A·s²K춵¥Ø¡A¨Ã«DÃø¨Æ¡C¹ï©ó¦¬ÃlÅÞ¿èºÏºÐªº¤èªk¡A§¹¥þ©M¤l¥Ø¿ý¬Û¦P¡A©Ò¥H¶È¶È¤@Ó¸õÅD«ü¥O¡A¨ì get_parents: §Y¥i ( ²Ä 507 ¦æ )¡C
add_item_from_subdir °Æµ{¦¡¦b²Ä 109¡ã153 ¦æ¡A²Ä¤@ӰѼơApDir¡A¬O¤l¥Ø¿ýªº§¹¾ã¸ô®|¦WºÙ¦ì§}¡Aµ{¦¡²Ä 117¡ã120 ¦æ±q pDir ©Ò«ü¦ì§}¤§³B¶}©l·j´M¡Aª½¨ì§ä¨ì¤l¥Ø¿ýªº§¹¾ã¸ô®|¦WºÙªºµ²§À¡AµM«á¦bµ²§À¤§³B¥[¤W¡u"\*.*",0¡v¤Ó¦ì¤¸²Õ¡C±µµÛ·j´M¦¹¤l¥Ø¿ý¤ºªº©Ò¦³ÀɮפΤl¥Ø¿ý¡A·j´M¤èªk¸ò¥H«e DOS ®É¥N¤@¼Ë¡A¥ý©I¥s FindFirstFile¡A§ä¨ì²Ä¤@ӲŦXªºÀɮסA¨t²Î·|±N¸ê®Æ¶ñ¤J WIN32_FIND_DATA µ²ºcÅ餺¡FµM«á¶i¤J°j°é¡A¨C°õ¦æ¤@¦¸¡A´N©I¥s FindNextFile¡A¨t²Î·j´M¤U¤@ӲŦXªºÀɮסA¤]·|§â¸ê®Æ¶ñ¤J WIN32_FIND_DATA µ²ºcÅ餺¡CWIN32_FIND_DATA µ²ºcÅ骺¦UÄæ¦ì¬O¡G
WIN32_FIND_DATA STRUCT dwFileAttributes DWORD ? ;ÀÉ®×ÄÝ©Ê ftCreationTime FILETIME <> ;«ØÀɮɶ¡ ftLastAccessTime FILETIME <> ;³Ì«á¦s¨ú®É¶¡ ftLastWriteTime FILETIME <> ;³Ì«á¼g¤J®É¶¡ nFileSizeHigh DWORD ? ;Àɮתø«×¡A°ª¦ì§} nFileSizeLow DWORD ? ;Àɮתø«×¡A§C¦ì§} dwReserved0 DWORD ? ;«O¯dªºÄæ¦ì dwReserved1 DWORD ? ;«O¯dªºÄæ¦ì cFileName BYTE MAX_PATH DUP (?);¤£§t¸ô®|ªºÀɦW cAlternateFileNa BYTE 14 DUP (?) ;µuÀɦW WIN32_FIND_DATA ENDS
¦b add_item_from_subdir °Æµ{¦¡ùØ¡AWIN32_FIND_DATA «nªºÄæ¦ì¬O cFileName ©M dwFileAttributes¡CcFileName ¬OÀɦW¦r¦ê¡A§Q¥Î LEA ¨ú±o¨ä¦ì§} ( ²Ä 133 ¦æ )¡A¦A¶ñ¤J¨ì TVINSERTSTRUCT µ²ºcÅ骺 TVITEM ªº pszText Äæ¦ì ( ²Ä 135 ¦æ )¡C¦Ó dwFileAttributes «h¨M©w¦¹¶µ¥Ø¬OÀÉ®×ÁÙ¬O¥Ø¿ý ( ²Ä 141 ¦æ )¡A¦pªG¬O¥Ø¿ý«h°õ¦æ 143¡ã146¡A¿ï¾Ü¥Ø¿ýªº¹Ï¥Ü¡B³]©w lParam ¬°¡uSUBD¡v¦r¦êµ¥¡C¦pªG¤£¬O¥Ø¿ý¡A«h¿ï¾ÜÀɮ׹ϥܡB³]©w lParam ¬°¡uFILE¡v¦r¦êµ¥µ¥¡C
HDINFO2 ì©lµ{¦¡ªº²Ä 453¡ã476 ¦æ¬O¥Î¨Ó³B²z TVN_SELCHANGED ³qª¾½X¡C·í¨Ï¥ÎªÌ¿ï¨ú¬YÓ¶µ¥Ø¦Ó¨Ïì¨Ó³Q¿ï¨úªº¶µ¥ØÅܧó«á¡A¨t²Î·|±N¦¹³qª¾½X¶Çµ¹µøµ¡¨ç¦¡¡Cµ{¦¡²Ä 456¡ã463 ¦æ¡A±N·s¿ï¨úªº¶µ¥Ø¦WºÙ¤Î lParam ¦s¤J buffer ¤Î tvis.itemex.lParam ùØ¡C¥»¨Óµo°e TVM_GETITEM °T®§¡A©Ò±o¨ìªº¶µ¥Ø¸ê®ÆÀ³¸Ó©ñ¦b TVITEM µ²ºcÅ餺¡A¤£¹L TVINSERTSTRUCT ¤º¤]§t¦³ TVITEM µ²ºcÅé¡A¦]¦¹³oùØ´N°½Ãi¤F¡A¨S¦³¥t¥~¦A©w¸q¤@Óµ²ºcÅé¡A¦Óª½±µ¨Ï¥Î TVINSERTSTRUCT ùتº TVITEM ¤F ( ¨£²Ä 463 ¦æ )¡C©Ò±o¨ìªº lParam ¥Î¨Ó§PÂ_¸Ó¶µ¥ØÄÝ©óþ¤@Ãþ«¬¡A°Ñ¦Ò¤U±ªº¬yµ{¡G
453 454 455
456 457 458 459
460 461 462 463
464 465 466 467
468 469 470 471
472 473 474 475
476 |
;³B²zTVN_SELCHANGED³qª¾½X¡A·í¨Ï¥ÎªÌ¿ï©w¬YÓ¶µ¥Ø®É¡A¥ý¨ú±o¶µ¥Ø¦WºÙ¤ÎlParam¡A¥ÑlParam§PÂ_¸Ó¶µ¥Ø¬O¡u¹q¸£¤¤ªºµwºÐ¡v
;¡B¹êÅéºÏºÐ¡BÅÞ¿èºÏºÐ¡BÀÉ®×ÁÙ¬O¤l¥Ø¿ý¡C¦pªG¬O«e¥|ªÌ¡A«h¦bÀRºA±±¥óhStatic¤¤Åã¥Ü¤@¨Ç¸ê®Æ¡F§_«h¤£Åã¥Ü¸ê®Æ
.IF [ebx].hdr.code==TVN_SELCHANGED
;¨ú±o³Q¿ï©w¶µ¥Øªº¦WºÙ»PlParam¡A¦s©ótvis.itemex
mov edx,[ebx].itemNew.hItem
lea eax,buffer
mov tvis.itemex.hItem,edx
mov tvis.itemex.imask,TVIF_TEXT or TVIF_PARAM
mov tvis.itemex.pszText,eax
mov tvis.itemex.cchTextMax,SIZEOF buffer
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvis.itemex
.IF tvis.itemex.lParam==504d5e43h ;"COMP"¦r¦ê
mov eax,OFFSET szRootItem
.ELSEIF tvis.itemex.lParam==44485946h ;"PHYHD"¦r¦ê
INVOKE get_phy_drv,ADDR buffer
.ELSEIF tvis.itemex.lParam==4448474ch ;"LGHD"¦r¦ê
INVOKE get_log_drv,ADDR buffer
.ELSEIF tvis.itemex.lParam==454c4946h ;"FILE"¦r¦ê¡A¥ý¨ú±o¸ÓÀɮתº§¹¾ã¸ô®|¡A¦A©I¥sget_file_infoÀò±o¸ê®Æ
INVOKE get_path,tvis.itemex.hItem,ADDR buffer
call get_file_info
.ELSE
mov eax,OFFSET szIconFile+4 ;«ü¦VNULL¦r¦ê
.ENDIF
INVOKE SetWindowText,hStatic,eax
|
³o¨Ç¬yµ{¤À¦¨¤W±¤ºØ±¡§Î¡AHDINFO2 ¥H²Ä 464¡ã475 ¦æªº .IF/.ELSEIF/.ELSE/.ENDIF §PÂ_¤À¤ä¡A¨C¤@ºØ±¡§Î³Ì«á³£¨Ïn¦bÀRºA±±¥ó¤WÅã¥Üªº¦r¦ê¦ì§}¡A¦s©ó EAX¡C³Ì«á 476 ¦æ¡A©I¥s SetWindowText¡A§â EAX ©Ò«ü¦ì§}ªº¦r¦êÅã¥Ü¦bÀRºA±±¥ó¤W¡C©³¤U»¡©ú³o¤ºØ¤£¦PÃþ«¬ªº¶µ¥Ø³B²z¤è¦¡¡G
µ{¦¡²Ä 465 ¦æ¡A¨Ï EAX «ü¦V¡uszRootItem¡v¦r¦ê¤§¦ì§}§Y¥i¡C
¦b²Ä 461 ¦æ¨ú±o¶µ¥Ø¦WºÙ¡A³o¶µ¥Ø¦WºÙÃþ¦ü¡u"¹êÅéºÏºÐ X",0¡vªº¦r¦ê¡A¨ä¤¤ªº¡uX¡v´N¬O²Ä´XÓ¹êÅéºÏºÐ¡CHDINFO2 §â¶µ¥Ø¦WºÙ·í¦¨¦r¦ê¡A§â¦¹¦r¦ê¦ì§}¶Çµ¹ get_phy_drv °Æµ{¦¡¡Cget_phy_drv ùتº²Ä 320¡ã327 ¦æ¡A´N¬O§ä¨ì²Ä´XÓ¹êÅéºÏºÐ¡A¦A§â¥¦¦s¨ì¡u"\\.\PhysicalDriveX",0¡v¦r¦êªº¡uX¡v³B¡C¡u"\\.\PhysicalDriveX",0¡v¦r¦ê¬O«Ý·|n©I¥s CreateFile ¥Î¨ìªº¡CCreateFile ¨Ã¤£¬O¶È¶È¯à«Ø¥ß©Î¶}±ÒÀɮסAÁÙ¯à¶}±Ò¹êÅéºÏºÐ©ÎÅÞ¿èºÏºÐ¡A½Ð°Ñ¦Òªþ¿ý¤»¡A¦³Ãö CreateFile ¥H¤Î DeviceIoControl ªº»¡©ú¡C³o¨âÓ API ¯àÀ° get_phy_drv ¨ú±o¹êÅéºÏºÐªº¸ê®Æ¡A¨£ HDINFO2.ASM ªº²Ä 331¡ã335 ¦æ¡Cget_phy_drv ³Ñ¤Un°µªº´N¬O¸g¥Ñ wsprintf §â¹êÅéºÏºÐªººÏ¬W¼Æ¡BºÏÀY¼Æ¡B¨CºÏyªººÏ°Ï¼Æ¡B¨CºÏ°Ï¦ì¤¸²Õ¼Æ¡BºÏºÐ®e¶qÅܦ¨¦r¦ê¡A¦s¨ì szInfo ¦r¦êùØ¡C¨£ HDINFO2 ²Ä 336¡ã346 ¦æ¡C
©M¹êÅéºÏºÐªº±¡§Î®t¤£¦h¡A§â¤w¸g¨ú±oªº¶µ¥Ø¦WºÙ¦ì§}¶Çµ¹ get_log_drv¡C¤£¹L¶µ¥Ø¦WºÙ¬OÃþ¦ü¡u"C:",0¡vªº¼Ë¤l¡A¦Ó©I¥s GetDiskFreeSpaceEx ¥²¶·¨Ï¥Î¡u"C:\",0¡vªº¦r¦ê¡A¦]¦¹ HDINFO2 ªº²Ä 285¡ã286 ¦æ°µ¤F³o¶µ§ïÅÜ¡CGetDiskFreeSpaceEx ªºì«¬¬O¡G
INVOKE GetDiskFreeSpaceEx,lpDirectoryName,lpFreeBytesAvailable,lpTotalNumberOfBytes,lpTotalNumberOfFreeBytes
GetDiskFreeSpaceEx ¯àÀò±oÅÞ¿èºÏºÐªº¥i¥Î¤j¤p¡B¥þ³¡¤j¤p¡B³Ñ¾l¤j¤p¡C²Ä¤@ӰѼơAlpDirectoryName¡A¬O¥Ø¿ý¦WºÙªº¦ì§}¡A¨Ò¦p¡u"C:\",0¡v¡A¦pªG¦¹°Ñ¼Æ¬° 0¡A«h¨Ï¥Î²{¦bºÏºÐªº®Ú¥Ø¿ý¡ClpFreeBytesAvailable¡BlpTotalNumberOfBytes¡BlpTotalNumberOfFreeBytes §¡¬°¦ì§}«ü¼Ð¡A¤À§O«ü¦V 64 ¦ì¤¸ªº¥¿¾ã¼Æ¡A¤À§O¥Nªí¨Ï¥ÎªÌ¥i¥Î¤j¤p¡BºÏºÐ¥þ³¡¤j¤p¡B³Ñ¾l¤j¤p¡A³æ¦ì§¡¬°¦ì¤¸²Õ¡C¦]¬°¨CӨϥΪ̰õ¦æ®É¡AÅv¤£¦P¡A¦]¦¹¨Ï¥ÎªÌ¥i¥Î¤j¤p¨Ã¤£¤@©wµ¥©ó³Ñ¾l¤j¤p¡C¤]¦]¦p¦¹¡A¨Ï¥ÎªÌ¤]»Ýn¹ï lpDirectoryName ©Ò«ü¦Vªº¥Ø¿ý¨ã¦³ FILE_LIST_DIRECTORY ªºÅv¤~¥i¥H¡C¦pªG©I¥s¦¨¥\¡A¶Ç¦^«D¹sÈ¡F¦pªG¥¢±Ñ¡A¶Ç¦^ 0¡A¥i©I¥s GetLastError ±o¨ì¿ù»~½X¡C
¥t¥~ lpFreeBytesAvailable¡BlpTotalNumberOfBytes¡BlpTotalNumberOfFreeBytes §¡«ü¦V 64 ¦ì¤¸ªº¾ã¼Æ¡A¨Ï¥Î¤è¦¡¦p¤U¡G
281 282 283
284 285 286 287 |
get_log_drv PROC USES ebx pLogHdName:LPSTR
LOCAL hAvailable,lAvailable:DWORD
LOCAL hTotal,lTotal:DWORD
LOCAL hFree,lFree:DWORD
mov eax,pLogHdName
mov WORD PTR [eax+2],5ch ;§ï¦¨¡u"C:\",0¡v¦r¦ê
INVOKE GetDiskFreeSpaceEx,pLogHdName,ADDR lAvailable,ADDR lTotal,ADDR lFree
|
n±o¨ì¬YÓÀɮתº¸ê®Æ¡A¤@©w±oª¾¹D³oÓÀɮתº§¹¾ãÀɦW¡A³o¸Ì©Ò¿×ªº§¹¾ãÀɦW«üªº¬O¥]§t¸ô®|ªº¦WºÙ¡A¨Ò¦p¡uC:\WINDOWS\NOTEPAD.EXE¡v´N¬O§¹¾ãªºÀɦW¡A¨ä¤¤¡uNOTEPAD.EXE¡v¬OÀɦW¡A¦b¡u.¡v¥ªÃ䪺¡uNOTEPAD¡v¬O¥DÀɦW¡A¡uEXE¡v¬O°ÆÀɦW¡A¡uC:\WINDOWS\¡v¬°¸ô®|¦W¡C¦Ó HDINFO2 ªº¾ðª¬À˵øùØ¡A¿ï¨ú¬YÓ¶µ¥Ø¡A¥u¯à±o¨ìÀɦW¡A¤£¯à±o¨ì¸ô®|¦WºÙ¡A¦]¦¹²Ä 470 ¦æ½T©w¨Ï¥ÎªÌ¿ï¨úªº¶µ¥Ø¬OÀɮ׫á¡A«K©ó 471 ¦æ©I¥s get_path ±o¨ì¸ô®|¦W¡Cget_path ·|¥hpºâ¦UÞ𪺶µ¥Ø¦WºÙ¡A³Ì«á§â§¹¾ãÀɦW°O¿ý©ó szPath ¦r¦êùØ¡C
è¶i¤J get_path °Æµ{¦¡®É¡A177¡ã185 ¦æ¬O§â¶µ¥Ø¦WºÙ²¾¨ì szFullname ¦r¦êªº³Ì°ª¦ì§}¡CszFullname ¬O¤@Ó 512 ¦ì¤¸²Õªøªº¦r¦ê¡A·í¨Ï¥ÎªÌ¿ï©w¶µ¥Ø®É¡AHDINFO2 ¤W¤£ª¾¹D«e±¸ô®|¦³¦h¤Ö¡A¦]¦¹¥ý§â«e±§C¦ì§}ªº¦a¤è¯dµ¹¸ô®|¦W¡A³Ì«á°ª¦ì§}¯dµ¹ÀɦW¡C²Ä 179 ¦æ©I¥s get_len ´N¬O¥Î¨Ópºâ¶µ¥Ø¦WºÙ¦³¦h¤Ö¦ì¤¸²Õ¡A¦s©ó ECX «áªð¦^¡AµM«á§â szFullname ¤§¦ì§}¥[¤W szFullname ¤j¤p ( ²Ä 182 ¦æ )¡A¦A´î¥h ECX ( ²Ä 183 ¦æ )¡A´N¥i¥Hª¾¹D¶µ¥Ø¦WºÙÀ³¸Ó¥Ñ szFullname ¦r¦êªºþ¤@Ó¦ì§}¶}©l¶ñ¤J¡A³Ì«á¥H¡urep movsb¡v«ü¥O²¾°Ê¶µ¥Ø¦WºÙ§Y¥i¡C°Ñ¦Ò¤U±µ{¦¡½X¡G
165 166 167
168 169 170 171
172 173 174 175
176 177 178 179
180 181 182 183
184 185 |
;¨ú±o¬Y¶µ¥Øªº¸ô®|¦WºÙ¡A¦s©ószPath¦r¦êùØ
;¿é¤J¡GhItm¡Ð¬Y¶µ¥Øªº¥N½X
;¡@¡@¡@pName¡Ð¬Y¶µ¥Øªº¦WºÙ©Ò¦b¦ì§}
get_path PROC USES ebx esi edi hItm:HTREEITEM,pName:LPSTR
LOCAL pFullname:LPSTR
LOCAL tvi:TVITEM
LOCAL buffer[MAX_PATH]:BYTE
LOCAL szFullname[512]:BYTE
cld
mov edx,hItm
mov tvi.lParam,0
mov tvi.hItem,edx
;§â¿ï©w¶µ¥Ø¦WºÙ²¾¨ìszFullname³Ì°ª¦ì§}¡A¥ç§Y¦r¦ê³Ì«á±
mov edi,pName
call get_len
lea edi,szFullname
mov esi,pName
add edi,SIZEOF szFullname
sub edi,ecx
mov pFullname,edi
rep movsb
|
±µ¤U¨Ó¶i¤J¤@Ó°j°é ( ²Ä 186¡ã205 ¦æ )¡C³oÓ°j°é¡A¨C¦¸°õ¦æ®É¡A¥ý¨ú±o¤÷¶µ¥Øªº¥N½X ( ²Ä 188 ¦æ )¡AµM«á¨Ì¥N½X¨ú±o¤÷¶µ¥Øªº¦WºÙ ( ²Ä 189¡ã195 ¦æ )¡A¦s©ó buffer ¦r¦ê ( ²Ä 189¡B192 ¦æ )¡A¦A©I¥s get_len pºâ¦WºÙªø«× ( ²Ä 196¡ã198 ¦æ )¡A¨M©wn²¾¨ì szFullname ªºþ¤@Ó¦ì§} ( ²Ä 199¡ã200 ¦æ )¡A°O¿ý¦b pFullname «á ( ²Ä 202 ¦æ )¡A³Ì«á¦A§â¤÷¶µ¥Ø¦WºÙ²¾¨ì¦¹¦ì§}¤W ( ²Ä 203 ¦æ ) ¨Ã¥[¤W¡u\¡v¡A§@¬°¥Ø¿ý»P¥Ø¿ý¤§¶¡ªº¤À¹j°O¸¹ ( ²Ä 204 ¦æ )¡C³oÓ°j°é±N¤@ª½°õ¦æ¡Aª½¨ì¬YÓ¤÷¶µ¥Ø¬OÅÞ¿èºÏºÐ¬°¤î¡AnÀˬdÅÞ¿èºÏºÐ¡A¥i¥HÀˬd¶µ¥Øªº lParam¡A¦pªG¬O 4448474CH ( 4448474CH ªº ASCII ½X´«¦¨^¤å¦r¥À´N¬O¡uLGHD¡v¦r¦ê )¡A´N¬OÅÞ¿èºÏºÐ¡C¦p¤U¡G
186 187
188 189 190 191
192 193 194 195
196 197 198 199
200 201 202 203
204 205 |
.WHILE tvi.lParam!=4448474ch ;"LGHD"¦r¦ê
;¨ú±o¤÷¶µ¥Ø¥N½X
INVOKE SendMessage,hTreeView,TVM_GETNEXTITEM,TVGN_PARENT,tvi.hItem
lea edx,buffer
mov tvi.imask,TVIF_TEXT or TVIF_HANDLE or TVIF_PARAM
mov tvi.hItem,eax
mov tvi.pszText,edx
mov tvi.cchTextMax,SIZEOF buffer
;¨ú±o¤÷¶µ¥Ø¦WºÙ
INVOKE SendMessage,hTreeView,TVM_GETITEM,0,ADDR tvi
lea edi,buffer
mov ecx,MAX_PATH
call get_len
mov edi,pFullname
sub edi,ecx
lea esi,buffer
mov pFullname,edi
rep movsb
mov BYTE PTR [edi-1],'\'
.ENDW |
get_path ªº³Ì«á´X¦æ¡A¬O§â¦s¦b szFullname ¦r¦êùتº§¹¾ãÀɦW²¾¨ì szPath ùØ¡C¦b szFullname ¦r¦êùتº§¹¾ãÀɦW¹ê»Ú¤W¤£¤@©w¬O±q szFullname ©Ò¦b¦ì§}¤@¶}©l¦s©ñ¡A¨ä¦s©ñ¦ì§}¬O°O¿ý¦b pFullname ÅܼÆùØ¡C²Ä 207 ¦æ´N¬O¨ú±o§¹¾ãÀɦWªº¯u¥¿¦s©ñ¦ì§}¡C¦Ü©ó§¹¾ãÀɦWªºªø«×¡A«h¬O°O¿ý¦b ECX ùØ¡A¥¦¬O¥Ñ szFullname ªº³Ì«á¦ì§}´î¥h§¹¾ãÀɦWªº¯u¥¿¦s©ñ¦ì§} ( ²Ä 206¡B208¡B210 ¤T¦æ )¡Cµ{¦¡½X¦p¤U¡G
206 207
208 209 210 211
212 213 |
lea ecx,szFullname
mov esi,pFullname
add ecx,512
mov edi,OFFSET szPath
sub ecx,esi
rep movsb
ret
get_path ENDP
|
¦b Win32 ¨t²ÎùØ¡AnÀò±oÀɮ׫إ߮ɶ¡¡B³Ìªñקï®É¶¡¡B³Ìªñ¦s¨ú®É¶¡¡A¥i¥H©I¥s GetFileTime¡BGetFileInformationByHandle µ¥ Win32 API¡A©³¤U¬O GetFileTime API ªºì«¬¡G
INVOKE GetFileTime,hFile,lpCreationTime,lpLastAccessTime,lpLastWriteTime
GetFileTime ªº«á¤TӰѼơAlpCreationTime¡BlpLastAccessTime¡BlpLastWriteTime ¤À§O¬O hFile ©Ò¥NªíÀɮתº«Ø¥ß®É¶¡¡B³Ìªñ¦s¨ú®É¶¡¡B³Ìªñקï®É¶¡¡A¤TªÌ§¡¬°¤@Ó¦ì§}«ü¼Ð¡A«ü¦V¤@ÓºÙ¬° FILETIME µ²ºcÅé¡A¦¹Äæ¦ìÀx¦s¤FÀɮ׮ɶ¡¡A¦³Ãö FILETIME µ²ºcÅ骺¸Ô²Ó»¡©ú¡A½Ð°Ñ¦Òªþ¿ý¤C FILETIME ªº»¡©ú¡C¦ý¬O¦b HDINFO2 ùØ¡A°£¤Fn±o¨ìÀɮ׮ɶ¡¥~¡AÁÙ·QÀò±o¨ä¥L¸ê®Æ¡A¦pÀɮפj¤p¡BÄݩʵ¥¡A¦]¦¹¶È©I¥s GetFileTime ¬O¤£°÷ªº¡C©Ò¥H¤p¤ì°¸¦b HDINFO2 ùØ©I¥s GetFileInformationByHandle ¦Ó¤£¬O GetFileTime¡A¥HÀò±oÀɮ׸û¦hªº¸ê®Æ¡AGetFileInformationByHandle ªºì«¬¬O¡G
INVOKE GetFileInformationByHandle,hFile,lpFileInformation
©I¥s GetFileInformationByHandle «e¡A¶·©ó hFile «ü©wÀÉ®×¥N½X¡A¨Ã±N lpFileInformation ¶ñ¦n¡ClpFileInformation °Ñ¼Æ¬O¤@Ó«ü¦V BY_HANDLE_FILE_INFORMATION µ²ºcÅ骺¦ì§}«ü¼Ð¡A©I¥s§¹¦¨«á¨t²Î·|©ó¦¹¦ì§}¶ñ¤J hFile ªº¸ê®Æ¡ABY_HANDLE_FILE_INFORMATION ªºÄæ¦ì¬O¡G
BY_HANDLE_FILE_INFORMATION STRUCT dwFileAttributes DWORD ? ftCreationTime FILETIME <> ftLastAccessTime FILETIME <> ftLastWriteTime FILETIME <> dwVolumeSerialNumber DWORD ? nFileSizeHigh DWORD ? nFileSizeLow DWORD ? nNumberOfLinks DWORD ? nFileIndexHigh DWORD ? nFileIndexLow DWORD ? BY_HANDLE_FILE_INFORMATION ENDS
©³¤U»¡©ú BY_HANDLE_FILE_INFORMATION ªº¦UÄæ¦ì¡G
dwFileAttributes ÀÉ®×ÄÝ©Ê | ¤Q¤»¶i¦ì ¼ÆÈ |
»¡©ú |
FILE_ATTRIBUTE_READONLY | 1H | °ßŪÀÉ¡Aµ{¦¡¥u¯àŪ¨ú¤£¯àקï©Î§R°£¡A°£«D±N³oÓÄÝ©Ê°£¥h |
FILE_ATTRIBUTE_HIDDEN | 2H | ¦¹ÀɮשΥؿý¬°ÁôÂÃÀÉ¡A¤@¯ë¬OµLªkÅã¥Ü©ó¿Ã¹õ¤W |
FILE_ATTRIBUTE_SYSTEM | 4H | ¦¹ÀɮשΥؿý¬°§@·~¨t²Îªº¤@³¡¥÷ |
FILE_ATTRIBUTE_DIRECTORY | 10H | ¦¹ hFile ¨Ã«DÀɮצӬO¥Ø¿ý |
FILE_ATTRIBUTE_ARCHIVE | 20H | «O¦sÀɮסA¦¹ÄݩʬO¬°¤F³Æ¥÷Àɮתºµ{¦¡©Ò¥Î¡A¨ã¦³¦¹Äݩʪí¥Ü©|¥¼³Æ¥÷¡A·íÀÉ®×è«Ø¥ß®É¡A´N¨ã¦³¦¹ÄÝ©Ê |
FILE_ATTRIBUTE_NORMAL | 80H | ¨S¦³¨ä¥LÄݩʪºÀɮסA¤]¤£¯à»P¨ä¥LÄݩʦX¥Î |
FILE_ATTRIBUTE_TEMPORARY | 100H | ¼È¦sÀÉ¡A¨Ò¦p¦b¡uC:\Documents and Settings\¨Ï¥ÎªÌ¦WºÙ\Local Settings\TEMP\~*.tmp¡v´N¨ã¦³¦¹ÄÝ©Ê¡A¦³¦¹ÄݩʪºÀÉ®×·|¬°¨t²Î¦Û°Ê§R°£ |
FILE_ATTRIBUTE_SPARSE_FILE | 200H | |
FILE_ATTRIBUTE_REPARSE_POINT | 400H | |
FILE_ATTRIBUTE_COMPRESSED | 800H | ¦¹ÀɮשΥؿý¬O³Q¨t²ÎÀ£ÁY³B²z¹Lªº¡C·í¨Ï¥ÎªÌ¦bÀɮשΥؿýªº¹Ï¥Ü¤W¡A«ö·Æ¹«¥kÁä¡A©ó¼u¥X¿ï³æ¤W¿ï¡u¤º®e¡v¡u¶i¶¥¡v¡AµM«á¤Ä¿ï¡uÀ£ÁY¤º®e¡A¸`¬ÙºÏºÐªÅ¶¡¡v«áªºÀɮשΥؿý¡A¤~·|¦³³oÓÄÝ©Ê |
FILE_ATTRIBUTE_OFFLINE | 1000H | |
FILE_ATTRIBUTE_ENCRYPTED | 4000H | ¦¹ÀɮשΥؿý¬°¨t²Î¥[±K³B²z¹L¤F¡C¦bÀɮשΥؿýªº¹Ï¥Ü¤W¡A«ö·Æ¹«¥kÁä¡A©ó¼u¥X¿ï³æ¤W¿ï¡u¤º®e¡v¡u¶i¶¥¡v¡AµM«á¤Ä¿ï¡u¥[±K¤º®e¡A«OÅ@¸ê®Æ¡v«áªºÀɮשΥؿý¡A¤~·|¦³³oÓÄÝ©Ê |
FILE_ATTRIBUTE_VIRTUAL | 10000H |
¦pªG¬O¥Ø¿ý¡A«hª½±µ«ü¦VªÅ¦r¦ê¡A¨ÏÀRºAªÅ¥ó¨S¦³¸ê®Æ¥iÅã¥Ü¡C( ·íµM¡A¦pªGnÅã¥Ü¥Ø¿ýªº¸ê®Æ¡A¤]¤£¬O°µ¤£¨ì¡A½Ð°Ñ¦Òªþ¿ý¤Cªþµù¡G¥Ø¿ýªº®É¶¡ )