原文:C#句柄使用

调用 API 函数 SendMessage 发送 WM_CLOSE 消息。



DllImport("User32.dll",EntryPoint="SendMessage")]

private static extern int SendMessage( int
hWnd,int Msg,int wParam,int lParam);



const int WM_CLOSE = 0x10;

SendMessage(那个程序的窗口句柄, WM_CLOSE, 0, 0);



可以用 IntPtr 代替 int 数据类型

在Visual C# 2005中如何实现窗口任意处移动窗口

首先,要用到一个WimdowsAPI函数,因此必须引入

using System.Runtime.InteropServices;

命名空间;



然后,这里有两种方法,一种使用API, 一种不用,重写WndProc窗口过程的方式不需要API函数。另一个方法需要两个:

SendMessage 像指定窗口过程发送消息

ReleaseCapture 释放鼠标捕获



最后是一些必要的常数声明,这些声明可以在MSDN或者CPP头文件中找到:

private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息

private const int SC_MOVE = 0xF010;//移动信息

private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息

private const int WM_NCHITTEST =
0x84;//鼠标在窗体客户区(除了标题栏和边框以外的部分)时发送的消息

private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息

private const int SC_MAXIMIZE = 0xF030;//最大化信息

private const int SC_MINIMIZE = 0xF020;//最小化信息



Here we go。



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.InteropServices;



namespace WindowsApplicationTestNoBoarderAndMove

{

    public
partial class Form1 : Form

    {

       
public Form1()

       
{

           
InitializeComponent();

       
}



       
[DllImport("user32.dll")]

       
public static extern bool ReleaseCapture();



       
[DllImport("user32.dll")]

       
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int
wParam, int lParam);



       
private const int WM_SYSCOMMAND = 0x0112;//点击窗口左上角那个图标时的系统信息

       
private const int SC_MOVE = 0xF010;//移动信息

       
private const int HTCAPTION = 0x0002;//表示鼠标在窗口标题栏时的系统信息

       
private const int WM_NCHITTEST =
0x84;//鼠标在窗体客户区(除了标题栏和边框以外的部分)时发送的消息

       
private const int HTCLIENT = 0x1;//表示鼠标在窗口客户区的系统消息

       
private const int SC_MAXIMIZE = 0xF030;//最大化信息

       
private const int SC_MINIMIZE = 0xF020;//最小化信息



       
private void closeToolStripMenuItem_Click(object sender, EventArgs
e)

       
{

           
Application.Exit();

       
}



       
//下面的代码我用//注释了一下,这是两种实现方法



       
//private void Form1_MouseDown(object sender, MouseEventArgs
e)

       
//{

       
//   
ReleaseCapture();//首先释放鼠标焦点捕获,这样就不会再发出WM_NCHITTEST消息

       
//   
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION,
0);//然后向当前窗体发送消息,消息是移动+表示鼠标在标题栏上

       
//}





       
//如果用这种重写的方法,就把上面的部分注释掉……

protected override void WndProc(ref Message m)

       
{

           
switch (m.Msg)

           
{

               
case WM_SYSCOMMAND:

                   
if (m.WParam == (IntPtr)SC_MAXIMIZE)

                   
{

                       
m.WParam = (IntPtr)SC_MINIMIZE;

                   
}

                   
break;

               
case WM_NCHITTEST:
//如果鼠标移动或单击

base.WndProc(ref m);//调用基类的窗口过程——WndProc方法处理这个消息

                   
if (m.Result == (IntPtr)HTCLIENT)//如果返回的是HTCLIENT

                   
{

                       
m.Result = (IntPtr)HTCAPTION;//把它改为HTCAPTION

                       
return;//直接返回退出方法

                   
}

                   
break;

           
}

           
base.WndProc(ref m);//如果不是鼠标移动或单击消息就调用基类的窗口过程进行处理

       
}





       
//用后面这个重写的方法有个问题~~~

       
//你猜,如果你在窗体上双击鼠标,会发生什么?呵呵,窗体会最大化……

    }

}

