win7下获取资源管理器中鼠标选中文件路径

IUIAutomation

IUIAutomationElement

GetCurrentPropertyValue

http://msdn.microsoft.com/en-us/library/ee671212(v=VS.85).aspx

 

 

取桌面图标位置.   2k,   98   方法不同.

            //   for   NT   based   /

            /*   取桌面   ListView   的句柄   */
                    HWND   hDeskTop;
                    hDeskTop   =   FindWindow( "progman ",   NULL);
                    hDeskTop   =   FindWindowEx(hDeskTop,   0,   "shelldll_defview ",   NULL);
                    hDeskTop   =   FindWindowEx(hDeskTop,   0,   "syslistview32 ",   NULL);


            /*   取   explorer.exe   句柄.   注意   OpenProcess   的参数   */
                    DWORD   dwProcessId;
                    GetWindowThreadProcessId(hDeskTop,   &dwProcessId);
                    HANDLE   hProcess   =   OpenProcess(PROCESS_VM_READ   |   PROCESS_VM_OPERATION,   FALSE,   dw
            ProcessId);


            /*   在   explorer.exe   空间内分配内存   */
                    PVOID   pv   =   VirtualAllocEx(hProcess,   NULL,   sizeof(POINT),   MEM_COMMIT,   PAGE_READW
            RITE);


            /*   给桌面   ListView   窗口发一   LVM_GETITEMPOSITION   取   "我的电脑 "   坐标   */
                    ListView_GetItemPosition(hDeskTop,   1,   pv);


            /*   把由   LVM_GETITEMPOSITION   获得的坐标数据复制到   pt   结构   */
                    POINT   pt;
                    ReadProcessMemory(hProcess,   pv,   &pt,   sizeof(POINT),   NULL);


            /*   释放内存,   句柄   */
                    VirtualFreeEx(hProcess,   pv,   0,   MEM_RELEASE);
                    CloseHandle(hProcess);


            //   for   9x   /

            /*   取桌面   ListView   的句柄   */
                    HWND   hDeskTop;
                    hDeskTop   =   FindWindow( "progman ",   NULL);
                    hDeskTop   =   FindWindowEx(hDeskTop,   0,   "shelldll_defview ",   NULL);
                    hDeskTop   =   FindWindowEx(hDeskTop,   0,   "syslistview32 ",   NULL);


            /*   分配一共享内存   */
                    HANDLE   hmm   =   CreateFileMapping(INVALID_HANDLE_VALUE,   NULL,   PAGE_READWRITE,   0,   s
            izeof(POINT),   NULL);
                    POINT   *   ppt;
                    ppt   =   (POINT   *)MapViewOfFile(hmm,   FILE_MAP_ALL_ACCESS,   0,   0,   0);


            /*   给桌面   ListView   窗口发一   LVM_GETITEMPOSITION   取   "我的电脑 "   坐标   */
                    ListView_GetItemPosition(   hDeskTop,   0,   ppt);


            /*   释放内存.   对   ppt   的操作要在这之前做.   */
                    UnmapViewOfFile(ppt);
                    CloseHandle(hmm);


            不同版本的   EXPLORER   中,   "我的电脑 "   可能有不同的   index,   就是传给   ListView_GetItem
            Position   的第   2   个参数.   2000   下是   1,   98   下似乎是   0.

         
         

                        网友对该文章的评论  
                          网友:   匿名   发表于:   2003-9-27   18:22:52

                        you   don 't   need     show   off   here    
                     
                          网友:   sd   发表于:   2003-6-8   17:31:22

                        wwwwwwww    
                     
                          网友:   匿名   发表于:   2003-2-28   16:49:52

                        获取桌面图标位置.   2k,   98   方法不同.

                        //   for   NT   based   /

                        /*   取桌面   ListView   的句柄   */
                                HWND   hDeskTop;
                                hDeskTop   =   FindWindow( "progman ",   NULL);
                                hDeskTop   =   FindWindowEx(hDeskTop,   0,   "shelldll_defview ",   NULL);
                                hDeskTop   =   FindWindowEx(hDeskTop,   0,   "syslistview32 ",   NULL);


                        /*   取   explorer.exe   句柄.   注意   OpenProcess   的参数   */
                                DWORD   dwProcessId;
                                GetWindowThreadProcessId(hDeskTop,   &dwProcessId);
                                HANDLE   hProcess   =   OpenProcess(PROCESS_VM_READ   |   PROCESS_VM_OPERATION,   FALSE,   dw
                        ProcessId);


                        /*   在   explorer.exe   空间内分配内存   */
                                PVOID   pv   =   VirtualAllocEx(hProcess,   NULL,   sizeof(POINT),   MEM_COMMIT,   PAGE_READW
                        RITE);


                        /*   给桌面   ListView   窗口发一   LVM_GETITEMPOSITION   取   "我的电脑 "   坐标   */
                                ListView_GetItemPosition(hDeskTop,   1,   pv);


                        /*   把由   LVM_GETITEMPOSITION   获得的坐标数据复制到   pt   结构   */
                                POINT   pt;
                                ReadProcessMemory(hProcess,   pv,   &pt,   sizeof(POINT),   NULL);


                        /*   释放内存,   句柄   */
                                VirtualFreeEx(hProcess,   pv,   0,   MEM_RELEASE);
                                CloseHandle(hProcess);


                        //   for   9x   /

                        /*   取桌面   ListView   的句柄   */
                                HWND   hDeskTop;
                                hDeskTop   =   FindWindow( "progman ",   NULL);
                                hDeskTop   =   FindWindowEx(hDeskTop,   0,   "shelldll_defview ",   NULL);
                                hDeskTop   =   FindWindowEx(hDeskTop,   0,   "syslistview32 ",   NULL);


                        /*   分配一共享内存   */
                                HANDLE   hmm   =   CreateFileMapping(INVALID_HANDLE_VALUE,   NULL,   PAGE_READWRITE,   0,   s
                        izeof(POINT),   NULL);
                                POINT   *   ppt;
                                ppt   =   (POINT   *)MapViewOfFile(hmm,   FILE_MAP_ALL_ACCESS,   0,   0,   0);


                        /*   给桌面   ListView   窗口发一   LVM_GETITEMPOSITION   取   "    
                     
                          网友:   Wormie4evr(wormie4evr@peoplemail.com.cn)   发表于:   2003-2-13   20:58:52

                        barking:
                        不好意思,现在才看到。它们都是是桌面进程的窗口的类名,依次为父子窗口。
                        这些资料用Spy++软件获取很方便。    
                     
                          网友:   daixi   发表于:   2003-1-27   11:31:29

                        ListView_GetItemPosition,可能是少了頭文件commctrl.h    
                     
                          网友:   barking(barking_gentleman@hotmail.com)   发表于:   2003-1-26   9:48:53

                        ListView_GetItemPosition在编译时有错误提示是这个函数没被声明
                        应如何改?    
                     
                          网友:   barking(barking_gentleman@hotmail.com)   发表于:   2003-1-20   8:44:58

                        能不能详细的说明一下 "progman ",   "shelldll_defview ",     "syslistview32 ",   各是什么意思?
                        在哪里能找到关于这些东西的资料
                        谢谢    
         

-----   Original   Message   -----  
From:   <li-jie_wang@agilent.com>
To:   <superaide@163.com>
Sent:   Friday,   October   28,   2005   12:41   PM
Subject:   hehe


Windows   高级编程指南


何编程实现,控制桌面图标是否自动排列,最好用API;
就是说我想控制     桌面点右键-> 排列图标-> 自动排列     这一项是否被选中
int   GetSystemMetrics(
    int   nIndex       //   system   metric   or   configuration   setting
);

参数添SM_ARRANGE,得到是否自动排列


POINT   Point;
int   i,n;
hWnd=FindWindow( "Progman ", "Program   Manager ");
hWnd=GetWindow(hWnd,GW_CHILD);
hWnd=GetWindow(hWnd,GW_CHILD);
n=ListView_GetItemCount(hWnd);
for(i=0;i <n;i++)
        ListView_GetItemPosition(hWnd,i,&Point);     //此步出错,因为是不同进程

我已经替你问了高人,但他说只在NT下才能用其它方法解决。呵呵,你去看看http://www.csdn.net/expert/topic/217/217263.shtm吧,我也没办法了,原来以为可以的,解决了记得告诉我一声。


能够指定任何一个桌面上的图标位置。??

将第一个项移到(500,   500)
HWND   hPM   =   ::FindWindow(NULL,   "Program   Manager ");
HWND   hShell   =   ::FindWindowEx(hPM,   NULL,   "SHELLDLL_DefView ",   NULL);
HWND   hSLV   =   ::FindWindowEx(hShell,   NULL,   "SysListView32 ",   NULL);
ListView_SetItemPosition(hSLV,   0,   500,   500);  

其它要用到的消息查下msdn,
LVM_GET打头

HWND   hWndLv=GetFirstChild(GetFirstChild(FindWindow( "ProgMan ",NULL)))
hWndLv是左面ListView的句柄
然后用GetItemRect(hWndLv)得到每个图标的位置
SetItemRect()设置每个图标的位置
chi\


桌面是一个sysList32的通用控件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值