易语言吧 关注:266,449贴子:1,663,971
  • 15回复贴,共1

论Fences的原理

只看楼主收藏回复

Fences是一个桌面整理软件,我个人很喜欢用,但是要付费。虽然柠檬桌面是一个替代品,,但它有推广,不符合我的要求
所以我想做一个和Fences差不多的软件,那么Fences是什么原理呢?图标显示在软件内,但快捷方式文件确实在桌面内,什么原理?


IP属地:江西来自Android客户端1楼2017-02-03 19:29回复
    没用过,这个软件 不过看你口述的情况 有俩种 一是劫持桌面管理器 把绘制函数hook了 第二种的可能是修改文件夹后缀名


    IP属地:福建来自Android客户端2楼2017-02-03 19:52
    回复
      隐藏了


      IP属地:河南来自Android客户端3楼2017-02-03 19:53
      收起回复
        ddt


        IP属地:广东来自Android客户端4楼2017-02-03 20:49
        回复
          截个图看看,不是很懂你的意思


          IP属地:广东来自Android客户端5楼2017-02-04 01:42
          回复
            暖贴


            来自Android客户端7楼2017-02-04 06:09
            回复
              我用的破解版


              IP属地:山东来自WindowsPhone客户端9楼2017-02-04 08:46
              回复
                这个东西用过一次,那时候是配合rainmeter用的...后来我直接建了个文件夹来储存快捷方式了。。。。。。。
                —我是萌萌哒小肉肉呀~咿呀咿呀~


                IP属地:山东来自WindowsPhone客户端11楼2017-02-04 09:16
                回复
                  使用后就是这个样子,非常整齐


                  IP属地:江西来自Android客户端12楼2017-02-05 17:17
                  收起回复
                    getdesktopicons
                    #include <WindowsX.h>
                    #include <atlstr.h>//可以用 cstring了
                    #include <stdio.h>
                    #include <locale>
                    #include <CommCtrl.h>//windows通用控件接口
                    int main()
                    {
                    _tsetlocale(LC_CTYPE,TEXT(""));
                    HWND hwndLv=GetFirstChild(GetFirstChild(
                    FindWindow(TEXT("ProgMan"), NULL)));//获取到桌面图标所在的 ListView
                    if (hwndLv==NULL)
                    {
                    _tprintf(TEXT("Error Find Destop Window"));//寻找桌面图标列表框失败
                    return -1;
                    }
                    int iMaxCount=ListView_GetItemCount(hwndLv);//图标数
                    _tprintf(TEXT("%d Items hwnd:%d/r/n"),iMaxCount,hwndLv);
                    _tsystem(TEXT("pause"));
                    DWORD dwPid;
                    GetWindowThreadProcessId(hwndLv,&dwPid);//获取进程ID
                    HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,dwPid);//打开进程
                    if (hProcess==INVALID_HANDLE_VALUE)
                    {
                    _tprintf(TEXT("Error Open Process"));//打开进程失败
                    return -1;
                    }
                    LVITEM *plvitem=(LVITEM*)VirtualAllocEx(hProcess, NULL, sizeof(LVITEM),
                    MEM_COMMIT, PAGE_READWRITE);//在目标进程内分配一块小内存
                    TCHAR *pszName=(TCHAR*)VirtualAllocEx(hProcess, NULL, MAX_PATH*sizeof(TCHAR),
                    MEM_COMMIT, PAGE_READWRITE);//分配名字
                    POINT *ppt=(POINT*)VirtualAllocEx(hProcess, NULL, sizeof(POINT),
                    MEM_COMMIT, PAGE_READWRITE);//获取坐标用
                    for (int i=0;i<iMaxCount;i++)
                    {
                    TCHAR szName[MAX_PATH];
                    //ListView_GetItemText(hwndLv, i, 0, szName,sizeof(szName));//获取图标名称
                    LVITEM lv={0};
                    lv.cchTextMax=MAX_PATH*sizeof(TCHAR);
                    lv.pszText=pszName;
                    WriteProcessMemory(hProcess,plvitem,&lv,sizeof(LVITEM),NULL);//吧信息写入
                    SendMessage(hwndLv,LVM_GETITEMTEXT,i,(LPARAM)plvitem);//发送消息
                    ReadProcessMemory(hProcess,pszName,szName,sizeof(szName),NULL);//读取名字
                    POINT pt;
                    //ListView_GetItemPosition(hwndLv, i, &pt);//获取图标所在坐标
                    SendMessage(hwndLv,LVM_GETITEMPOSITION,i,(LPARAM)ppt);
                    ReadProcessMemory(hProcess,ppt,&pt,sizeof(POINT),NULL);//读取图标坐标
                    _tprintf(TEXT("%4d,%-4d %s/r/n"),pt.x,pt.y,szName);
                    }
                    VirtualFreeEx(hProcess, plvitem, 0, MEM_RELEASE);//释放内存 打扫战场
                    VirtualFreeEx(hProcess, pszName, 0, MEM_RELEASE);
                    VirtualFreeEx(hProcess, ppt, 0, MEM_RELEASE);
                    CloseHandle(hProcess);
                    _tsystem(TEXT("pause"));
                    return 0;
                    }


                    IP属地:福建来自Android客户端13楼2017-02-05 19:38
                    回复