C#句柄使用的更多相关文章

  1. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  2. Nodejs事件引擎libuv源码剖析之:句柄(handle)结构的设计剖析

    声明:本文为原创博文,转载请注明出处. 句柄(handle)代表一种对持有资源的索引,句柄的叫法在window上较多,在unix/linux等系统上大多称之为描述符,为了抽象不同平台的差异,libuv ...

  3. C#根据句柄改变窗体控件值

    需求是这样,有个程序界面我们需要通过自己的程序持续输入数据,界面如图. 可以获得控件的句柄而用钩子写入值.这里需要用到spy++工具.在VS的工具下有个spy++工具,打开如下图 通过这个工具可以获得 ...

  4. .NET对象与Windows句柄(一):句柄的基本概念

    在.NET编程中,得益于有效的内存管理机制,对象的创建和使用比较方便,大多数情况下我们无须关心对象创建和分配内存的细节,也可以放心的把对象的清理交给自动垃圾回收来完成.由于.NET类库对系统底层对象进 ...

  5. 源码剖析——深入Windows句柄本质

    参考资料: 1. http://www.codeforge.cn/read/146318/WinDef.h__html windef.h头文件 2. http://www.codeforge.cn/r ...

  6. 图解说明——究竟什么是Windows句柄

    图解说明——究竟什么是Windows句柄 参考资料:http://blog.csdn.net/newjerryj/article/details/4383701 http://www.cnblogs. ...

  7. code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类

    0  C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...

  8. matlab初学之句柄

    文章出处:http://www.cnblogs.com/CBDoctor/archive/2012/04/06/2434072.html 在matlab中,每一个对象都有一个数字来标识,叫做句柄.当每 ...

  9. c++句柄设计

    句柄,也称为智能指针. 我计算了一下我的时间,以后每14天得读完一本书,才不愧对我买的这么多书.然而我还要抽出时间来谢谢博文.最近读的是c++沉思录,开篇就用了3章来讲述句柄.好了,废话少说,接下来谈 ...

  10. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄(转)

    用我的方法来控制其他程序窗体上的窗口控件,必须先了解什么是 回调函数.我的理解是这样的: 回 调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等 ...

随机推荐

  1. mini-httpd源码分析-mini-httpd.c

    main函数分析: 一,参数设置: 读取命令行参数 配置文件参数 读取参数,设置对应的全局变量.主要参数有:配置文件:资源目录:进程ID文件:日志文件:字符集:主机名及端口号... 二,参数处理:重点 ...

  2. TensorFlow深度学习笔记 循环神经网络实践

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 加 ...

  3. gdal vc++ 配置说明

      1在VC中,打开菜Tool-Option,在Directories页面中的Library files中和Include files中分别添加GDAL的LIB文件目录和INCLUDE文件目录2打开菜 ...

  4. SQL 临时表或表变量替代游标

    1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...

  5. vi全局替换方法

    来自:http://blog.sina.com.cn/s/blog_736f1c59010136ry.html 1. 基本的替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sk ...

  6. codility上的练习(3)

    今天发现又出了lesson 3... 不过题目都很简单…… (1) Min-avg-slice 给定一个长度为n的整数数组,找到一个连续的子数组,数组元素的平均值最小. 数据范围N [1..10^5] ...

  7. ActiveX异步回调JavaScript

    ActiveX异步回调JavaScript 开发环境:VC6.0. 背景知识:COM/ActiveX/JavaScript/MFC/Thread 想必用过Ajax的童鞋们都知道xmlhttp这个东西吧 ...

  8. 四大图像库:OpenCV/FreeImage/CImg/CxImage

    1.对OpenCV 的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法: 然后将图像格式和矩阵运算, ...

  9. Oracle 表的常见操作

    --创建表并指定表空间 create table goods( id VARCHAR2(20) primary key, name VARCHAR2(20) NOT NULL, price NUMBE ...

  10. RPATH与RUNPATH

    RPATH与RUNPATH 时间 2011-11-01 21:46:44 Qt Labs China 原文  http://labs.qt.nokia.com.cn/2011/11/01/rpath- ...