【游戏技术群】959392658  【游戏出海群】12067810
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2395

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 2002|回复: 31

[薛飞] 用Unity做一个壁纸程序(二)

[复制链接]  [移动端链接]
排名
465
昨日变化
1

18

主题

195

帖子

3695

积分

Rank: 9Rank: 9Rank: 9

UID
686
好友
15
蛮牛币
4963
威望
0
注册时间
2013-7-4
在线时间
1504 小时
最后登录
2019-1-19

专栏作家社区QQ达人

QQ
发表于 2018-12-23 15:40:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 AWNUXCVBN 于 2018-12-25 13:24 编辑

TIM截图20181223153920.jpg
[C#] 纯文本查看 复制代码
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class WallPaper : MonoBehaviour
{ 
    [DllImport("user32.dll")]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    [DllImport("user32.dll")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string className, string winName);

    [DllImport("user32.dll")]
    public static extern IntPtr SetParent(IntPtr hwnd, IntPtr parentHwnd);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);

    [DllImport("user32.dll")]
    public static extern bool EnumWindows(EnumWindowsProc proc, IntPtr lParam);
    public delegate bool EnumWindowsProc(IntPtr hwnd, IntPtr lParam);

    [DllImport("user32.dll")]
    public static extern IntPtr SendMessageTimeout(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam, uint fuFlage, uint timeout, IntPtr result);

    public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);

    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetParent(IntPtr hWnd);

    [DllImport("user32.dll")]
    public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);

    [DllImport("kernel32.dll")]
    public static extern void SetLastError(uint dwErrCode);

    public Text t;

    public int ResWidth;//窗口宽度
    public int ResHeight;//窗口高度

    IntPtr wallPaper;
    IntPtr progman;
    IntPtr result;

    void Main()
    {
        ResWidth = Screen.width;
        ResHeight = Screen.height;
        //Screen.SetResolution(ResWidth, ResHeight, true, 30);

        if (Application.platform == RuntimePlatform.WindowsPlayer)
        {
            wallPaper = GetProcessWnd();
            progman = FindWindow("Progman", null);

            result = IntPtr.Zero;

            // 向 Program Manager 窗口发送 0x52c 的一个消息,超时设置为0x3e8(1秒)。
            SendMessageTimeout(progman, 0x52c, IntPtr.Zero, IntPtr.Zero, 0, 0x3e8, result);

            EnumWindows((hwnd, lParam) =>
            {
                // 找到包含 SHELLDLL_DefView 这个窗口句柄的 WorkerW
                if (FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", null) != IntPtr.Zero)
                {
                    // 找到当前 WorkerW 窗口的,后一个 WorkerW 窗口。 
                    IntPtr tempHwnd = FindWindowEx(IntPtr.Zero, hwnd, "WorkerW", null);

                    // 隐藏这个窗口
                    ShowWindow(tempHwnd, 0);
                }
                return true;
            }, IntPtr.Zero);

            SetParent(wallPaper, progman);
        }
    }

    // Update is called once per frame
    void Update()
    {

    }

    private void OnApplicationFocus(bool focus)
    {
        if (Application.platform == RuntimePlatform.WindowsPlayer)
        {
            t.text += " focus:" + focus;
            if (focus)
            {

            }
            else
            {

            }
        }

    }

    public static IntPtr GetProcessWnd()
    {
        IntPtr ptrWnd = IntPtr.Zero;
        uint pid = (uint)Process.GetCurrentProcess().Id;
        // 当前进程 ID         
        bool bResult = EnumWindows(new WNDENUMPROC(delegate (IntPtr hwnd, uint lParam)
        {
            uint id = 0;
            if (GetParent(hwnd) == IntPtr.Zero)
            {
                GetWindowThreadProcessId(hwnd, ref id);
                if (id == lParam)
                // 找到进程对应的主窗口句柄  
                {
                    ptrWnd = hwnd;
                    // 把句柄缓存起来     
                    SetLastError(0);
                    // 设置无错误       
                    return false;
                    // 返回 false 以终止枚举窗口       
                }
            }
            return true;
        }), pid);
        return (!bResult && Marshal.GetLastWin32Error() == 0) ? ptrWnd : IntPtr.Zero;
    }
      
}



主要bug解决了……其他bug……有待继续
项目地址https://gitee.com/awnuxcvbn/WallPaper.git

回复

使用道具 举报

7日久生情
1947/5000
排名
1631
昨日变化
5

0

主题

628

帖子

1947

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
135463
好友
0
蛮牛币
95
威望
0
注册时间
2016-1-23
在线时间
541 小时
最后登录
2019-1-20
发表于 2018-12-23 17:45:09 | 显示全部楼层
6666666666666666666666666666

回复 支持 反对

使用道具 举报

3偶尔光临
171/300
排名
11502
昨日变化
152

0

主题

52

帖子

171

积分

