原文: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. 学习《Javascript权威指南》的第二章笔记

    1.Javascript区分大小写,但是HTML不区分大小写 2.JS会忽略标识之间的空格,多数情况下也会忽视换行符,所以要采用 整齐.一致的编码风格 3.//用作结尾的注释,/* 和 */可以当跨行 ...

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

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

  3. 使用SelectClipRgn注意事项

    SelectClipRgn 函数功能:该函数选择一个区域作为指定设备环境的当前剪切区域. 函数原型:int SelectClipRgn(HDc hdc, HRGN hrgn): 参数: hdc:设备环 ...

  4. 使用jquery处理ajax返回XML

    JS代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 ...

  5. android layout的布局

    1.android:layout_width.android:layout_heigth 表示控件的大小,长宽 2.andoid:layout_gravity .android:gravity表示控件 ...

  6. Jquery基础之事件操作

    事件是用户操作时页面或页面加载时引发的用来完成javascript和HTML之间的交互操作.常见的元素点击事件.鼠标事件.键盘输入事件等,较传Javascript 相比JQuery增加并扩展了基本的事 ...

  7. wafer

    Wafer Dicing:晶圆划片 wafer:晶圆 Wafer bumping:晶圆凸起 300mm wafer line:300mm晶圆线 wafer fabrication:晶圆加工 silic ...

  8. Oracle 索引扫描的4种类型

    根据索引的类型与where限制条件的不同,有4种类型的Oracle索引扫描: 3,4可归一种 (1) 索引唯一扫描(index uniquescan) (2) 索引范围扫描(index range s ...

  9. uva10820 send a table (nlogn求1-n欧拉函数值模版

    //重点就是求1-n的欧拉函数啦,重点是nlogn求法的版 //大概过程类似于筛选法求素数 #include<cstdio> #include<iostream> #inclu ...

  10. 【HDU】4092 Nice boat(多校第四场1006) ——线段树 懒惰标记

    Nice boat Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...