0

使用下一个答案,我试图以编程方式重新定位 citrix 窗口,但窗口不会移动。

我假设保存 Citrix 窗口的进程名称是Process.GetProcesses()我启动 Citrix 后添加的下一个进程之一:Receiver、wfica32、pnamain、concentr、wfcrun32。

任何帮助为什么窗口不移动?

IntPtr hWnd = IntPtr.Zero;
var p1 = Process.GetProcesses().Where(p => p.Id != 0 && p.ProcessName == _processToRepositionWindowName).FirstOrDefault();
if (p1 != null && p1.MainWindowHandle != IntPtr.Zero)
{
     hWnd = p1.MainWindowHandle;
     //tried both options
     //hWnd = p1.Handle; 
}
else
{
      hWnd = FindWindow(_processToRepositionWindowName, null);
      if(hWnd == IntPtr.Zero)
      {
           hWnd = FindWindow(null, _processToRepositionWindowName);
      }
}

if (hWnd != IntPtr.Zero)
{
     var i = SetWindowPos(hWnd, IntPtr.Zero, windowXLocation, windowYLocation, 0, 0, SWP_NOSIZE | SWP_NOZORDER | 0x0040);
}
4

1 回答 1

0

我有几次同样的问题(不仅是 Citrix Windows ......)。

您需要在调用 SetWindowPos 之前发送 EnterSizeMove 消息。理想情况下,您需要使用 ExitSizeMove 消息关闭(尽管我已经跳过这最后一步几次)。

我用 Java 编码,但任何语言的问题都是一样的:

User32.instance.SendMessageA(hwnd, User32.WM_ENTERSIZEMOVE, 0, 0);
User32.instance.SetWindowPos(hwnd, hwndTopMost, x, y, 0, 0, flags);
User32.instance.SendMessageA(hwnd, User32.WM_EXITSIZEMOVE, 0, 0);

我从一个 AutoHotKey 论坛来到这个解决方案。

于 2019-04-15T21:20:43.367 回答