从 C# 获取 Windows 应用程序的位置

2024-01-04

我需要一些帮助来尝试获取记事本窗口的位置。我很确定我需要使用GetWindowRect功能如下,但我不知道如何使用它。我已将以下内容放入 win 表单项目中,但是myRect.X, myRect.Y等里面没有任何东西。我认为他们至少应该有我正在使用的 winform 的 x、y、宽度、高度。但它总是显示 0。老实说,我只是不明白如何使用它。我已经环顾四周大约 5 个小时了。但什么也没学到。

[DllImport("user32.dll")]
     [return: MarshalAs(UnmanagedType.Bool)]
     static extern bool GetWindowRect(HandleRef hWnd, out RECT lpRect);

     [StructLayout(LayoutKind.Sequential)]
     public struct RECT
     {
         public int Left;        // x position of upper-left corner
         public int Top;         // y position of upper-left corner
         public int Right;       // x position of lower-right corner
         public int Bottom;      // y position of lower-right corner
     }

     Rectangle myRect = new Rectangle();

     private void button1_Click(object sender, System.EventArgs e)
     {
         RECT rct;

         if(!GetWindowRect(new HandleRef(this, this.Handle), out rct ))
         {
             MessageBox.Show("ERROR");
             return;
         }
         MessageBox.Show( rct.ToString() );

         myRect.X = rct.Left;
         myRect.Y = rct.Top;
         myRect.Width = rct.Right - rct.Left + 1;
         myRect.Height = rct.Bottom - rct.Top + 1;
     }

我也尝试过下面的代码,但我从中得到的最多的仍然是DrawingBasicShapes.Form1+Rect位于NotepadRect.

然后有真实的GetWindowRect(ptr, ref NotepadRect)。我用了MessageBox.Show(Convert.ToString(NotepadRect));得到里面的东西..另一个也一样,我认为这是错误的。但我不知道如何显示其中的内容。

我原以为这里会有数字或其他东西,但我猜不是。如果这是一个新手问题,或者答案对您来说很清楚,我很抱歉。但我通常不使用 dll 导入。所以我正在慢慢学习如何使用它......

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow(string strClassName, string strWindowName);

[DllImport("user32.dll")]
public static extern bool GetWindowRect(IntPtr hwnd, ref Rect rectangle);

public struct Rect
{
  public int Left { get; set; }
  public int Top { get; set; }
  public int Right { get; set; }
  public int Bottom { get; set; }
}

Process[] processes = Process.GetProcessesByName("notepad");
Process lol = processes[0];
IntPtr ptr = lol.MainWindowHandle;
Rect NotepadRect = new Rect();
GetWindowRect(ptr, ref NotepadRect);

如果您在消息框中放入的只是 Rect 对象本身,那么这正是您将获得的输出。

输出消息框如下:

