2013-06-19 2 views
2

Я вообще не разработчик окон (я делаю материал AS3), но я написал это консольное приложение C# в visual C# 2010, чтобы проверить что-то. Приложение должно открыть открытое окно и изменить его размер и изменить.user32 MoveWindow не работает в C#, Windows 7, консольное приложение

Я открываю пустое окно Chrome (под названием «Без названия»), но функции, управляющие окном, не работают (даже если отладчик останавливается на них - это означает, что приложение находило нужное окно).

любые идеи почему?

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); 
       } 
      } 


     } 
    } 
} 

ответ

6
MoveWindow(proc.Handle, ...); 

proc.Handle не то, что вы думаете. Это процесс , а не интересующий вас Process.MainWindowHandle.

Вы задаете этот вопрос, потому что вы не проверяете наличие ошибок. Поэтому вы не знаете, почему это не работает. Эти функции возвращают bool, false означает, что вы поняли это неправильно. Бросьте исключение Win32Exception, чтобы он не был полностью не поддающимся регулированию:

if (!MoveWindow(proc.MainWindowHandle, ...)) { 
    throw new Win32Exception(); 
} 
+0

thanx много Ганс! – Saariko