原文: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. 安装4.x版本的express开发框架

    错误版本(未更新前的安装方法,更新后就不是这么安装了,好多网上的教程还是这种方法,所以这里先写明了,旧版这里是可以通过的,但是新版4.x就不行了,请用分割线下边的方法)   本文演示在Linux上安装 ...

  2. Laravel Packages 开发

    Packages是向Laravel中添加功能最重要的途径.composer.json中require的都是包.关于包的详细说明请查看 API . 下面一起创建一个简单的Package : 1. 环境配 ...

  3. Django学习(二) Django框架简单搭建

    为了快速学习Python进行Web的开发,所以我不准备从Python的基础学起,直接从Django框架入手,边学框架边学Python的基础知识. 下面就开始Django的快速开发之旅吧. 关于Djan ...

  4. UVA 10129 Play on Words

    欧拉回路 以字母为结点,单词为边:注意两个相同的单词表示两条边. 并查集判断是否连通,出度,入度判断是否是欧拉回路 #include <iostream> #include <cst ...

  5. SAR数据下载网站

    1] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.144.2153&rep=rep1&type=pdf[2] ht ...

  6. Oracle EBS-SQL (INV-6):检查监督帐户别名处理.sql

    select MSI.SEGMENT1                                 项目编码,       MSI.DESCRIPTION                      ...

  7. .NET设计模式系列文章

    原文地址:http://terrylee.cnblogs.com/archive/2006/06/01/334911.html 最初写探索设计模式系列的时候,我只是想把它作为自己学习设计模式的读书笔记 ...

  8. HDOJ-1003 Max Sum(最大连续子段 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...

  9. Tortoise-SVN 出现“unable to connect to a repository at url no element found”解决办法

    安装要SVN server服务器后,建立自己的Repositories,创建自己的项目文件夹 如,https://xxxxxxxxxx.com:8443/ 安装Tortoise-svn进行设置目标链接 ...

  10. Hadoop 3、Hadoop 分布式存储系统 HDFS

    HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系统. 一.HDFS的优缺点 1.HDFS优点: a.高容错性 .数据保存多个副本 .数 ...