首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snap WinForm编程

Snap WinForm编程
EN

Stack Overflow用户
提问于 2014-09-17 05:27:48
回答 2查看 342关注 0票数 2

是否可以使用WinForms/C#执行以下操作?

  1. 动态检测正在运行的程序的窗口大小和位置(例如Notepad.exe)?
  2. 将WinForm切换到Notepad.exe中的特定位置?
  3. 最小化和最大化WinForm窗口与其他进程(因此,当记事本是最小化,WinForm窗口也是如此)?

例如,查看(黑色形状将是WinForm窗口):

本质上,我需要为一个程序创建一个工具栏,而工具栏应该在相同的位置“按下”到该程序,而不管窗口的位置或大小如何。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-17 05:43:37

第一找到记事本窗口的手柄

代码语言:javascript
复制
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

只需对第一个参数和标题(“记事本”)传递null?作为第二个参数的窗口。

另一种选择是使用枚举所有窗口并根据标题选择最佳匹配:

代码语言:javascript
复制
using System.Runtime.InteropServices;

public delegate bool CallBackPtr(int hwnd, int lParam);
private CallBackPtr callBackPtr;

public class EnumReport 
{
    [DllImport("user32.dll")]
    private static extern int EnumWindows(CallBackPtr callPtr, int lPar); 

    public static bool Report(int hwnd, int lParam) 
    { 
        Console.WriteLine("Window handle is "+hwnd);
        return true;
    }
}
static void Main()
{

     // note in other situations, it is important to keep 
     // callBackPtr as a member variable so it doesnt GC while you're calling EnumWindows

     callBackPtr = new CallBackPtr(EnumReport.Report);  
    EnumReport.EnumWindows(callBackPtr, 0);
}

然后向其附加一个WndProc:

代码语言:javascript
复制
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.AddHook(new HwndSourceHook(WndProc));

在WndProc中,响应窗口的大小调整和移动。

我不确定是否将工具栏设置为记事本窗口的子窗口;当记事本尝试管理工具栏并排序其z深度时,可能会产生意想不到的效果。

同时,我怀疑这是一件好事;用户将能够键入‘下面’的覆盖,并失去他的光标/文本。

票数 2
EN

Stack Overflow用户

发布于 2014-09-17 05:42:26

  1. 找到记事本的窗口(FindWindow)。
  2. 创建没有边框的窗口。
  3. 将您的窗口设置为记事本窗口(SetParent)的子窗口。

您的窗口将被锚定在记事本窗口的左上角。最小化将自动处理,但当记事本的窗口被调整(或最大化)时,您需要调整窗口的大小。您还可以移动记事本的编辑控件。

可以使用WinForms,但是您需要一些互操作调用。

我必须警告,这不是一个很好的主意。您的控件可能与主机进程窗口中的控件冲突,主机进程可能会以您不喜欢的方式重新排列控件,绘制控件。一般来说,在没有一个好的清洁解决方案的情况下,要准备好与众多的问题作斗争,并且接受当调整大小时可能会出现故障等。

另请参阅:

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

https://stackoverflow.com/questions/25882904

复制
相关文章

相似问题

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