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

    }

}

C#调用Win32 的API函数--User32.dll ----转载的更多相关文章

  1. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  2. mfc 调用Windows的API函数实现同步异步串口通信(源码)

    在工业控制中,工控机(一般都基于Windows平台)经常需要与智能仪表通过串口进行通信.串口通信方便易行,应用广泛. 一般情况下,工控机和各智能仪表通过RS485总线进行通信.RS485的通信方式是半 ...

  3. 【转】c# 调用windows API(user32.dll)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.R ...

  4. 【整理】c# 调用windows API(user32.dll)

    User32.dll提供了很多可供调用的接口,大致如下(转自http://blog.csdn.net/zhang399401/article/details/6978803) using System ...

  5. C#中调用WIN32的API

    最近在学习C#中的GDI部分,本来尝试编写一个字幕控件(其实还是用label比较合适),但是发现控件中用GDI将整个控件粉刷貌似不行(应该是我水平不行),所以就去捣鼓了下WIN32的DLL,发现用AP ...

  6. 使用ctypes调用系统C API函数需要注意的问题,函数参数中有指针或结构体的情况下最好不要修改argtypes

    有人向我反应,在代码里同时用我的python模块uiautomation和其它另一个模块后,脚本运行时会报错,但单独使用任意一个模块时都是正常的,没有错误.issue链接 我用一个例子来演示下这个问题 ...

  7. Windows路径操作API函数学习【转载】

    文章出自https://www.cnblogs.com/MakeView660/p/6644838.html 前言 在VC++开发过程中,经常需要用到一些路径操作,比如拼需要的文件路径,搜索路径中的内 ...

  8. 在 C# 中通过 P/Invoke 调用Win32 DLL

    在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 | 更新日期 : 1/13/2005 Jason Clark 下载本文的代码: NET0307.exe ( ...

  9. C++多线程中调用python api函数

    错误场景:一直等待全局锁. 解决方法: 一.首先定义一个封装类,主要是保证PyGILState_Ensure, PyGILState_Release配对使用,而且这个类是可以嵌套使用的. #inclu ...

随机推荐

  1. 计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示

    //给定程序功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1(独立一行)作为字符串输入结束的标志,然后将文件的内容读到显示在屏幕上.文件的读写分别由自定义 ...

  2. Ubuntu国内镜像

    编辑文件:sudo vim /etc/apt/sources.list 全部替换为:如下根据需要替换一个即可,修改保存后记得要执行更新软件包列表命令: sudo apt-get update 一.清华 ...

  3. ML 是什么意思?

    ML到底是什么意思? 1.(ML)machine language机器语言,makeup language.参见:ML语言: 通用的函数式编程语言. 2.(ML)machine learning,人工 ...

  4. 【代码总结】数据库抽象层PDO

    一.概述 PDO就是一个"数据库访问抽象层",起作用是统一各种数据库的访问接口,能够轻松的在不同数据库之间进行切换. 二.PDO的安装 编辑php.ini文件 添加 extensi ...

  5. Codeforces Round #611 (Div. 3) C

    There are nn friends who want to give gifts for the New Year to each other. Each friend should give ...

  6. html5或者移动端暴力定位城市-高德地图,可以取到当前的城市code,亲测好用

    复制 粘贴到html中打开!!!!! <!doctype html> <html> <head> <meta charset="utf-8" ...

  7. 三级联动的区域选择器 iOS组件

    在iOS开发中,多级联动选择器非常常见,一般用于条件筛选,区域选择等. 实现了一个找房 APP 的筛选功能,效果如下: 代码如下:https://github.com/zhangtibin/Condi ...

  8. JSON 解析中遇到的坑😭

    最近做加解密遇到一个很“奇葩的问题”,解析服务端加密后的字符串 序列化 时一直报错 "json解析失败:Error Domain=NSCocoaErrorDomain Code=3840 & ...

  9. transform 的旋转 ,3d效果,要添加3d效果的父级加上景深perspective。 3d效果的容器加上 transform-style:preserve-3d。

    该技术用于创建一个多维的数据,在这个实例中使用了两个元素用于正面和反面.前面用来放置产品图片,底部用来放置产品信息.默认情况下产品信息隐藏起来,同时鼠标悬停在产品图片上时,隐藏在底部的产品信息在X轴放 ...

  10. Newtonsoft.Json 版本不一致导致错误

    可以在配置文件添加这部分,其他版本的不一致,也可使用这种方式解决. <runtime> <assemblyBinding xmlns="urn:schemas-micros ...