在C#程序中对MessageBox进行定位的方法

在 C# 中没有提供方法用来对 MessageBox 进行定位,但是通过 C++ 你可以查找窗口并移动它们,本文讲述如何在 C# 中对 MessageBox 进行定位。

首先需在代码上引入所需名字空间:

using System.Runtime.InteropServices;
using System.Threading;

在你的 Form 类里添加如下 DllImport 属性:

[DllImport("user32.dll")]
static extern IntPtr FindWindow(IntPtr classname, string title); // extern method: FindWindow

[DllImport("user32.dll")]
static extern void MoveWindow(IntPtr hwnd, int X, int Y, int nWidth, int nHeight, bool rePaint); // extern method: MoveWindow

[DllImport("user32.dll")]
static extern bool GetWindowRect(IntPtr hwnd, out Rectangle rect); // extern method: GetWindowRect

接下来就可以查找窗口并移动它:

void FindAndMoveMsgBox(int x, int y, bool repaint, string title)
{
  Thread thr = new Thread(() => // create a new thread
  {
    IntPtr msgBox = IntPtr.Zero;
    // while there's no MessageBox, FindWindow returns IntPtr.Zero
    while ((msgBox = FindWindow(IntPtr.Zero, title)) == IntPtr.Zero) ;
    // after the while loop, msgBox is the handle of your MessageBox
    Rectangle r = new Rectangle();
    GetWindowRect(msgBox, out r); // Gets the rectangle of the message box
    MoveWindow(msgBox /* handle of the message box */, x , y,
      r.Width - r.X /* width of originally message box */,
      r.Height - r.Y /* height of originally message box */,
      repaint /* if true, the message box repaints */);
  });
  thr.Start(); /: starts the thread
}

你要在 MessageBox.Show 之前调用这个方法,并确保 caption 参数不能为空,因为 title 参数必须等于 caption 参数。

使用方法:


FindAndMoveMsgBox(0,0,true,"Title");
MessageBox.Show("Message","Title");
(0)

