`
king_c
  • 浏览: 225517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • c#
阅读更多
Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->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>
/// 该函数将指定的虚拟键码和键盘状态翻译为相应的字符或字符串。该函数使用
分享到:
评论

相关推荐

    C# 调用win32 api函数-user32.dll详细说明

    ### C# 调用 Win32 API 函数——user32.dll 详细说明 #### 概述 在开发基于 Windows 的应用时,有时需要直接调用底层的 Windows API 函数来实现某些功能,比如获取窗口句柄、绘制图形、控制窗口等。这些功能可以...

    C#_调用win32的API函数--user32.dll

    C#_调用win32的API函数--user32.dll实现窗体的多显示效果(四周扩展,中间缩小,折叠显示,淡入淡出效果)

    c#_调用win32的API函数--user32.dll.doc

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

    最简单的C#调用dll文件(user32.dll)

    MessageBox(IntPtr.Zero, "这是来自user32.dll的消息", "C#调用示例", 0); } } ``` 在这个例子中,我们导入了`MessageBox`函数,指定了其所在的dll文件,并设置了`SetLastError`参数为`true`以便于错误处理。`...

    C# 使用user32.dll找窗体,填数据

    总结,通过C#调用`user32.dll`的`FindWindow`和`GetClassName`函数,可以实现查找具有特定类名的窗体,并获取其实际类名,从而适应类名动态变化的情况。一旦找到窗体,还可以进一步进行数据填充和其他操作。然而,...

    C# 调用 Win32 API 源码

    2. **定义API函数**:在"Win32API.cs"文件中,通常会看到一系列静态类,每个类代表一个特定的DLL,如`Kernel32`或`User32`。这些类中的静态方法对应于Win32 API函数,如`GetWindowText`或`CreateProcess`。例如: `...

    c#通过win32api方式创建窗体

    "c#通过win32api方式创建窗体"这个主题涉及到如何使用C#语言来创建一个窗体,而不是依赖.NET Framework的System.Windows.Forms命名空间中的Form类。下面我们将深入探讨这一技术。 首先,Win32 API是Windows操作系统...

    C#调用Win32类库几个例子.rar

    本压缩包文件"**C#调用Win32类库几个例子.rar**"提供了一些示例,帮助开发者了解如何在C#中调用Win32 API来实现特定任务。 首先,让我们理解什么是Win32 API。Win32 API是微软Windows操作系统提供的函数库,包含了...

    从.NET平台调用Win32 API

    - 假设我们要调用Win32 API的`MessageBox`函数,来自user32.dll,它的原型是: ```c int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); ``` - 在C#中,我们可以这样定义: ```...

    API C_调用Win32_的API函数

    总的来说,C#调用Win32 API函数是一种常见的跨语言交互方式,允许我们在.NET环境中利用Windows系统的底层功能。但这种方式需要对Win32 API有深入理解,并且要注意内存管理和错误处理。正确地使用这些API可以极大地...

    C#dllimport调用 C# 调用Win32

    "C#调用Win32"通常涉及以下关键概念: 1. **P/Invoke**:这是.NET Framework提供的一个特性,允许托管代码调用非托管代码,包括本地DLL函数。P/Invoke涉及到类型转换、内存管理以及异常处理等复杂问题。 2. **...

    在C#中调用API函数.

    C# 中调用 API 函数 在 C# 中调用 API 函数是一种常见的编程技术,用于实现与操作系统或其他应用程序之间的交互。在本文中,我们将介绍如何在 C# 中调用 API 函数,并提供了一些实际示例代码。 一、什么是 API ...

    win32 API 调用

    #### 三、示例:C#调用Windows API函数 以下是一个具体的例子,展示如何在C#中调用User32.dll中的`MessageBox`函数。 ```csharp using System; using System.Runtime.InteropServices; public class Win32 { // ...

    C# 通过Win32的API来调用系统菜单

    在C#编程中,有时我们需要访问和操作Windows操作系统的...总的来说,通过C#调用Win32 API来操作系统菜单是一项进阶技术,需要对Windows编程有一定了解。掌握这个技能可以让你在编写桌面应用程序时拥有更大的灵活性。

    C# win32 API编程

    根据给定的信息,本文将详细探讨C#与Win32 API编程的相关知识点,包括但不限于为何在C#中调用Win32 API、如何调用、以及具体的实例代码分析。 ### 1. 为什么要在C#中调用Win32 API 尽管.NET Framework提供了一系列...

    C#调用Windows API函数

    1. 引用DLL:首先,我们需要知道目标API函数所在的动态链接库(DLL)文件,如kernel32.dll、user32.dll等。在C#代码中,我们通过`using System.Runtime.InteropServices;`引入`DllImport`特性来引用这些DLL。 2. ...

    C#利用win32API测试系统.txt

    1. 引用DLL:Win32 API函数通常包含在动态链接库(DLL)文件中,如kernel32.dll或user32.dll。在C#中,我们使用`DllImport`属性从这些库中导入函数。例如,要导入`kernel32.dll`中的`GetVersionEx`函数,我们可以...

    C#130用 调用Win32 API来操纵系统菜单 源代码

    总的来说,通过C#调用Win32 API来操纵系统菜单涉及以下几个步骤: 1. 引入`DllImport`特性声明API函数。 2. 实现调用API函数的方法。 3. 在适当的时候创建、修改或设置系统菜单。 4. 处理用户与自定义菜单项的交互。...

    user32.dll中函数列表

    ### user32.dll中函数列表解析 #### 一、概述 `user32.dll`是Windows操作系统中的一个重要组件,属于用户界面(User Interface)部分的核心动态链接库(DLL)。它包含了大量与用户交互相关的API函数,例如窗口管理...

Global site tag (gtag.js) - Google Analytics