原文: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. Android中使用开源框架android-image-indicator实现图片轮播部署

    之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...

  2. 创建文件夹并解决解决unicode和ASCII码转换的问题

    # -*- coding: UTF-8 -*-import sysimport timeimport os #解决unicode和ASCII码转换的问题reload(sys) #解决unicode和A ...

  3. WeUI

    从WeUI学习到的知识点   WeUI是微信Web服务开发的UI套件, 目前包含12个模块 (Button, Cell, Toast, Dialog, Progress, Msg, Article, ...

  4. Performance of Transport Control Protocol over Dynamic Spectrum Access Links

    2007 IEEE 这篇论文主要就是分析了几个版本的TCP协议在DSA网络中的性能问题. 得出的结论是: 大部分现在在用的几个版本的TCP协议,都是能够较好地适应DSA环境,吞吐率都能达到95%.当然 ...

  5. HeadFirst设计模式读书笔记(2)-观察者模式(Observer Pattern)

    观察者模式:定义了对象之间一对多的依赖关系,这样一来,当一个对象的状态发生改变时,它的依赖者将会受到通知并且自动更新. 有一个模式可以帮你的对象知悉现况,不会错过该对象感兴趣的事,对象甚至在运行时可以 ...

  6. 知道版本对于出0day后批量攻击dedecms有非常大的帮助,先判断版本再选择相应exp,效率大增

    需要知道织梦网站版本URL路径后面添加/data/admin/ver.txt 例如:http://www.dedecms.com/data/admin/ver.txt 20100708是最新版本5.6 ...

  7. Wordpress 音频播放器 Wordpress audio player with jQuery audioplayer.swf

    原文地址:http://justcoding.iteye.com/blog/545978 Wordpress audio player with jQuery How to use Wordpress ...

  8. 【HDU 4786 Fibonacci Tree】最小生成树

    一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...

  9. Unity 之 Redux 模式(第二篇)—— Rigidbody 改造,摄像机控制

    作者:软件猫 日期:2016年12月8日 转载请注明出处:http://www.cnblogs.com/softcat/p/6144041.html 上一篇文章中存在一个很严重的问题,首先我们先让 M ...

  10. Android核心基础(五)

    1.仿网易新闻客户端 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...