精华内容
下载资源
问答
  • 主要介绍了WindowsForm移动一个没有标题栏的窗口的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 启动定时器检测记事本位置大小和是否关闭 self.tmpHwnd = None self.checkTimer = QTimer(self, timeout=self.checkWindow) ... self.hwnd = win32gui.FindWindow('WTWindow', '窗口名字') if win32gui.Get

    启动定时器检测记事本的位置大小和是否关闭

        self.tmpHwnd = None
        self.checkTimer = QTimer(self, timeout=self.checkWindow)
        self.checkTimer.start(10)  # 10毫秒比较流畅
    
    def checkWindow(self):
        # 查找
        self.hwnd = win32gui.FindWindow('WTWindow', '窗口名字')
        if win32gui.GetForegroundWindow() == self.hwnd:
    
            if Demo.isVisible() == False:
                Demo.setVisible(True)
        else:
            print(win32gui.GetForegroundWindow())
            if Demo.isVisible() == True:
                Demo.setVisible(False)
    
    
        if self.tmpHwnd and not self.hwnd:
            # 表示父窗口被关闭了
            self.checkTimer.stop()
            self.close()  # 关闭自己
            return
    
        if not self.hwnd:
            return
        self.tmpHwnd = self.hwnd
        # 获取位置
        rect = win32gui.GetWindowRect(self.hwnd)
        self.move(rect[0]+300, rect[1]+20)
    
    展开全文
  • windows移动中心无法打开怎么办Win7系统的windows移动中心打不开该如何解决下面就给大家分享Win7系统打不开windows移动中心解决方法 解决方法 1点击开始运行打开运行窗口然后输入gpedit.msc回车确认如下图所示进入...
  • 在窗口程序的开发中,我们经常会需要当用户鼠标点击窗口的...应该有很多方法可以实现,这里介绍两种方法:一种方法就是自己编程实现窗口的位置随鼠标改变;另一种就是直接利用Windows的API。设计一个窗体时,把以下...
    在窗口程序的开发中,我们经常会需要当用户鼠标点击窗口的任何地方时,能够让窗口随鼠标一起移动。特别是当你的WinForms窗口没有窗口栏(Form.FormBorderStyle = None),用户无法通过点击窗口栏移动窗口时,这种实现就很必要了。
    应该有很多方法可以实现,这里介绍两种方法:一种方法就是自己编程实现窗口的位置随鼠标改变;另一种就是直接利用Windows的API。

    设计一个窗体时,把以下代码加入到窗口中,就可以实现这个功能:

     1 private bool IsMouseDownInForm = false;
     2 private Point p;
     3 private void Form1_MouseDown(object sender, MouseEventArgs e)
     4 {
     5   IsMouseDownInForm = true;
     6   p = e.Location;
     7 }
     8 private void Form1_MouseUp(object sender, MouseEventArgs e)
     9 {
    10   IsMouseDownInForm = false;
    11 }
    12 private void Form1_MouseMove(object sender, MouseEventArgs e)
    13 {
    14   if (IsMouseDownInForm)
    15   {
    16     Left += e.Location.X - p.X;
    17     Top += e.Location.Y - p.Y;
    18   }
    19 }

    或者
     1 private Point mouse_offset;
     2 private void Form1_MouseDown(object sender, MouseEventArgs e)
     3 {
     4   mouse_offset = new Point(-e.X, -e.Y); 
     5 }
     6 
     7 private void Form1_MouseMove(object sender, MouseEventArgs e)
     8 {
     9   if (e.Button == MouseButtons.Left)
    10   {
    11     Point mousePos = Control.MousePosition;
    12     mousePos.Offset(mouse_offset.X, mouse_offset.Y);
    13     Location = mousePos;
    14   }
    15 }

    当然,也可以设计一个窗口基类,override Form的OnMouseMove、OnMouseUp、OnMouseDown方法,实现这个小功能。

    第二种方法是利用Windows的API,熟悉Windows API编程的人应该很容易就理解了。
    首先,利用平台调用,引入User32.dll中以下两个函数的调用:
     1 using System.Runtime.InteropServices;
     2 public const int WM_NCLBUTTONDOWN = 0xa1;
     3 public const int HT_CAPTION = 0x2;
     4 [DllImportAttribute("user32.dll")]
     5 public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
     6 [DllImportAttribute("user32.dll")]
     7 public static extern bool ReleaseCapture();
     8 然后,你只需要在窗口的MouseDown事件处理中加入以下代码就可以了:
     9 private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    10 
    11   if (e.Button == MouseButtons.Left)
    12   {
    13     ReleaseCapture();
    14     SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    15   }
    16 


    转载于:https://www.cnblogs.com/uhome/archive/2011/06/02/2067668.html

    展开全文
  • 最近有位win7电脑用户觉得windows移动中心这个快速管理通道功能很少使用到,想要把这... 关闭windows移动中心操作方法: 1、按住键盘“Win+R”组合快捷键,系统将会打开“运行”命令对话窗口;如图所示: 2、在...

      最近有位win7电脑用户觉得windows移动中心这个快速管理通道功能很少使用到,想要把这个关闭掉,不过却又不知道应该怎么操作,这让用户非常苦恼,那么win7系统如何关闭windows移动中心呢?今天为大家带来win7系统关闭windows移动中的操作步骤。

      关闭windows移动中心操作方法:

      1、按住键盘的“Win+R”组合快捷键,系统将会打开“运行”命令对话窗口;如图所示:

    38083fd6890bdd34b9ddea96963b337b.png

      2、在打开的运行命令对话框中输入“gpedit.msc”命令,然后再点击“确定”;如图所示:

    a9745aaec7c420b67acac805be6bef7f.png

      3、点击确定按钮后,这个时候会打开“本地组策略编辑器”对话窗口;如图所示:

    cc16694345e87fa820ebcad3fa598bf1.png

      4、在本地组策略编辑器窗口的左侧小窗口中,依次展开“计算机配置--》管理模版--》Windows组件”选项;如图所示:

    f90c2a4cf25da66497cf126f4540c895.png

      5、在“Windows组件”选项右侧窗口,找到“Windows 移动中心”选项选中并双击鼠标左键将其打开;如图所示:

    afcab47f24b218552e6888a65b6bbe94.png

      6、进入“Windows 移动中心”选中其右侧窗格中的“关闭Windows移动中心”,再点击“策略设置”选项命令;如图所示:

    45cc1edef3debb96a7420a7391f16533.png

      7、在打开的“关闭Windows移动中心”对话窗口中,将其设置更改为“已启用”选项,然后在点击“应用--》确定”按钮退出即可。如图所示:

    c016ff26a9e1e80e313f39e3c790fd75.png

      关于win7系统关闭windows移动中心的操作步骤就为小伙伴们详细介绍到这边了,如果用户们使用电脑的时候想要关闭windows移动中心,可以参考以上方法步骤进行操作哦,希望本篇教程能够帮到大家,更多精彩教程请关注 IT百科 。

    展开全文
  • 移动标准窗口是通过用鼠标单击窗口标题条来实现,但对于没有标题条窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_...
    移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。

    方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,使Windows误认为鼠标处于标题条上。

    下例是使用该方法的实际代码:
    UINT CEllipseWndDlg::OnNcHitTest(CPoint point)
    {
        // 取得鼠标所在的窗口区域
        UINT nHitTest = CDialog::OnNcHitTest(point);

        // 如果鼠标在窗口客户区,则返回标题条代号给Windows
        // 使Windows按鼠标在标题条上类进行处理,即可单击移动窗口

        return (nHitTest==HTCLIENT) ? HTCAPTION : nHitTest;
    }

    方法二:当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,即在处理WM_LBUTTONDOWN消息的处理函数OnLButtonDown中发送一个wParam参数为HTCAPTION,lParam为当前坐标的WM_NCLBUTTONDOWN消息

    下面是使用该方法的实际代码:
    void CEllipseWndDlg::OnLButtonDown(UINT nFlags, CPoint point)
    {
        // 调用父类处理函数完成基本操作
        CDialog::OnLButtonDown(nFlags, point);

        // 发送WM_NCLBUTTONDOWN消息
        // 使Windows认为鼠标在标题条上
        PostMessage(WM_NCLBUTTONDOWN,
        HTCAPTION,
        MAKELPARAM(point.x, point.y));  //或SendMessage(WM_SYSCOMMAND,0xF012,0);   //0xF012 = SC_MOVE | HTCAPTION

    }


    首先,看看在正常情况下系统是怎样来移动程序窗口的。当使用者在程序窗口标题栏区域(非工作区)内,按下鼠标左键时将会发生下列事情:

    ◆ 系统向该窗口过程函数发送WM_NCLBUTTONDOWN消息。

    ◆ WM_NCLBUTTONDOWN消息最终将传送到窗口过程函数中的DefWindowProc()函数中去。

    ◆ DefWindowProc()函数将根据鼠标左键按下并移动,以及HTCAPTION标识所表示鼠标按下时的位置诸多信息,来执行该消息的缺省动作即窗口随同鼠标光标一起移动的操作。

    下面作为练习来测试一下,首先在窗口回调函数(即窗口过程函数)中设置下列语句:

     

    caseWM_NCLBUTTONDOWN

         return 0;

     

    然后,同样是在窗口标题栏内按住鼠标左键并移动鼠标,但此时窗口却并不随同鼠标一起移动了,这是怎么回事?这是因为上述语句中设有“return 0”语句的缘故。该语句使得WM_NCLBUTTONDOWN消息未能传递到DefWindowProc()函数,就在窗口过程函数中提前返回了,当然移动窗口的操作就无从进行了。这也从反面印证了一个事实,那就是,最后完成移动窗口的操作将是由DefWindowProc()函数来完成的。

    通过上面的分析可以勾划出这样一个操作过程:即用户在窗口标题栏内按下鼠标左键→ 系统发送WM_NCLBUTTONDOWN消息 → DefWindowProc()函数接收消息 → 用户移动鼠标 → DefWindowProc()函数执行窗口随同鼠标一起移动的操作。

    由此得出一个结论,那就是要想实现移动窗口的操作,必须具备两个条件:一是要按下鼠标左键并移动(DefWindowProc()函数将检测这个条件);二是在按下鼠标左键时能发送WM_NCLBUTTONDOWN消息并返回HTCAPTION标识。

    下面就根据以上的分析,在没有窗口标题栏的情况下,采取骗取DefWindowProc()函数的方式,来实现对无标题栏窗口实体的移动操作。

     

    1、主动发送WM_NCLBUTTONDOWN消息

    在窗口没有标题栏的情况下,在窗口实体上按下鼠标左键时,系统是不会发送WM_NCLBUTTONDOWN消息的,这是因为鼠标光标是在窗口的工作区内被按下的,此时系统发送的是WM_LBUTTONDOWN消息。

    但通过上述的分析,可以知道DefWindowProc()函数并不关心WM_NCLBUTTONDOWN消息是由谁发出的,而只是关心是否有该消息发出。这样只要我们在按下鼠标左键的事件中,主动将WM_NCLBUTTONDOWN消息发出,岂不就可同时满足这两个条件吗!下面的代码就是根据这个思路来设计的。

     caseWM_LBUTTONDOWN:

                     SendMessage(hWnd,WM_NCLBUTTONDOWN,HTCAPTION,0);

                     break;

     

    消息发送时,通过HTCAPTION参数给DefWindowProc()函数带去一个信息,告诉它鼠标左键是在窗口非工作区内的标题栏处按下的。当然这是一个假情报,但DefWindowProc()函数会信以为真并根据这个信息来执行相应的操作。

     

    2、主动发送WM_SYSCOMMAND消息

     

    caseWM_LBUTTONDOWN:

                     SendMessage(hWnd,WM_SYSCOMMAND,SC_DRAGMOVE,0);

                     break;

     

    能使用WM_SYSCOMMAND消息来移动窗口,得益于一个新近扩展的SC_DRAGMOVE风格标志,该标志从字面上就能看出是"拖曳移动"的意思。该标志在低版本的编译器(VC 6.0中就没有)中是找不到的,所以在引用该标志时应预先声明:

     

    #define        SC_DRAGMOVE  0xF012

     

    也可以直接使用其常量值:

     

    SendMessage(hWnd,WM_SYSCOMMAND,0xF012,0);

     

    上述无标题栏窗口移动窗体的机理与窗口有标题栏时是相似的,相同处最后都是由DefWindowProc()函数来完成实际的操作;不同处是发送消息的方式不同,一个是由系统隐含发送;另一个则是由程序公开发送。

    采取上述两种方法来移动窗口,同有标题栏移动窗口的视觉效果是一样的,那就是在移动时,先移动一个指示框(一个虚线框),等确定好窗体移动后的新位置后,当松开鼠标左键时窗口的实体才被正真移动到虚线框所指向的位置处。那么,能否直接移动窗口实体而不出现虚线框呢?答案是肯定的。

    实际上,操作系统准备了两种移动窗口的方式,一种是有虚线框,另一种则是没有虚线框,只是Windows系统默认的是有虚线框。不过,如果我们在上述示例代码中再添加下列语句:

     

    SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,0);

     

    即:

     

    caseWM_LBUTTONDOWN:

          SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,true,NULL,0);

                     SendMessage(hWnd,WM_NCLBUTTONDOWN,HTCAPTION,0);

                     break;

     

    这样在移动窗口时,虚线指示框将不会出现。注意,上述语句的位置顺序不能错,否则,在移动时虚线框还会出现。

    不过,系统默认按有虚线指示框的方式来移动窗口是通过权衡利弊的。这是因为有虚线框方式移动窗口,在开始时并未正真地移动窗口,而是用一个线框来指定窗口将要到达的位置,然后一次性的将窗口移动到指定的位置(在指定的位置重新绘制)处。也就是说,在移动窗口的过程中,窗口实体只需要重绘一次即可。如果不用虚线框,而是直接移动窗口实体的话,在窗口的移动过程中,将会形成N次绘制窗口,增加系统处理图形的负担,而使窗口的绘制质量严重下降,造成不好的视觉效果。

    为此,在编程实践中可以这样来安排:对异形窗口为了体现异形视觉效果,可以使用无虚线框的方式来移动窗口;而对于一般矩形窗口就可按有虚线框的方式来移动窗口,以求确保窗口的重绘质量。

    诚然,上面设置的代码可以使异形窗口无虚线框方式移动,但由于SystemParametersInfo()函数是系统级的,对它的调用将会影响电脑桌面上所有程序窗口都会按无虚线框方式移动,如果这样的话。必将会使桌面整体的视觉效果大打折扣。如果不想影响其它窗口的移动效果,而只是要求在移动本异形窗口时不出现虚线框的话,则可在窗口过程函数中再增添下列代码即可:

     

          case WM_MOUSEMOVE:

                     SystemParametersInfo(SPI_SETDRAGFULLWINDOWS,false ,NULL,0);

                     break;

     

    3、自编代码

    前两种方法都有缺陷,会改变消息流,使OnLButtonDown,OnLButtonUp等不响应

    自编代码同样可以实现无标题栏窗口的移动操作,而且更加灵活多样。例如,操作可以由鼠标左键或鼠标右键来完成。下面是通过鼠标右键来完成窗口移动的实际代码,在程序窗口的过程函数中添加下列代码语句:

     

    static POINT pt, pe;

    static RECT rt, re;

     

    case WM_RBUTTONDOWN:

        SetCapture(hWnd);                         // 设置鼠标捕获(防止光标跑出窗口失去鼠标热点)

        GetCursorPos(&pt);                         // 获取鼠标光标指针当前位置

        GetWindowRect(hWnd,&rt);   // 获取窗口位置与大小

        re.right=rt.right-rt.left;               // 保存窗口宽度

        re.bottom=rt.bottom-rt.top; // 保存窗口高度

        break;

     

    case WM_RBUTTONUP:

        ReleaseCapture();                           // 释放鼠标捕获,恢复正常状态

        break;

     

    case WM_MOUSEMOVE:

        GetCursorPos(&pe);                              // 获取光标指针的新位置

        if(wParam==MK_RBUTTON)               // 当鼠标右键按下

        {

            re.left=rt.left+(pe.x - pt.x);    // 窗口新的水平位置

            re.top =rt.top+(pe.y - pt.y); // 窗口新的垂直位置

            MoveWindow(hWnd,re.left,re.top,re.right,re.bottom,true);// 移动窗口

        }

        break;


    或:

    OnLButtonDown() 中:

    SetCapture();
    CRect rW;
    GetWindowRect(rW);
    CPoint ptW = point;
    ClientToScreen(&ptW);
    m_ptCursorOffset.x = ptW.x - rW.left;

    OnMouseMove()中:

    if ((nFlags & MK_LBUTTON) && this == GetCapture())
    {
    CPoint ptW = point;
    ClientToScreen(&ptW);
    ptW.x -= m_ptCursorOffset.x;
    ptW.y -= m_ptCursorOffset.y;
    ::SetWindowPos(m_hWnd, 0,ptW.x,ptW.y,0,0,SWP_NOSIZE);  
    }
    m_ptCursorOffset.y = ptW.y - rW.top;

    OnLButtonUp()中:

    ReleaseCapture();
    展开全文
  • windows窗口移动到窗外解决办法

    千次阅读 2019-01-01 11:02:21
    一般解决办法是把文本,应用项目大小调小一点, 如果调整了还没发现所需要应用窗口, 可以按照下面终极方法 1. 首先按alt+tab键,确保该窗口处于激活位置。   2. 然后再按alt+space键,激活控制菜单如图所示...
  • FormBorderStyle设为None,移动Winform窗口的两种方法 第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左鍵按下時的Message标识﹔其次﹐在Form1_MouseDown方法﹐讓操作系統誤以為是按下标题栏。 ...
  • 通常我们在实现一个自定义Qt窗口的拖动时,我们都要记录鼠标的按下位置和鼠标释放位置,然后通过move,进行移动。这样可以实现,但是比较繁琐,我在网上找到这样一个适用于windows平台的简单方法。 引入windows库 #...
  • FormBorderStyle设为None,移动Winform窗口的两种方法 转载于:http://www.cnblogs.com/techmango/archive/2012/03/31/2427523.html 第一种,利用windows的消息机制来实现: 首先﹐.定义鼠標左鍵按下時...
  • 用鼠标单击窗口标题条以外区域移动窗口移动标准窗口是通过用鼠标单击窗口标题条来实现,但对于没有标题条窗口, 就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口...
  • 拖动无标题窗口的方法

    千次阅读 2015-04-15 12:02:59
    这个问题的本质便是怎么在窗口的客户区上,拖动鼠标,并且移动窗口。 通常状态下,一个窗口只有在标题栏的区域,才会响应鼠标拖动的消息。而在窗口的客户区并不会响应。 这样便有了一个方法,就是我们可以欺骗...
  • 为了增加写作空间,我会把任务栏隐藏起来,有时候又不得不需要调出任务栏,有没有更加高效的方法?整理&排版 | idea君,预计阅读时间|3分钟软件作者:ChanpleCai,如有侵权请联系删除封面:...
  • 任务提示栏找到该应用右键移动,使用方向键(上下左右)移动,或者点一下方向键然后拖动鼠标,即可移动程序,如果右键移动选项不可用可能是程序最小化导致,点一下恢复成普通窗口即可。 右键菜单不可见移动,选择该.
  • 1、用鼠标单击窗口标题条以外区域移动窗口  移动标准窗口是通过用鼠标单击窗口标题条来实现,但对于没有标题条窗口,就需要 用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。 方法一...
  • 移动标准窗口是通过用鼠标单击窗口标题条来实现,但对于没有标题条窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。有两种方法可以达到这一目标。方法一:当窗口确定鼠标位置 时,Windows向窗口发送WM_...
  • 解决方法:使用窗口移动精灵或AltDrag这两款窗口移动工具,摆脱只能拖动标题栏移动窗口的限制,任意移动超出屏幕的窗口,将窗口或对话框移动到顶部后,仍可继续向上拖动,使窗口顶部移动到屏幕之外,底部就会显示...
  • 移动标准窗口是通过用鼠标单击窗口标题栏来实现,但对于没有标题栏窗口,就需要用鼠标单击窗口标题栏以外区域来移动窗口。有两种方法可以达到这一目标。 方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_...
  • 网上有很多介绍pyqt自定义标题栏的方法,几乎都是通过处理 mousePressEvent 、 mouseReleaseEvent 以及 mouseMoveEvent 来实现的,在移动的过程中是可以看到窗口的内容的。在没有给窗口打开Windows的亚克力效果时...
  • 一)方法一:先用alt+tab激活当前窗口 > alt+space会调出窗口控制菜单 > 此时按一下m键(表示...二)方法二:用windows自带快捷键,在选中窗口后,win+左右上下方向键,可以控制窗口左贴,右贴,最大化和最小化 ...
  • 命令行环境中获取管理员权限第一种方法 (最爽,但是被运行命令会被当成新进程运行,运行完成后就自动关闭了.)把以下代码复制到记事本中保存为sudo.vbs 然后移动到PATH任意目录中,如windows system32 等.或自定义目录...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 561
精华内容 224
关键字:

windows移动窗口的方法