您的位置:首页 > 其它

Win7下窗口移出桌面范围 无法还原情况的解决

2015-06-08 16:47 537 查看
我用的双显示器,经常有窗口不小心拖出界,就拖不回来了。以前不是win7系统,可以在程序取得焦点后,按快捷键alt+space,再按M,进入移动状态,给它移出来。可惜win7也不支持这个操作。

最近svn更新窗口又被拖出界了,网上找不到解决方式,写了几行vc程序来处理这问题,记录在这里,万一再遇到好处理。

// findwindow1.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "findwindow1.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

HMODULE hModule = ::GetModuleHandle(NULL);

if (hModule != NULL)
{
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
}
}
else
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: GetModuleHandle 失败\n"));
nRetCode = 1;
}
///上面是自动生成的代码,下面是正式代码
CString str=_T("Update Finished!");
LPCWSTR lpcwStr = str.AllocSysString();
HWND hWnd = ::FindWindowW(NULL,lpcwStr);

if(hWnd!=NULL)
{
::SendMessage(hWnd,WM_SYSCOMMAND,SC_MOVE,0);
}

return nRetCode;
}


程序运行后,会停止在黑窗口上,但焦点已经移到了所要找的窗口,并启用了移动的模式。按住鼠标拖出来界面即可。如果拖不出来,可以多试几次,或把目标窗口关上再重开看下。

问题又变严重了,mstsc远程的窗口不见了,用上面方法也不奏效。修改使用SetWindowPos函数:

if(hWnd!=NULL)
{
::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,400,400,SWP_NOMOVE||SWP_NOSIZE);
}


这样直接把窗口移到左上角去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: