Да, это возможно с помощью Windows API.
Этот пост содержит информацию о том, как получить все дескрипторы окон из активных процессов: http://www.c -sharpcorner.com / Forums / ShowMessages.aspx? ThreadID = 35545
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
Process[] procs = Process.GetProcesses();
IntPtr hWnd;
foreach(Process proc in procs)
{
if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
{
Console.WriteLine("{0} : {1}", proc.ProcessName, hWnd);
}
}
}
}
И затем вы можете переместить окно с помощью Windows API: http://www.devasp.net/net/articles/display/689.html
[DllImport("User32.dll", ExactSpelling = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int cx, int cy, bool repaint);
...
MoveWindow((IntPtr)handle, (trackBar1.Value*80), 20 , (trackBar1.Value*80)-800, 120, true);
Вот параметры для функции MoveWindow:
Для перемещения окна мы используем
функция MoveWindow, которая принимает
оконная ручка, координаты
для верхнего угла, а также
желаемая ширина и высота
окно, основанное на экране
координаты. Функция MoveWindow
определяется как:
MoveWindow (HWND hWnd, int nX, int
ny, int nWidth, int nHeight, BOOL
bRepaint);
Флаг bRepaint
определяет, будет ли зона клиента
должен быть признан недействительным, вызывая
WM_PAINT сообщение для отправки, позволяющее
клиентская зона должна быть перекрашена. Как
кроме того, координаты экрана могут быть
полученный с помощью вызова, аналогичного
GetClientRect (GetDesktopWindow (),
& rcDesktop), причем rcDesktop является
переменная типа RECT, переданная
ссылка.
(http://windows -programming.suite101.com / article.cfm / client_area_size_with_movewindow )