MessageBox.Show( string.Format("Left: {0}\r\nTop: {1}\r\nRight: {2}\r\nBottom: {3}", NotepadRect.Left, NotepadRect.Top, NotepadRect.Right, NotepadRect.Bottom));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 C# 获取 Windows 应用程序的位置 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 如何使用 OpenXml 将外部图像添加到 Word 文档?

    我正在尝试使用 C 和 Open XML 将图像从 url 插入到文档中 该图像可能会发生变化 因此我不想下载它 我希望它保留为外部参考 我发现了几个像这样的例子 可以让我添加本地图像 http msdn microsoft com en
  • Ember模型间隔重载

    我有一个用户模型 它具有纬度和经度属性 用于在地图上显示当前用户位置 App User DS Model extend firstName DS attr string lastName DS attr string email DS at
  • 使用 Java 发出并发 Web 请求

    有人可以指出我用于发出并行网络请求的片段吗 我需要发出 6 个 Web 请求并连接 HTML 结果 有没有一种快速的方法来完成这个任务 或者我必须采用线程方式 谢谢 Use ExecutorService http download ora
  • 在 HTML5 Canvas 中绘制图像,同时保留图像

    在HTML5 Canvas中 最简单的绘制方式是什么and move图像上的一条线 已经在画布上 保留下面的图像 例如 有一条垂直线跟踪鼠标 X 位置 我当前的画布 document ready function canvas docume
  • 如何在Java中使用变量执行SQL语句

    我有以下 mysql 语句来从正在运行的数据库中删除记录 SET email email protected cdn cgi l email protection SET userID SELECT id FROM USER WHERE e
  • 配置 Warden 以用于 RSpec 控制器规格

    我能够使用 Devise 的sign in在我的控制器规格中登录用户的方法 但现在我要从我的应用程序中删除 Devise 我不太确定如何仅使用 Warden 来获得类似的功能 我应该如何设置spec spec helper rb以及相关的s
  • Android多屏应用

    如何在 Android 应用程序中处理多个屏幕 我已经使用底部的选项卡栏进行了开发 没有任何问题 但是我想要做的是将屏幕上的所有内容替换为我在项目中创建的新 xml 布局文件中的内容 此外 我如何将后端代码绑定到新的布局文件 我确信这个问题
  • 在 .xml 中或以编程方式设置文本大小

    我在 dimens xml 有变量
  • 如何设置变量等于单元格地址?

    我必须找到 B 列中的下一个空单元格 变量 coluna amostras 保存其地址 使用变量 inserir 并使用它来粘贴新的行数据 但是 我不知道如何将地址存储在 inserir 变量中 正如其定义 Excel 返回 运行时错误 9
  • 如何获取MPDF的总页数?

    我正在使用 PHP MPDF 创建 PDF 文件 在页脚 我可以使用打印当前页码 PAGENO 但是如何获取 PDF 文件的总页数呢 这样我就可以在页脚中打印如下内容 Page Current Page of Total number of
  • Control 单击或 Shift 单击多个项目并拖动它们

    我一整天都在浏览这些论坛并尝试了很多插件 即 jquery hotkeys js 和http thechriswalker net select drag http thechriswalker net select drag 这里的示例配
  • Grappa Graphviz dot-可视化问题与疑问

    我正在使用这个点代码进行测试 digraph G edge dir none p1 shape circle style filled label height 0 01 width 0 01 q1 shape circle style f
  • 重新转换 Java Instrumentation Agent 库中的本机方法

    我正在尝试编写一个通过 Attach api 动态加载的 Java 代理库 以重新转换某些方法 出现在某些线程的堆栈跟踪中的方法 以记录方法进入 退出 然后通过自定义导出方法入口 出口信息MBean 到目前为止 只要检测的方法不是本机的 我
  • 如何使用selenium获取带有javascript渲染源代码的html

    我在一个网页中运行查询 然后得到结果 url 如果我右键单击查看html源 我可以看到JS生成的html代码 如果我只是使用urllib python无法获取JS代码 所以我看到了一些使用硒的解决方案 这是我的代码 from seleniu
  • GAE self.request.cookies 返回一个空字典

    我正在尝试覆盖CheckIsAdmin方法存在于ApiCallHandler班级 所以我跟着this https stackoverflow com a 33652077 3297613回答 但我在打印时总是得到空字典self reques
  • Swift 中的自定义类集群

    这是一个比较常见的设计模式 https stackoverflow com a 17015041 743957 https stackoverflow com a 17015041 743957 它允许您从您的返回子类init calls
  • 从特定于语言环境的字符串获取 NSDecimalNumber?

    我有一些特定于区域设置的字符串 例如 0 01 或 0 01 我想将此字符串转换为 NSDecimalNumber 来自到目前为止我在互联网上看到的例子 http developer apple com documentation Coco
  • WP8.1 InvokeScript 错误

    我正在开发 Windows Phone 8 1 应用程序 我对 WebBrowser 类的 InvokeScript 方法有疑问 我的 XAML 中有这个 当我运行这段代码时 myWebBrowser Loaded object sende
  • 从 ServletContext 资源解析 XML 文档 [/WEB-INF/applicationContext.xml];

    我在控制台中遇到一些错误 我将在下面发布 我正在使用 eclipse 并清理了项目 刷新了目标 清理了 tomcat 服务器 因此追逐或任何此类性质的事情都不是问题 控制台错误 SEVERE Context initialization f
  • 从 C# 获取 Windows 应用程序的位置

    我需要一些帮助来尝试获取记事本窗口的位置 我很确定我需要使用GetWindowRect功能如下 但我不知道如何使用它 我已将以下内容放入 win 表单项目中 但是myRect X myRect Y等里面没有任何东西 我认为他们至少应该有我正