C#使用Windows API实现桌面上的遮罩层(鼠标穿透)

C#实现实现桌面上的遮罩层(鼠标穿透)主要通过一下几个API函数来实现:GetWindowLong,SetWindowLong,SetLayeredWindowAttributes。其中有一个Windows 消息 WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能。 下面来看看完整的实现代码:


using System;  
using System.Drawing;  
using System.Windows.Forms;  
using System.Runtime.InteropServices;  
namespace WindowsApplication40  
{  
  public partia lclass Form1:Form  
  {  
    public Form1()  
    {  
      InitializeComponent();  
    }  
    [DllImport("user32.dll",EntryPoint="GetWindowLong")]  
    public static extern long GetWindowLong(IntPtr hwnd,int nIndex);  
    [DllImport("user32.dll",EntryPoint="SetWindowLong")]  
    public static extern long SetWindowLong(IntPtr hwnd,int nIndex,long dwNewLong);  
    [DllImport("user32",EntryPoint="SetLayeredWindowAttributes")]  
    public static extern int SetLayeredWindowAttributes(IntPtr Handle,int crKey,byte bAlpha,int dwFlags);  
    const int GWL_EXSTYLE=-20;  
    const int WS_EX_TRANSPARENT=0x20;  
    const int WS_EX_LAYERED=0x80000;  
    const int LWA_ALPHA=2;  
 
    private void Form1_Load(objec tsender,EventArgs e)  
    {  
      this.BackColor=Color.Silver;  
      this.TopMost=true;  
      this.FormBorderStyle=FormBorderStyle.None;  
      this.WindowState=FormWindowState.Maximized;  
      SetWindowLong(Handle,GWL_EXSTYLE,GetWindowLong(Handle,GWL_EXSTYLE)|WS_EX_TRANSPARENT|WS_EX_LAYERED);  
      SetLayeredWindowAttributes(Handle,0,128,LWA_ALPHA);  
    }  
  }  
} 

以上就是介绍C#使用Windows API实现桌面上的遮罩层(鼠标穿透),希望对你有所帮助。

C#使用Windows API实现桌面上的遮罩层(鼠标穿透)的更多相关文章

  1. WinForm特效:桌面上的遮罩层

    一个窗体特效,帮你了解几个windows api函数.效果:windows桌面上增加一个简单的遮罩层,其中WS_EX_TRANSPARENT 比较重要,它实现了鼠标穿透的功能. using Syste ...

  2. VC Windows API获得桌面所有窗口句柄的方法

    VC Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法 Windows API Windows 这个多作业系统除了协调应用程序的执行.分配内存.管理资源…之 ...

  3. [WinAPI] API 1 [桌面上画一个简单彩色图形]

    #include<Windows.h> void GdiOut(HDC hdc); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hP ...

  4. Windows api实现桌面任务栏隐藏\显示

    //隐藏任务栏 HWND hWnd = ::FindWindow(TEXT("Shell_traywnd"),TEXT("")); ::SetWindowPos ...

  5. 有时在UIWindow上添加遮罩层不成功的原因

    程序启动后,初始化window,初始化controller,加载试图,这三个方法的顺序是嵌套的 类似于: - (id) initWindow {[self initController];} 而我在i ...

  6. c# Windows Service 桌面上显示UI

    介绍 本文的目的是说明如何从Windows Vista中的服务正确启动交互式进程,以及演示如何以完全管理员权限启动该进程.交互式过程是能够在桌面上显示UI的过程. 本文介绍如何创建一个名为Loader ...

  7. 在Windows Server 2012中如何快速开关桌面上经典的“计算机、我的文档”等通用图标

    我们都知道,在Windows Server 2012系列的服务器版本中都已经引入了Modern的现代界面作为默认的用户交互界面,同时满足视觉一致化,新版的服务器管理程序也做成了扁平化.因此传统的计算机 ...

  8. Windows Server 2012 R2在桌面上顯示我的電腦等圖示

    Windows Server 2012 R2在桌面上顯示我的電腦等圖示   從Windows2012開始,微軟取消了服務器桌面個性化選項,如何重新調出配置界面,可以使用微軟命令調出.方法如下: 同時按 ...

  9. 如何在windows server 2008的桌面上显示 我的电脑

    装完windows server2008 r2 x64后发现桌面只有一个回收站图标,这一点和xp 20003都差不多,但是xp 2003很容易就把桌面上的 我的电脑 我的文档 网上邻居找到,但是win ...

随机推荐

  1. 线上问题:如何定位解决CPU高占有率

    (原文转自:http://www.blogjava.net/hankchen) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题. 根据top命令,发现PID为28555的Java进程占用 ...

  2. java.util.ArrayList

    /* * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...

  3. jquery mobile script

    http://blog.csdn.net/lyatzhongkong/article/details/6969913 http://book.51cto.com/art/201209/355980.h ...

  4. jenkin系列_调度jmeter实现分布式测试

    假设现在有 192.168.1.100(jmeter 控制器 C ).192.168.1.101(jmeter负载机 B)两台机器进行分布式测试,各个步骤如下 1. C 和B 安装jmeter,并运行 ...

  5. UVA 1160 X-Plosives

    题意是一次装入物品,物品由两种元素组成,当遇到即将装入的物品与已经装入的物品形成k个物品,k种元素,跳过该物品的装入.可以将每种元素看成顶点,物品看成一条边.这样问题就转化为利用并查集求环的情况. 算 ...

  6. c#中的delegate(委托)和event(事件)

    c#中的delegate(委托)和event(事件) 一.delegate是什么东西? 完全可以把delegate理解成C中的函数指针,它允许你传递一个类A的方法m给另一个类B的对象,使得类B的对象能 ...

  7. 如何配置Java环境

    下载JDK并安装 搜索JDK,官网立马就出来了,下载之后个人觉得毕竟开发,毕竟这东西不大,C盘稳一点,安装在C盘可以的 配置 右键打开计算机->属性->高级系统设置->高级-> ...

  8. $destroy

    ng-view 路由切换会触发 $destroy

  9. memcached实例(enyim.com Memcached Client)

    在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...

  10. Ubuntu下配置Scheme开发环境

    MIT-Scheme环境 http://www.gnu.org/software/mit-scheme/ 在官网下载安装包,编译安装即可,期间会提示找不到m4这个库,安装即可 Scheme自带的交互环 ...