• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            我住包子山

            this->blog.MoveTo("blog.baozishan.in")

            向Vista學習,實現XP下重命名文件忽略選取擴展名

            image   這兩天對于HOOK的技術有了一個入門的學習,用過vista的同學會發現vista重命名一個文件比如vista.exe,他會自動選中vista忽略掉擴展名,帶來比較方便的用戶體驗,學了一些hook我也想試試xp下能不能做這樣的事情。于是參考一些文章,勉強實現了,有一點兒缺陷(請看最后)。

               經過觀察我發現重命名時,資源管理器會向他的子窗口listview發送一個LVM_EDITLABELA的控制消息,所以我使用了WH_CALLWNDPROCRET類型的全局掛鉤,這個掛鉤可以在sendmessage結束以后處理傳送和返回的數據。發送了LVM_EDITLABELA消息后,會在lParam得到一個編輯窗口的句柄,只需之后對這個窗口發送EM_SETSEL控制消息就能夠改變重命名時候的高亮區域。hook回調函數如下:

               1: static LRESULT CALLBACK msghook(UINT nCode, WPARAM wParam, LPARAM lParam)
               2: {
               3:     if(nCode < 0)
               4:     {
               5:         CallNextHookEx(hook,nCode,wParam,lParam);
               6:         return 0;
               7:     }
               8:     LPCWPRETSTRUCT msg = (LPCWPRETSTRUCT) lParam;
               9:     if(msg->message == LVM_EDITLABELA || msg->message == LVM_EDITLABELW)
              10:     {
              11:         GetClassName(msg->hwnd,className,255);
              12:         GetWindowText(msg->hwnd,wndName,255);
              13:         if(0==_tcscmp(className,_TEXT("SysListView32")))
              14:         {
              15:             if(0==_tcscmp(wndName,_TEXT("FolderView")))
              16:             {
              17:                 hEditWnd = (HWND)msg->lResult;
              18:                 GetWindowText(hEditWnd,className,255);//暫時放入className
              19:                 SendMessage(hEditWnd,EM_SETSEL,0,findDot(className));
              20:             }
              21:         }
              22:     }
              23:     return CallNextHookEx(hook,nCode,wParam,lParam);
              24: }

             

            className與wndName是兩個TCHAR數組,從hwnd獲取信息存在那里進行判斷是否為Shell中的listview,避免在其它使用listview的應用程序里會進行之后的處理。

               工程文件下載,點這里

               程序下載,點這里

               使用方法,編譯以后直接運行GRnamer就可以,如果不想用了,從任務管理器把它關閉,沒有做trayicon之類的東西,因為只是個demo。

            image   最后說一下缺陷,缺陷就是這樣做沒有辦法判斷文件與文件夾的區別,所以會有如圖的效果,我自己沒有想到解決的方法,請達人們指點。:)

             

               參考的文章:

            msdn Hooks hook的全部參考

            codeproject Hooks and DLLs 我的hook dll都是照著它寫的。

            posted on 2008-05-17 02:05 Gohan 閱讀(3015) 評論(17)  編輯 收藏 引用 所屬分類: C++MFC/SDK

            Feedback

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名[未登錄] 2008-05-17 10:34 Rich

            學習了。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-17 10:41 blankyao

            學習一下~  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-17 10:42 Leewings

            這么麻煩....
            ubuntu自動實現了..哈哈.~  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-17 10:50 Gohan

            @Leewings
            呵呵,是有點麻煩:)  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-17 11:27 陳梓瀚(vczh)

            讀文件的attribute是可以知道這東西是文件還是文件夾的。至于路徑,去hack資源管理器的那個下拉列表應該看得到的吧?這個我沒干過,不知道行不行。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-17 12:09 Gohan

            @陳梓瀚(vczh)
            恩,這樣應該能得到路徑,不過可能對于桌面上的文件就不支持了,還有問題是如果沒有顯示地址工具欄是找不到那個combolbox的。以后等學好了shell 擴展可能能更完善的解決。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-18 23:29 閑耘

            Win2k3下無反應。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-19 12:42 Gohan

            @閑耘
            哦?可能是2003加強了安全吧,我沒有用過2003,這個demo只在xp下試用通過  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-19 17:07 多多

            @Gohan

            桌面上也可以得到路徑。用

            %USERPROFILE%\桌面

            即可~  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-19 19:08 Gohan

            @多多
            是的,謝謝,對了,桌面好像可以也可通過一個shell相關的函數返回pidl來得到。等以后練習練習  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-19 19:11 多多

            @Gohan

            這個我也有印象,因為桌面就是Explorer的一個窗口,可以獲得他的句柄。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2008-05-20 21:33 Gohan

            @多多
            好的,多多交流  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2009-02-22 15:41 einheria

            有一個缺點,F2和右鍵重命名都可以實現,慢雙擊發起的重命名還是高亮選取全部

            LZ這個程序很好,我已經設為開機自動運行了,希望可以改進!  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2009-02-26 11:46 Gohan

            @einheria
            謝謝你的支持,這個小程序只是一個小練手,不知道啥時候能夠再改改了。高檔的軟件有很多,QTTabbar也附有這個功能。  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2010-04-08 12:19

            多謝!!!  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2011-05-26 16:07 free keylogger download

            win7 下怎么不能正確判斷呢?
            情樓主幫忙看一下,多謝  回復  更多評論   

            # re: 向Vista學習,實現XP下重命名文件忽略選取擴展名 2011-05-26 16:09 free auto bulk mail sender download

            多謝分享,非常實用的一個feature!  回復  更多評論   

            久久综合视频网站| 久久精品极品盛宴观看| 精品久久久久久无码中文字幕一区 | 久久久99精品成人片中文字幕 | 色诱久久av| 久久ww精品w免费人成| 99久久无码一区人妻| 亚洲色欲久久久综合网东京热| 久久99国产精品久久99果冻传媒| 内射无码专区久久亚洲| 精品久久777| A级毛片无码久久精品免费| Xx性欧美肥妇精品久久久久久| 久久国产色av免费看| 久久久网中文字幕| 国产人久久人人人人爽| 久久久国产视频| 国产精品永久久久久久久久久 | 久久天天躁狠狠躁夜夜躁2O2O| 久久精品国产99国产精品亚洲| 久久夜色tv网站| 国产精品一区二区久久| 久久婷婷五月综合色高清| 久久综合九色综合网站| 久久这里都是精品| 国产99久久久久久免费看 | 久久久久亚洲爆乳少妇无| 精品综合久久久久久97超人| 久久99热这里只有精品国产| 三级三级久久三级久久| 欧美午夜A∨大片久久 | 国产无套内射久久久国产| 国产一级持黄大片99久久| 国内精品久久久久久99蜜桃| 99精品国产综合久久久久五月天| 热久久视久久精品18| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 人妻精品久久无码专区精东影业 | 亚洲成色999久久网站| 2021少妇久久久久久久久久| 亚洲国产二区三区久久|