C# Win32 API
kevin_水滴石穿
平心静气,日积月累,厚积薄发
展开
-
C#中判断系统的网络连接状态的方法
在C#中可以使用多种方法来判断网络的连接状态,比如使用WIN32的API来判断,也可以直接Ping某个网址来判断。 下面来介绍下我最进行写的一个判断网络连接的方法类,使用了Wine32的API函数与Ping.Send结合的方法,代码如下: using System; using System.Collections.Generic; using System.Text; using Sy原创 2011-11-18 12:14:25 · 1076 阅读 · 0 评论 -
如何在C#中使用Win32和其他库之二
简单字符串 下面是一个接受字符串参数的函数的简单示例: BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName, // 根路径 LPDWORD lpSectorsPerCluster, // 每个簇的扇区数 LPDWORD lpBytesPerSector, // 每个扇区的字节数 LPDWORD lpNumb转载 2011-11-09 17:58:57 · 575 阅读 · 0 评论 -
如何在C#中使用Win32和其他库之三
具有内嵌字符数组的结构 某些函数接受具有内嵌字符数组的结构。例如,GetTimeZoneInformation() 函数接受指向以下结构的指针: typedef struct _TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[ 32 ]; SYSTEMTIME StandardDate;转载 2011-11-09 18:00:02 · 646 阅读 · 0 评论 -
如何在C#中使用 Win32和其他库
如何在C#中使用 Win32和其他库 这一次我们将深入探讨如何在 C# 中使用 Win32 和其他现有库。 C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,转载 2011-11-09 17:57:38 · 543 阅读 · 0 评论 -
在C#中SendMessage和PostMessage的参数传递
在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); BOOL PostMessage(原创 2011-10-30 20:35:56 · 2927 阅读 · 0 评论 -
SYSTEM32 下的几乎所有文件的简单说明
aclui.dll .....Security Descriptor Editor,没有它,注册表编缉器会无法运行 ACTIVEDS.DLL .....(ADs 路由层 DLL). 没有它, 打开事件查看器会出错 ADSLDPC.DLL ......ADs LDAP 提供程序 C DLL ADVAPI32.DLL .....(高级 Windows 32 基本 API)...这个 avicap转载 2011-12-08 09:18:10 · 1059 阅读 · 2 评论 -
用C#实现智能设备上的NotifyIcon类
前几天有网友问.NET CF中怎么实现NotifyIcon,我这才知道原来.NET CF并没有提供NotifyIcon控件。 于是偶想PC上可以用Shell_NotifyIcon和MessageWindow来实现托盘图标,只是不知道.NET CF支持不支持这两个东东了。仔细看了一下.NET CF中可疑的命名空间,没想到在Microsoft.WindowsCE.Forms命名空间里面竟然有转载 2011-12-08 09:14:57 · 773 阅读 · 0 评论 -
C#获取CPU占用率、内存占用、磁盘占用、进程信息
以下是代码片段: using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.IO; using System.Text; using System.Management; using System.Runt转载 2011-12-09 16:36:41 · 7602 阅读 · 2 评论 -
用C#获取CPU编号、硬盘编号等系统有关环境、属性
用C#获取CPU编号、硬盘编号等系统有关环境、属性 如果利用C#获取系统有关环境和属性,这个也是在网上问得比较多的问题,不过大部分只有提问没有回答,最近正好想做有关方面的东西,整理了一下,提供给大家,希望能给大家提供参考意见: 首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码: CpuInfo.cs using System; using Sys转载 2011-12-15 09:27:23 · 772 阅读 · 0 评论 -
解决Windows 程序界面闪烁问题的一些经验
一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。 先来谈谈闪烁产生的原因 原因一: 如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕 上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。 一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。 这样问题就来转载 2012-01-29 13:11:32 · 744 阅读 · 0 评论 -
C#调用Win32 的API函数--User32.dll
Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime转载 2012-01-03 15:10:34 · 1246 阅读 · 0 评论 -
C# 实现屏幕键盘 (ScreenKeyboard)
要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活。因此需要一个全局的钩子,也就 是系统范围的钩子。 什么是钩子(Hook) 钩子(Hook)是Windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先 启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通 过系统调用,把它挂入系统。每当特定的消息发出,转载 2011-11-06 20:06:50 · 1226 阅读 · 0 评论 -
Windows API 技巧集
一)不规则窗口 Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数SetWindowRgn改变窗口的区域。这些API函数在C++ Builder中包含在头文件wingdi.h和winuser.h里面,因此,要使用这些API函数就要先在程序头部加上包含头文件转载 2011-11-06 19:59:17 · 880 阅读 · 0 评论 -
关于句柄的一些知识
句柄的本质 一、书上定义: >(Microsoft Press,by Richard Wilton) 在Windows环境中,句柄是用来标识项目的,这些项目包括:模块(module)、任务(task)、实例 (instance)、文件(file)、内存块(block of memory)、菜单(menu)、 控制(contr转载 2011-11-06 19:53:12 · 593 阅读 · 0 评论 -
解决绘图中闪烁的问题(C#)
如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码: 请在构造函数里面底下加上如下几行: SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.转载 2011-10-31 23:26:55 · 3241 阅读 · 2 评论 -
c# 判断网络是否连接
win32 API函数的做法: 要用的函数:InternetGetConnectedState 函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved); 参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。 INTERNE转载 2011-10-31 23:21:38 · 1225 阅读 · 0 评论 -
用C#调用Windows API向指定窗口发送
原文转载自http://www.51testing.com/?uid-175761-action-viewspace-itemid-227073 一、调用Windows API。 C#下调用Windows API方法如下: 1、引入命名空间:using System.Runtime.InteropServices; 2、引用需要使用的方法,格式:[DllImport("DLL文件转载 2011-10-30 20:55:11 · 4499 阅读 · 0 评论 -
C# API 调用格式和参数类型
一、调用格式 using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码 //使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。 [DllImport("user32.dll")] public static extern ReturnType FunctionName(type arg1,t转载 2011-11-21 11:25:38 · 698 阅读 · 0 评论 -
C# API 如何保证使用托管对象的平台调用成功
三、如何保证使用托管对象的平台调用成功? 如果在调用平台 invoke 后的任何位置都未引用托管对象,则垃圾回收器可能将完成该托管对象。这将释放资源并使句柄无效,从而导致平台invoke 调用失败。用 HandleRef 包装句柄可保证在平台 invoke 调用完成前,不对托管对象进行垃圾回收。 例如下面: FileStream fs = new FileStream( "a.txt", F转载 2011-11-21 11:59:37 · 797 阅读 · 0 评论 -
C#中在窗体间使用消息来处理相关联的事件
在项目中有这样的需求,在主窗体隐藏时或者主进程运行时对其它窗体的控件或者事件进行控制,而且其它窗体是处于活动状态,而主窗体或者主进程是隐藏在后面的。这个时候使用句柄和消息来处理就比较好解决这些问题了,当然了也可以使用其它方法。比如将其它窗体在主窗体中申明并且定义,使之和主窗体一样一直存在于内存中,在各个窗体中申明公共方法,在主进程需要调用时直接调用即可,但是这样耗费了大量的系统资源。现在使用消息来原创 2011-10-30 20:13:14 · 997 阅读 · 0 评论 -
操作ini文件的公共类
以前我提供了一个操作ini文件的类,但是是VB.net版本。以下是我转载的一个C#版本的操作ini文件的类。 这里是一个通过调用Windows API来操作ini文件的一个公共类,并用托管代码进行了封装,提供了对ini文件的增删查改功能。 using System; using System.IO; using System.Text; using System.Runtime.In转载 2011-11-01 14:53:41 · 627 阅读 · 0 评论 -
纯C#钩子实现及应用
关于钩子 请参见微软中国社区中《HOOK专题》一文。 纯C#钩子(Hook)实现 要实现系统钩子其实很简单,调用三个Win32的API即可。 SetWindowsHookEx 用于设置钩子。(设立一道卡子,盘查需要的信息) [DllImport( "user32.dll", CallingConvention = CallingConvention.StdCa转载 2011-11-03 10:06:56 · 785 阅读 · 0 评论 -
Windows_API_函数 参考大全
1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一转载 2011-11-03 09:05:20 · 691 阅读 · 0 评论 -
C# API
C:/ProgramFiles/MicrosoftVisual Studio .NET/ FrameworkSDK/Samples/ Technologies/ Interop/PlatformInvoke/ WinAPIs/CS目录下有大量的调用API的例子。 一、调用格式 using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码 //转载 2011-11-04 18:04:11 · 947 阅读 · 0 评论 -
WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器
//创建定时器函数的声明: SetTimer( hWnd: HWND; {与定时器相关联的窗口句柄} nIDEvent: UINT; {指定一个非 0 的定时器标识符} uElapse: UINT; {指定间隔时间, 单位是毫秒} lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的转载 2012-06-21 08:41:18 · 995 阅读 · 0 评论