Это возможно. Добавьте класс в ваш проект и вставьте этот код:
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
static class Utils {
public static void MoveHelpWindow(Rectangle rc) {
EnumThreadWndProc callback = (hWnd, lp) => {
// Check if this is the help window
StringBuilder sb = new StringBuilder(260);
GetClassName(hWnd, sb, sb.Capacity);
if (sb.ToString() != "HH Parent") return true;
MoveWindow(hWnd, rc.Left, rc.Top, rc.Width, rc.Height, false);
return false;
};
foreach (ProcessThread pth in Process.GetCurrentProcess().Threads) {
EnumThreadWindows(pth.Id, callback, IntPtr.Zero);
}
}
// P/Invoke declarations
private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
[DllImport("user32.dll")]
private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
[DllImport("user32.dll")]
private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
[DllImport("user32.dll")]
private static extern bool MoveWindow(IntPtr hWnd, int x, int y, int w, int h, bool repaint);
}
Вы используете это так, важен вызов BeginInvoke:
Help.ShowHelp(this, @"file://c:\windows\help\bcmwlhlp.chm");
this.BeginInvoke(new MethodInvoker(() => Utils.MoveHelpWindow(new Rectangle(0, 0, 300, 200))));