相关推荐

  • C#实现winform自动关闭MessageBox对话框的方法

    本文实例讲述了C#实现winform自动关闭MessageBox对话框的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.Inte

  • C#实现延时并自动关闭MessageBox的方法

    我们在C#编程中常见的信息提示框(MessageBox)是微软NET自带的一个用于弹出警告.错误或者讯息一类的"模式"对话框.此类对话框一旦开启,则后台窗体无法再被激活(除非当前的MessageBox被点击或者关闭取消).那么如何使用程序模拟鼠标点击这个messageBox(关闭这个MessageBox)令其延时并自动关闭呢?答案是你在弹出这个messageBox之前先启用一个定时器,定时器内部不断向窗体发送Enter按钮用于模拟点击MsgBox的内容,同时主程序中弹出模式消息框. 具

  • C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案

    本文解析了C# KeyUp事件中MessageBox的回车(Enter)键出现回调问题的解决办法.具体问题如下: 在一个窗体上有一个名为txtTest的Textbox控件,如果在此控件的KeyUp事件中有按回车键 弹出messagebox消息框,那么在弹出的messagebox中如果按回车键去执行messagebox上的按钮,再回车键还会在KeyUp事件中继续执行.一直按回车键的话将循环进行. 代码如下所示: private void txtTest_KeyUp(object sender, K

  • 在C#程序中对MessageBox进行定位的方法

    在 C# 中没有提供方法用来对 MessageBox 进行定位,但是通过 C++ 你可以查找窗口并移动它们,本文讲述如何在 C# 中对 MessageBox 进行定位. 首先需在代码上引入所需名字空间: using System.Runtime.InteropServices; using System.Threading; 在你的 Form 类里添加如下 DllImport 属性: [DllImport("user32.dll")] static extern IntPtr Find

  • 如何在程序中判断VS的版本(实现方法详解)

    代码如下所示: #include<iostream> using namespace std; int main() { cout << _MSC_VER << endl; return 0; } 在VC6.0中结果为:1200 在VC10.0(VS2010)中结果为:1600 _MSC_VER实际就是 Microsoft visual c++ version(是微软的预定义宏). 具体对应如下: MS VC++ 14.0 _MSC_VER = 1900(VS2015)

  • 在.net应用程序中运行其它EXE文件的方法

    本文实例讲述了在.net应用程序中运行其它EXE文件的方法.分享给大家供大家参考.具体实现方法如下: Process proc = new Process(); proc.StartInfo.FileName = @"D:\Program Files\Foxmail\Foxmail.exe"; //可以用绝对路径 proc.StartInfo.Arguments = ""; proc.Start(); 希望本文所述对大家的C#程序设计有所帮助.

  • 微信小程序中进行地图导航功能的实现方法

    前段时间一直都在做小程序做了两个月了,其中对于小程序还是有很不理解的地方看着一些大企业的小程序自己模仿其实还是有一些难度的,我觉得学习小程序看一遍文档是不够的我们要做的是看别人的例子对着文档一一对照! 好这次我们来开始我们的开发,其实微信小程序里面是不能导航的,原因是小程序的代码最多只能有1M,他的运行内存只能有10M,一个区域地图下载下来就不止1M了所以在应用内我们无法做到导航的,但是应用外呢! 我问过很多做安卓和IOS的同僚一般如果导航这个功能不是很重要的话就会放到应用外来做这个功能,但是高

  • Java程序中实现调用Python脚本的方法详解

    本文实例讲述了Java程序中实现调用Python脚本的方法.分享给大家供大家参考,具体如下: 在程序开发中,有时候需要Java程序中调用相关Python脚本,以下内容记录了先关步骤和可能出现问题的解决办法. 1.在Eclipse中新建Maven工程: 2.pom.xml文件中添加如下依赖包之后update maven工程: <dependency> <groupId>org.python</groupId> <artifactId>jython</ar

  • 详解在Java程序中运用Redis缓存对象的方法

    这段时间一直有人问如何在Redis中缓存Java中的List 集合数据,其实很简单,常用的方式有两种: 1. 利用序列化,把对象序列化成二进制格式,Redis 提供了 相关API方法存储二进制,取数据时再反序列化回来,转换成对象. 2. 利用 Json与java对象之间可以相互转换的方式进行存值和取值. 正面针对这两种方法,特意写了一个工具类,来实现数据的存取功能. 1. 首页在Spring框架中配置 JedisPool 连接池对象,此对象可以创建 Redis的连接 Jedis对象.当然,必须导

  • 微信小程序中显示html格式内容的方法

    前言 最近项目上遇到在微信小程序里需要显示新闻内容,新闻内容是通过接口读取的服务器中的富文本内容,是html格式的,小程序默认是不支持html格式的内容显示的,那我们需要显示html内容的时候,就可以通过wxParse来实现. 准备工作: 首先我们下载wxParse github地址:https://github.com/icindy/wxParse 本地下载:http://xiazai.jb51.net/201704/yuanma/wxParse-master(jb51.net).rar wx

  • c#在程序中定义和使用自定义事件方法总结

    C#在程序中定义和使用自定义事件可以分为以下几个步骤: 步骤1:在类中定义事件 using System; public class TestClass { //.... public event EventHandler TestEvent } 步骤2:定义事件参数 注意:事件参数类TestEventArgs继承自System.EventArgs using System; public class TestEventArgs : EventArgs { public TestEventArg

  • 微信小程序中网络请求缓存的解决方法

    需求 提交小程序审核时,有一个体验测评,产品让我们根据小程序的体验测评报告去优化小程序. 其中有一项是网络请求的优化,给我们出了很大的难题. 文档中是这样解释的:3分钟以内同一个url请求不出现两次回包大于128KB且一模一样的内容 看到这个问题的时候,首先想到的是在响应头上加上cache-control,经过测试发现小程序并不支持网路请求缓存.搜索发现官方明确答复,小程序不支持网络请求缓存:wx.request不支持http缓存 既然官方不支持网络请求缓存,那只能自己想办法解决这个问题了. 先

  • 小程序中设置缓存过期的实现方法

    需求是两张图片在这个时间段内交替显示,当天只弹一次图片. 后端返回的数据格式: { "start": "2019/10/08 00:00:00", "end": "2019/10/30 23:59:59", "ads": [ { "image": "xxxx", "uri": "wechat:zhizhuxy666" }, {

随机推荐