解决了可以开新贴送分,程序含源代码晴发送到[email protected]必须是vc6。0代码, 下面的东西可以作为参考========================获取桌面图标位置. 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([email protected]) 发表于: 2003-2-13 20:58:52            barking:
            不好意思,现在才看到。它们都是是桌面进程的窗口的类名,依次为父子窗口。
            这些资料用Spy++软件获取很方便。  
           
             网友: daixi 发表于: 2003-1-27 11:31:29            ListView_GetItemPosition,可能是少了頭文件commctrl.h  
           
             网友: barking([email protected]) 发表于: 2003-1-26 9:48:53            ListView_GetItemPosition在编译时有错误提示是这个函数没被声明
            应如何改?  
           
             网友: barking([email protected]) 发表于: 2003-1-20 8:44:58            能不能详细的说明一下"progman", "shelldll_defview",  "syslistview32", 各是什么意思?
            在哪里能找到关于这些东西的资料
            谢谢  
     ----- Original Message ----- 
From: <[email protected]>
To: <[email protected]>
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的通用控件

解决方案 »

  1.   

    上面讲的基本方法都有了阿,自己写吧,这个不难。
      

  2.   

    你要干什么?这么详细了还不能作?
      

  3.   

    对啊,有这么多参考了,楼主还想要什么?
      

  4.   

    >解决了可以开新贴送分要开贴请到非技术区散分
      

  5.   

    楼主是不是要大家帮他做个完备的工程啊
      

  6.   

    没有时间去调试了,没有感兴趣的同学吗?