如何使用C#操作WinAPI

简介:

Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用。

主要使用的格式就是:

 

复制代码

  
  
using System.Runtime.InteropServices;

namespace TestWinAPI1
{
class Program
{
static void Main( string [] args)
{
Beep(
100 , 100 );
}


[DllImport(
" kernel32 " , CharSet = CharSet.Ansi)]
public static extern bool Beep( int frequery, int duration);
}
}
复制代码

 

其中的Beep就是Win API的调用,使用[DllImport("kernel32")]属性进行调用。

这个函数在MSDN中的原本定义是:

 


  
  
C ++
BOOL WINAPI Beep(
__in DWORD dwFreq,
__in DWORD dwDuration
);

 

我们想要调用BeepAPI,就必须:

1.将DWORD对应为C#中的int,相应的参数个数和位置设置正确

2.调用的函数名和WinAPI中的函数名一致

这样,我们在C#中就可以使用Win API对Windows进行操作。

 

这里几个资源是使用WindowsAPI不可或缺的:

MSDN:http://msdn.microsoft.com/en-us/library/ee663300(VS.85).aspx

推荐的入门教程:http://www.docin.com/p-4510006.html

 

 

使用WINAPI的难点:

 

1.C++中的各个数据类型如何对应到C#中?

使用C#中的那个数据类型对应那个C++的数据类型没有唯一的规定,但是应该站在内存使用的角度,选择内存占用大小一致。

当C++中存在指针的时候,我们可以使用ref来传递指针

 

2.如果C++中定义了数据结构如何操作?

我们也应该在C#中定义与之存储结构一致的数据结构

 

以下是用WinAPI 模拟鼠标定位和单机左键的操作:

复制代码

   
   
namespace TestWinAPI1
{
public struct Point
{
int x;
int y;
}
class Program
{
static void Main( string [] args)
{
Point point
= new Point();
bool getResult = GetCursorPos( ref point);
int setRight = SetCursorPos( 27 , 881 );
MouseClick(
" left " );
}

[DllImport(
" user32.dll " , CharSet = CharSet.Auto)]
public static extern bool GetCursorPos( ref Point point);

[DllImport(
" user32.dll " , CharSet = CharSet.Auto, ExactSpelling = true )]
public static extern IntPtr GetCursor();


[DllImport(
" user32 " )]
public static extern int SetCursorPos( int x, int y);

[DllImport(
" user32.dll " )]
static extern void mouse_event( uint dwFlags, uint dx, uint dy, uint dwData, int dwExtraInfo);

[Flags]
public enum MouseEventFlags: uint
{
LEFTDOWN
= 0x00000002 ,
LEFTUP
= 0x00000004 ,
MIDDLEDOWN
= 0x00000020 ,
MIDDLEUP
= 0x00000040 ,
MOVE
= 0x00000001 ,
ABSOLUTE
= 0x00008000 ,
RIGHTDOWN
= 0x00000008 ,
RIGHTUP
= 0x00000010
}

/// <summary>
/// checks for the currently active window then simulates a mouseclick
/// </summary>
/// <param name="button"> which button to press (left middle up) </param>
/// <param name="windowName"> the window to send to </param>
public static void MouseClick( string button, string windowName)
{
if (WindowActive(windowName))
MouseClick(button);
}

/// <summary>
/// simulates a mouse click see http://pinvoke.net/default.aspx/user32/mouse_event.html?diff=y
/// </summary>
/// <param name="button"> which button to press (left middle up) </param>
public static void MouseClick( string button)
{
switch (button)
{
case " left " :
mouse_event((
uint )MouseEventFlags.LEFTDOWN | ( uint )MouseEventFlags.LEFTUP, 0 , 0 , 0 , 0 );
break ;
case " right " :
mouse_event((
uint )MouseEventFlags.RIGHTDOWN, 0 , 0 , 0 , 0 );
mouse_event((
uint )MouseEventFlags.RIGHTUP, 0 , 0 , 0 , 0 );
break ;
case " middle " :
mouse_event((
uint )MouseEventFlags.MIDDLEDOWN, 0 , 0 , 0 , 0 );
mouse_event((
uint )MouseEventFlags.MIDDLEUP, 0 , 0 , 0 , 0 );
break ;
}
}
}
}
复制代码

 

简要描述:

使用了mouse_event,GetCursorPos,SetCursorPos三个API

mouse_event((uint)MouseEventFlags.LEFTDOWN|(uint)MouseEventFlags.LEFTUP, 0, 0, 0, 0);

代表了单击左键的动作

int setRight = SetCursorPos(27, 881); 中的27,881是屏幕上的绝对位置

 

 

PS:使用API可以做一些游戏的小外挂,比如模拟鼠标,键盘的操作...嘿嘿

目录
相关文章
|
18天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6837 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
3天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
605 138
|
3天前
|
人工智能 弹性计算 运维
阿里云发布堡垒机智能运维Agent,运维交互进入自然语言新时代
支持自然语言运维,提升效率与安全双保障。
1145 0
|
10天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
1171 1
|
13天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1273 3
|
11天前
|
人工智能 弹性计算 安全
阿里云618活动时间、活动入口、优惠活动详细解读
2026年阿里云618创新加速季已全面开启,作为年度力度最大的云产品促销活动,本次大促覆盖轻量应用服务器、ECS云服务器、GPU云服务器、数据库、AI算力、安全服务、CDN等全品类产品,推出5亿元算力补贴、新用户限时秒杀、普惠满减、企业专享、免费试用、云大使返佣等多重福利,个人开发者、中小企业、AI团队均可享受专属低价。本文将系统梳理2026年阿里云618活动的完整时间节点、官方参与入口、各类优惠细则、使用规则、热门产品推荐及实操代码,帮助用户精准参与、高效省钱,以最低成本完成上云部署。
982 5
|
9天前
|
人工智能 自然语言处理 安全
Vibe Coding 实战:别盲目跟风,先分清 vibe coding 适合什么场景
本文系统总结vibe coding实战经验:明确其适用场景(原型、小工具、标准化模块),剖析5步落地流程(场景判定→结构化提示词→目录初始化→分模块生成→自动化校验),指出四大常见误区,并推荐适配工具Trae。强调“场景匹配+规则前置”是提效关键,避免盲目套用。
806 1