首页
社区
课程
招聘
如何移动系统桌面?
发表于: 2013-12-5 09:29 4153

如何移动系统桌面?

2013-12-5 09:29
4153
看到一些小软件运行的时候都在桌面左侧创建了一个窗口,把桌面往右边移动了一部分,请问各位大婶是如何弄的,经过一些资料跟思考,我写的如下代码:
HWND SetDesktopWindowsPos(BOOL brect)
{
	int width = GetSystemMetrics(1);
	int right = GetSystemMetrics(0);
	HWND  hwndParent = FindWindowW(L"Progman",L"Program Manager");
	if(hwndParent == NULL)
	{
		MyFormatMessage(GetLastError());
		return 0;
	}
	HWND hChildWnd = GetWindow(hwndParent, GW_CHILD);
	TCHAR childClassName[128];
	GetClassName(hChildWnd, childClassName, 128);
	HWND  hwndSHELLDLL_DefView = FindWindowExW(hwndParent, 0, L"SHELLDLL_DefView", 0);
	if(hwndParent == NULL)
	{
		MyFormatMessage(GetLastError());
		return 0;
	}
	if(brect == TRUE)
	{
		BOOL bRet = SetWindowPos(hwndSHELLDLL_DefView,HWND_TOP,WINDOWDLG_W,0,right - WINDOWDLG_W,width,SWP_NOSENDCHANGING);
		if(bRet == FALSE)
		{
			MyFormatMessage(GetLastError());
			return 0;
		}
		return hwndSHELLDLL_DefView;
	}
	if(brect == FALSE)
	{
		BOOL bRet = SetWindowPos(hwndSHELLDLL_DefView,HWND_TOP,0,0,right,width,SWP_NOSENDCHANGING);

		if(bRet == FALSE)
		{
			MyFormatMessage(GetLastError());
			return 0;
		}
	}
	return 0;
} 


运行发现是OK的,可以把桌面右移一部分,但是假如此时我更换一下系统主题或者换个桌面背景桌面又返回到最左边了,请问如何解决这个问题?
ps:切换了主题之后HWND  hwndSHELLDLL_DefView = FindWindowExW(hwndParent, 0, L"SHELLDLL_DefView", 0);这行代码连窗口句柄都拿不到了,又是为啥呢? 我的环境是win8,3Q

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
根据你的描述,应该是监测主题更换、监测背景更改

监测到时,再次调用你的代码。
2013-12-5 09:54
0
游客
登录 | 注册 方可回帖
返回