user32 MoveWindow не работает в C#, windows 7, консольном приложении
Я вообще не разработчик windows (я делаю AS3 вещи), но я написал это консольное приложение C# в visual c# 2010, чтобы что-то проверить.
Приложение должно взять открытое окно и изменить его размер и положение.
Я открываю пустое окно Chrome (под названием "Untitled"), но функции, управляющие окном, не работают (хотя отладчик останавливается на них - это означает, что приложение действительно нашло нужное окно).
Есть идеи, почему?
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
[DllImport("user32.dll", SetLastError = true)]
internal static extern bool MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);
[DllImport("user32.dll")]
private static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
static void Main(string[] args)
{
Process[] processlist = Process.GetProcesses();
foreach (Process proc in processlist)
{
if (!String.IsNullOrEmpty(proc.MainWindowTitle) && proc.MainWindowTitle == "Untitled")
{
ShowWindow(proc.Handle, 3);
MoveWindow(proc.Handle, 0, 0, 100, 100, true);
}
}
}
}
}
1 ответ:
MoveWindow(proc.Handle, ...);Прок.Ручка-это не то, что вы думаете. Это дескрипторпроцесса , а не сам процесс.MainWindowHandle, который вас интересует.
Вы задаете этот вопрос, потому что не проверяете ошибки. Так что вы не знаете, почему это не работает. Эти функции возвращают bool, false означает, что вы ошиблись. Бросьте Win32Exception, чтобы это не было полностью недиагностируемым:
if (!MoveWindow(proc.MainWindowHandle, ...)) { throw new Win32Exception(); }
Comments