侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

C#调用Win32的API函数--User32.dll

Windows  /  管理员 发布于 5年前   411

Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。

代码

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;namespace WindowsAPI{  class CSharp_Win32Api  {    #region User32.dll 函数    /// <summary>    /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。hWnd:设备上下文环境被检索的窗口的句柄    /// </summary>    [DllImport("user32.dll", CharSet = CharSet.Auto)]    public static extern IntPtr GetDC(IntPtr hWnd);    /// <summary>    /// 函数释放设备上下文环境(DC)供其他应用程序使用。    /// </summary>    public static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);    /// <summary>    /// 该函数返回桌面窗口的句柄。桌面窗口覆盖整个屏幕。    /// </summary>    static public extern IntPtr GetDesktopWindow();    /// <summary>    /// 该函数设置指定窗口的显示状态。    /// </summary>    static public extern bool ShowWindow(IntPtr hWnd, short State);    /// <summary>    /// 通过发送重绘消息 WM_PAINT 给目标窗体来更新目标窗体客户区的无效区域。    /// </summary>    static public extern bool UpdateWindow(IntPtr hWnd);    /// <summary>    /// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。    /// </summary>    static public extern bool SetForegroundWindow(IntPtr hWnd);    /// <summary>    /// 该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。    /// </summary>    static public extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int Width, int Height, uint flags);    /// <summary>    /// 打开剪切板    /// </summary>    static public extern bool OpenClipboard(IntPtr hWndNewOwner);    /// <summary>    /// 关闭剪切板    /// </summary>    static public extern bool CloseClipboard();    /// <summary>    /// 打开清空</summary>    static public extern bool EmptyClipboard();    /// <summary>    /// 将存放有数据的内存块放入剪切板的资源管理中    /// </summary>    static public extern IntPtr SetClipboardData(uint Format, IntPtr hData);    /// <summary>    /// 在一个矩形中装载指定菜单条目的屏幕坐标信息     /// </summary>    static public extern bool GetMenuItemRect(IntPtr hWnd, IntPtr hMenu, uint Item, ref RECT rc);    [DllImport("user32.dll", ExactSpelling = true, CharSet = CharSet.Auto)]    /// <summary>    /// 该函数获得一个指定子窗口的父窗口句柄。    /// </summary>    public static extern IntPtr GetParent(IntPtr hWnd);    /// <summary>    /// 该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。     /// </summary>    /// <param name="hWnd">其窗口程序将接收消息的窗口的句柄</param>    /// <param name="msg">指定被发送的消息</param>    /// <param name="wParam">指定附加的消息指定信息</param>    /// <param name="lParam">指定附加的消息指定信息</param>    /// <returns></returns>    public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);    public static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wParam, IntPtr lParam);        public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref RECT lParam);    public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref POINT lParam);        public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TBBUTTON lParam);        public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TBBUTTONINFO lParam);       public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref REBARBANDINFO lParam);       public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref TVITEM lParam);        public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref LVITEM lParam);      public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref HDITEM lParam);      public static extern void SendMessage(IntPtr hWnd, int msg, int wParam, ref HD_HITTESTINFO hti);     /// <summary>    /// 该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里    /// </summary>    public static extern IntPtr PostMessage(IntPtr hWnd, int msg, int wParam, int lParam);    public static extern IntPtr SetWindowsHookEx(int hookid, HookProc pfnhook, IntPtr hinst, int threadid);    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]    public static extern bool UnhookWindowsHookEx(IntPtr hhook);    [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]    public static extern IntPtr CallNextHookEx(IntPtr hhook, int code, IntPtr wparam, IntPtr lparam);    /// <summary>    /// 该函数对指定的窗口设置键盘焦点。    /// </summary>    public static extern IntPtr SetFocus(IntPtr hWnd);    /// <summary>    /// 该函数在指定的矩形里写入格式化文本,根据指定的方法对文本格式化(扩展的制表符,字符对齐、折行等)。    /// </summary>    public extern static int DrawText(IntPtr hdc, string lpString, int nCount, ref RECT lpRect, int uFormat);    /// <summary>    /// 该函数改变指定子窗口的父窗口。    /// </summary>    public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent);    /// <summary>    /// 获取对话框中子窗口控件的句柄    /// </summary>    public extern static IntPtr GetDlgItem(IntPtr hDlg, int nControlID);    /// <summary>    /// 该函数获取窗口客户区的坐标。    /// </summary>    public extern static int GetClientRect(IntPtr hWnd, ref RECT rc);    /// <summary>    /// 该函数向指定的窗体添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。    /// </summary>    public extern static int InvalidateRect(IntPtr hWnd, IntPtr rect, int bErase);    /// <summary>    /// 该函数产生对其他线程的控制,如果一个线程没有其他消息在其消息队列里。    /// </summary>    public static extern bool WaitMessage();    /// <summary>    /// 该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。    /// </summary>    public static extern bool PeekMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax, uint wFlag);    /// <summary>    /// 该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。    /// </summary>    public static extern bool GetMessage(ref MSG msg, int hWnd, uint wFilterMin, uint wFilterMax);    /// <summary>    /// 该函数将虚拟键消息转换为字符消息。    /// </summary>    public static extern bool TranslateMessage(ref MSG msg);    /// <summary>    /// 该函数调度一个消息给窗口程序。    /// </summary>    public static extern bool DispatchMessage(ref MSG msg);    /// <summary>    /// 该函数从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源.    /// </summary>    public static extern IntPtr LoadCursor(IntPtr hInstance, uint cursor);    /// <summary>    /// 该函数确定光标的形状。    /// </summary>    public static extern IntPtr SetCursor(IntPtr hCursor);    /// <summary>    /// 确定当前焦点位于哪个控件上。    /// </summary>    public static extern IntPtr GetFocus();    /// <summary>    /// 该函数从当前线程中的窗口释放鼠标捕获,并恢复通常的鼠标输入处理。捕获鼠标的窗口接收所有的鼠标输入(无论光标的位置在哪里),除非点击鼠标键时,光标热点在另一个线程的窗口中。    /// </summary>    public static extern bool ReleaseCapture();    /// <summary>    /// 准备指定的窗口来重绘并将绘画相关的信息放到一个PAINTSTRUCT结构中。    /// </summary>    public static extern IntPtr BeginPaint(IntPtr hWnd, ref PAINTSTRUCT ps);    /// <summary>    /// 标记指定窗口的绘画过程结束,每次调用BeginPaint函数之后被请求    /// </summary>    public static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT ps);    /// <summary>    /// 半透明窗体    /// </summary>    public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize, IntPtr hdcSrc, ref POINT pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);    /// <summary>    /// 该函数返回指定窗口的边框矩形的尺寸。该尺寸以相对于屏幕坐标左上角的屏幕坐标给出。    /// </summary>    public static extern bool GetWindowRect(IntPtr hWnd, ref RECT rect);    /// <summary>    /// 该函数将指定点的用户坐标转换成屏幕坐标。    /// </summary>    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT pt);    /// <summary>    /// 当在指定时间内鼠标指针离开或盘旋在一个窗口上时,此函数寄送消息。    /// </summary>    public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENTS tme);    /// <summary>    ///     /// </summary>    public static extern bool SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool redraw);    /// <summary>    /// 该函数检取指定虚拟键的状态。    /// </summary>    public static extern ushort GetKeyState(int virtKey);    /// <summary>    /// 该函数改变指定窗口的位置和尺寸。对于顶层窗口,位置和尺寸是相对于屏幕的左上角的:对于子窗口,位置和尺寸是相对于父窗口客户区的左上角坐标的。    /// </summary>    public static extern bool MoveWindow(IntPtr hWnd, int x, int y, int width, int height, bool repaint);    /// <summary>    /// 该函数获得指定窗口所属的类的类名。    /// </summary>    public static extern int GetClassName(IntPtr hWnd, out STRINGBUFFER ClassName, int nMaxCount);    /// <summary>    /// 该函数改变指定窗口的属性    /// </summary>    public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);    /// <summary>    /// 该函数检索指定窗口客户区域或整个屏幕的显示设备上下文环境的句柄,在随后的GDI函数中可以使用该句柄在设备上下文环境中绘图。    /// </summary>    public static extern IntPtr GetDCEx(IntPtr hWnd, IntPtr hRegion, uint flags);    /// <summary>    /// 获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景 返回值 Long。    /// </summary>    public static extern IntPtr GetWindowDC(IntPtr hWnd);    /// <summary>    /// 该函数用指定的画刷填充矩形,此函数包括矩形的左上边界,但不包括矩形的右下边界。    /// </summary>    public static extern int FillRect(IntPtr hDC, ref RECT rect, IntPtr hBrush);    /// <summary>    /// 该函数返回指定窗口的显示状态以及被恢复的、最大化的和最小化的窗口位置。    /// </summary>    public static extern int GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT wp);    /// <summary>    /// 该函数改变指定窗口的标题栏的文本内容    /// </summary>    public static extern int SetWindowText(IntPtr hWnd, string text);    /// <summary>    /// 该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控制,则拷贝控制的文本。    /// </summary>    public static extern int GetWindowText(IntPtr hWnd, out STRINGBUFFER text, int maxCount);    /// <summary>    /// 用于得到被定义的系统数据或者系统配置信息.    /// </summary>    static public extern int GetSystemMetrics(int nIndex);    /// <summary>    /// 该函数设置滚动条参数,包括滚动位置的最大值和最小值,页面大小,滚动按钮的位置。    /// </summary>    static public extern int SetScrollInfo(IntPtr hwnd, int bar, ref SCROLLINFO si, int fRedraw);    /// <summary>    /// 该函数显示或隐藏所指定的滚动条。    /// </summary>    public static extern int ShowScrollBar(IntPtr hWnd, int bar, int show);    /// <summary>    /// 该函数可以激活一个或两个滚动条箭头或是使其失效。    /// </summary>    public static extern int EnableScrollBar(IntPtr hWnd, uint flags, uint arrows);    /// <summary>    /// 该函数将指定的窗口设置到Z序的顶部。    /// </summary>    public static extern int BringWindowToTop(IntPtr hWnd);    /// <summary>    /// 该函数滚动指定窗体客户区域的目录。    /// </summary>    static public extern int ScrollWindowEx(IntPtr hWnd, int dx, int dy,ref RECT rcScroll, ref RECT rcClip, IntPtr UpdateRegion, ref RECT rcInvalidated, uint flags);    /// <summary>    /// 该函数确定给定的窗口句柄是否识别一个已存在的窗口。    /// </summary>    public static extern int IsWindow(IntPtr hWnd);    /// <summary>    /// 该函数将256个虚拟键的状态拷贝到指定的缓冲区中。    /// </summary>    public static extern int GetKeyboardState(byte[] pbKeyState);    /// <summary>    /// 该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用由给定的键盘布局句柄标识的物理键盘布局和输入语言来翻译代码。    /// </summary>    public static extern int ToAscii(int uVirtKey,int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey,int fuState);    #endregion  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Windows 2003 工作手册(2)
    下一条:
    C# Winfrom实现Skyline画直线功能的示例代码
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Windows 10的告别:2025年10月14日,一段时代的终结(0个评论)
    • windows 11激活_Win11 KMS激活流程步骤(1个评论)
    • 安装Windows 11系统的注意了,看看你的cpu是否在微软兼容列表排除中(1个评论)
    • 微软将于2022年9月20日推送Windows11 22H2新版本,推测2024发布windows 12(0个评论)
    • windows11系统中可以关闭禁止的服务及介绍(1个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2018-01
    • 2018-06
    • 2020-06
    • 2021-06
    • 2021-07
    • 2022-01
    • 2022-04
    • 2022-08
    • 2023-08
    • 2023-10
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客