Rank: 3Rank: 3Rank: 3

UID
301976
好友
0
蛮牛币
359
威望
0
注册时间
2018-10-31
在线时间
35 小时
最后登录
2019-1-19
发表于 2018-12-23 21:46:06 | 显示全部楼层
优秀啊楼主


回复

使用道具 举报

7日久生情
1923/5000
排名
2058
昨日变化
5

5

主题

740

帖子

1923

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
239879
好友
1
蛮牛币
4157
威望
0
注册时间
2017-8-26
在线时间
526 小时
最后登录
2019-1-19
发表于 2018-12-24 08:23:37 | 显示全部楼层
66666666666666666

回复 支持 反对

使用道具 举报

5熟悉之中
815/1000
排名
2501
昨日变化
12

0

主题

133

帖子

815

积分

Rank: 5Rank: 5

UID
26073
好友
0
蛮牛币
3296
威望
0
注册时间
2014-5-21
在线时间
118 小时
最后登录
2019-1-19
发表于 2018-12-24 08:41:24 | 显示全部楼层
楼主这操作6啊,厉害厉害

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1309/1500
排名
2558
昨日变化
12

0

主题

296

帖子

1309

积分

Rank: 6Rank: 6Rank: 6

UID
163777
好友
1
蛮牛币
495
威望
0
注册时间
2017-2-27
在线时间
461 小时
最后登录
2019-1-18
发表于 2018-12-24 08:50:00 | 显示全部楼层
马克一下

回复

使用道具 举报

6蛮牛粉丝
1202/1500
排名
4915
昨日变化
29

0

主题

705

帖子

1202

积分

Rank: 6Rank: 6Rank: 6

UID
254705
好友
1
蛮牛币
1194
威望
0
注册时间
2017-11-16
在线时间
209 小时
最后登录
2019-1-18
发表于 2018-12-24 09:04:22 | 显示全部楼层
66666666666

回复

使用道具 举报

5熟悉之中
645/1000
排名
4479
昨日变化
19

1

主题

200

帖子

645

积分

Rank: 5Rank: 5

UID
245227
好友
0
蛮牛币
832
威望
0
注册时间
2017-9-21
在线时间
122 小时
最后登录
2019-1-18
发表于 2018-12-24 09:34:10 | 显示全部楼层
这不是用了win的API吗, 用DX直接写不更方便吗

回复 支持 反对

使用道具 举报

排名
47495
昨日变化
21

0

主题

19

帖子

44

积分

Rank: 1

UID
143580
好友
1
蛮牛币
20
威望
0
注册时间
2016-3-27
在线时间
22 小时
最后登录
2018-12-25
发表于 2018-12-24 09:40:29 | 显示全部楼层
Unity 调用Window 接口,这个网上资源不多

回复 支持 反对

使用道具 举报

5熟悉之中
654/1000
排名
4280
昨日变化
4

3

主题

174

帖子

654

积分

Rank: 5Rank: 5

UID
237362
好友
0
蛮牛币
2732
威望
0
注册时间
2017-8-13
在线时间
147 小时
最后登录
2019-1-19
发表于 2018-12-24 10:08:40 | 显示全部楼层
必须拿来学习学习
[发帖际遇]: 一个袋子砸在了 专业找茬的 头上,专业找茬的 赚了 1 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
972/1000
排名
2141
昨日变化
2

7

主题

112

帖子

972

积分

Rank: 5Rank: 5

UID
53034
好友
1
蛮牛币
3515
威望
0
注册时间
2014-11-4
在线时间
215 小时
最后登录
2019-1-14
发表于 2018-12-24 16:26:54 | 显示全部楼层
重拾发现惊喜

回复

使用道具 举报

排名
18551
昨日变化
8

0

主题

17

帖子

72

积分

Rank: 2Rank: 2

UID
222850
好友
0
蛮牛币
90
威望
0
注册时间
2017-5-19
在线时间
23 小时
最后登录
2019-1-10
发表于 2018-12-24 16:43:15 | 显示全部楼层
优秀 大佬牛逼

回复

使用道具 举报

6蛮牛粉丝
1005/1500
排名
3747
昨日变化
14

0

主题

302

帖子

1005

积分

Rank: 6Rank: 6Rank: 6

UID
180321
好友
6
蛮牛币
814
威望
0
注册时间
2016-11-21
在线时间
313 小时
最后登录
2019-1-18
发表于 2018-12-25 10:06:20 | 显示全部楼层
大佬早上好

回复

使用道具 举报

5熟悉之中
630/1000
排名
8116
昨日变化
84

0

主题

399

帖子

630

积分

Rank: 5Rank: 5

UID
300432
好友
1
蛮牛币
747
威望
0
注册时间
2018-10-18
在线时间
77 小时
最后登录
2019-1-19
发表于 2018-12-25 11:12:29 | 显示全部楼层
大佬早上好

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表