首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c#以编程方式移动Citrix窗口

c#以编程方式移动Citrix窗口
EN

Stack Overflow用户
提问于 2018-05-30 13:47:10
回答 1查看 194关注 0票数 0

在使用下一个answer时,我试图以编程方式重新定位citrix窗口,但不知何故,窗口不能移动。

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

为什么窗口不能移动,有什么帮助吗?

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-16 05:20:43

我已经遇到过几次相同的问题(不仅仅是Citrix窗口...)。

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

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

代码语言:javascript
复制
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论坛来到this solution。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50597143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档