将窗口还原到屏幕上的特定位置 C#(控制台应用程序)

restore window to specific locaiton on screen c# (console application)

提问人:Arcadio R 提问时间:12/14/2016 更新时间:12/14/2016 访问量:282

问:

我想知道如何将应用程序窗口恢复到屏幕上的特定位置。

我确实设法编写了一些代码,但不知何故,我确实有一种感觉,必须有一种更简单、更有效的方法来编程......因为我当前的版本是先恢复窗口,然后将其移动到所需的位置。我想恢复它,而不是被迫在事后移动它。

我的代码:

public void Send()
    {
        if (Process.GetProcessesByName("report").Any())
        {
            Process proc = Process.GetProcessesByName("report").First();

            if (proc != null)
            {
                IntPtr pointer = proc.MainWindowHandle;
                SetForegroundWindow(pointer);
                SendMessage(pointer, WM_SYSCOMMAND, SC_RESTORE, 0);
                Program.MoveWindow(pointer, 0, 0, 100, 100, true);

            }
        }

        // do something
  }

当然,紧随其后的是:

        [DllImport("user32.dll")]
    static extern int SetForegroundWindow(IntPtr hWnd);
    [DllImport("user32.dll")]
    internal static extern bool SendMessage(IntPtr hWnd, Int32 msg, Int32 wParam, Int32 lParam);
    static Int32 WM_SYSCOMMAND = 0x0112;
    static Int32 SC_RESTORE = 0xF120;

    [DllImport("user32.dll", SetLastError = true)]
    internal static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

我将不胜感激进一步的解决方案和解释。

C# 还原 MoveWindow

评论

0赞 Visual Vincent 12/15/2016
I do have a feeling that there must be and easier and more efficient way to do it- 不是真的,不是。
0赞 Visual Vincent 12/15/2016
此答案确认了您当前的代码。
0赞 Arcadio R 12/15/2016
@VisualVincent 谢谢你的回答。但是,有没有办法将特定的 X 和 Y 坐标设置为启动方法?假设启动应用程序并在左下角或右上角 corrner 中运行它?
0赞 Cody Gray - on strike 12/15/2016
这是使用 Windows API 移动窗口的标准方法。嗯,有点。应将 and 调用替换为对 SetWindowPos 的单个调用。x、y、width 和 height 参数与 相同,但该参数允许您还原窗口(或执行所需的任何其他操作)。在这里使用是骇人听闻的,而且是错误的。SendMessageMoveWindowMoveWindowuFlagsSendMessage
0赞 Cody Gray - on strike 12/15/2016
至于在窗口启动时在某个位置显示窗口,这取决于显示窗口的过程。它做出了这个决定。你控制这个过程吗?你能修改它的代码吗?

答: 暂无答案