WinAPI: SetTimer、KillTimer - 创建与移除高性能定时器
摘要: //创建定时器函数的声明: SetTimer( hWnd: HWND; {与定时器相关联的窗口句柄} nIDEvent: UINT; {指定一个非 0 的定时器标识符} uElapse: UINT; {指定间隔时间, 单位是毫秒} lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的指针} ): UINT; {返回定时器标识符; 失败返回 0} //移除定时器函数的声明: KillTimer( hWnd: HWND; {与定时器相... 阅读全文
POSTED @   2012-06-21 08:41  KEVIN GAO 阅读(67) |   评论 (0)   编辑
解决Windows 程序界面闪烁问题的一些经验
摘要: 一般的windows 复杂的界面需要使用多层窗口而且要用贴图来美化,所以不可避免在窗口移动或者改变大小的时候出现闪烁。先来谈谈闪烁产生的原因原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,这样就会感觉闪烁了。解决方法:尽量快的输出图像,使输出在一个刷新 阅读全文
POSTED @   2012-01-29 13:11  KEVIN GAO 阅读(141) |   评论 (0)   编辑
C#调用Win32 的API函数--User32.dll
摘要: Win32的API函数是微软自己的东西,可以直接在C#中直接调用,在做WinForm时还是很有帮助的。有时候我们之直接调用Win32 的API,可以很高效的实现想要的效果。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceWindowsAPI{classCSharp_Win32Api{#regionUser32.dll函数///<summary>///该函数检索一指定窗口的客户区域或整个屏 阅读全文
POSTED @   2012-01-03 15:10  KEVIN GAO 阅读(509) |   评论 (0)   编辑
用C#获取CPU编号、硬盘编号等系统有关环境、属性
摘要: 用C#获取CPU编号、硬盘编号等系统有关环境、属性如果利用C#获取系统有关环境和属性,这个也是在网上问得比较多的问题,不过大部分只有提问没有回答,最近正好想做有关方面的东西,整理了一下,提供给大家,希望能给大家提供参考意见:首先需要定义几个结构(struct) ,便于DllImport作为返回参数调用。以下是代码:CpuInfo.csusing System;using System.Configuration;using System.Runtime.InteropServices;/**//*** LayoutKind.Automatic:为了提高效率允许运行态对类型成员重新排序* 注意: 阅读全文
POSTED @   2011-12-15 09:27  KEVIN GAO 阅读(132) |   评论 (0)   编辑
C#获取CPU占用率、内存占用、磁盘占用、进程信息
摘要: 以下是代码片段:usingSystem;usingSystem.Collections.Generic;usingSystem.Diagnostics;usingSystem.Threading;usingSystem.IO;usingSystem.Text;usingSystem.Management;usingSystem.Runtime.InteropServices;namespaceLemony.SystemInfo{//系统信息类-获取CPU、内存、磁盘、进程信息///publicclassSystemInfo{privateintm_ProcessorCount=0;// 阅读全文
POSTED @   2011-12-09 16:36  KEVIN GAO 阅读(163) |   评论 (0)   编辑
SYSTEM32 下的几乎所有文件的简单说明
摘要: aclui.dll .....Security Descriptor Editor,没有它,注册表编缉器会无法运行ACTIVEDS.DLL .....(ADs 路由层 DLL). 没有它, 打开事件查看器会出错ADSLDPC.DLL ......ADs LDAP 提供程序 C DLLADVAPI32.DLL .....(高级 Windows 32 基本 API)...这个 avicap32.dll 用于将从数码摄像头捕获的视频另存为 AVI 格式. 如果你正在录制视频或是正在视频聊天, 那么你将服务终止这个进程ADVPACK.DLL ......(Advpack Library). Windo 阅读全文
POSTED @   2011-12-08 09:18  KEVIN GAO 阅读(37) |   评论 (0)   编辑
用C#实现智能设备上的NotifyIcon类
摘要: 前几天有网友问.NET CF中怎么实现NotifyIcon,我这才知道原来.NET CF并没有提供NotifyIcon控件。 于是偶想PC上可以用Shell_NotifyIcon和MessageWindow来实现托盘图标,只是不知道.NET CF支持不支持这两个东东了。仔细看了一下.NET CF中可疑的命名空间,没想到在Microsoft.WindowsCE.Forms命名空间里面竟然有一个MessageWindow 类,太好了,只剩下一个Shell_NotifyIcon 函数了。接着 在Window CE的SDK的帮助文件里,又发现Window CE Platform API已经包含了She 阅读全文
POSTED @   2011-12-08 09:14  KEVIN GAO 阅读(29) |   评论 (0)   编辑
C# API 如何保证使用托管对象的平台调用成功
摘要: 三、如何保证使用托管对象的平台调用成功?如果在调用平台 invoke 后的任何位置都未引用托管对象,则垃圾回收器可能将完成该托管对象。这将释放资源并使句柄无效,从而导致平台invoke 调用失败。用 HandleRef 包装句柄可保证在平台 invoke 调用完成前,不对托管对象进行垃圾回收。例如下面:FileStream fs = new FileStream( "a.txt", FileMode.Open );StringBuilder buffer = new StringBuilder( 5 );int read = 0;ReadFile(fs.Handle, bu 阅读全文
POSTED @   2011-11-21 11:59  KEVIN GAO 阅读(58) |   评论 (0)   编辑
C# API 调用格式和参数类型
摘要: 一、调用格式using System.Runtime.InteropServices; //引用此名称空间,简化后面的代码//使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。[DllImport("user32.dll")]public static extern ReturnType FunctionName(type arg1,type arg2,...);//调用时与调用其他方法并无区别可以使用字段进一步说明特性,用逗号隔开,如:[ DllImport( "kernel32", EntryPoint= 阅读全文
POSTED @   2011-11-21 11:25  KEVIN GAO 阅读(139) |   评论 (0)   编辑
C#中判断系统的网络连接状态的方法
摘要: 在C#中可以使用多种方法来判断网络的连接状态,比如使用WIN32的API来判断,也可以直接Ping某个网址来判断。下面来介绍下我最进行写的一个判断网络连接的方法类,使用了Wine32的API函数与Ping.Send结合的方法,代码如下:using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;using System.Net.NetworkInformation;namespace TestNetConnectWin32{ public class . 阅读全文
POSTED @   2011-11-18 12:14  KEVIN GAO 阅读(430) |   评论 (0)   编辑
如何在C#中使用Win32和其他库之三
摘要: 具有内嵌字符数组的结构某些函数接受具有内嵌字符数组的结构。例如,GetTimeZoneInformation() 函数接受指向以下结构的指针:typedef struct _TIME_ZONE_INFORMATION { LONG Bias; WCHAR StandardName[ 32 ]; SYSTEMTIME StandardDate; LONG StandardBias; WCHAR DaylightName[ 32 ]; SYSTEMTIME DaylightDate; LONG ... 阅读全文
POSTED @   2011-11-09 18:00  KEVIN GAO 阅读(64) |   评论 (0)   编辑
如何在C#中使用Win32和其他库之二
摘要: 简单字符串下面是一个接受字符串参数的函数的简单示例:BOOL GetDiskFreeSpace( LPCTSTR lpRootPathName, // 根路径 LPDWORD lpSectorsPerCluster, // 每个簇的扇区数 LPDWORD lpBytesPerSector, // 每个扇区的字节数 LPDWORD lpNumberOfFreeClusters, // 可用的扇区数 LPDWORD lpTotalNumberOfClusters // 扇区总数);根路径定义为 LPCTSTR。这是独立于平台的字符串指针。由于不... 阅读全文
POSTED @   2011-11-09 17:58  KEVIN GAO 阅读(61) |   评论 (0)   编辑
如何在C#中使用 Win32和其他库
摘要: 如何在C#中使用 Win32和其他库 这一次我们将深入探讨如何在 C# 中使用 Win32 和其他现有库。 C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大。他们没有足够的资源为所有 Win32 API 编写托管接口、加以测试并编写文档,因此只能优先处理最重要的部分。许多常用操作都有托管接口,但是还有许多完整的 Win32 部分没有托管接口。 ... 阅读全文
POSTED @   2011-11-09 17:57  KEVIN GAO 阅读(96) |   评论 (0)   编辑
C# 实现屏幕键盘 (ScreenKeyboard)
摘要: 要实现一个屏幕键盘,需要监听所有键盘事件,无论窗体是否被激活。因此需要一个全局的钩子,也就是系统范围的钩子。什么是钩子(Hook) 钩子(Hook)是Windows提供的一种消息处理机制平台,是指在程序正常运行中接受信息之前预先 启动的函数,用来检查和修改传给该程序的信息,(钩子)实际上是一个处理消息的程序段,通 过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获 该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不 作处理而继续传递该消息,还可以强制结束消息的传递。注意:安装钩子函数将会影响系统的性 能。监测“系统范围事件”的 阅读全文
POSTED @   2011-11-06 20:06  KEVIN GAO 阅读(130) |   评论 (0)   编辑
Windows API 技巧集
摘要: 一)不规则窗口 Windows提供的只是标准的矩形窗口,要想建立一个不规则的窗口就需要调用API函数来实现。建立一个不规则的窗口,一般是先用创建区域的API函数建立一个不规则的区域,再用API函数SetWindowRgn改变窗口的区域。这些API函数在C++ Builder中包含在头文件wingdi.h和winuser.h里面,因此,要使用这些API函数就要先在程序头部加上包含头文件的语句:include <wingdi.h>include <winuser.h> SetWindowRgn函数能改变一个窗口的区域,该函数有三个参数,第一个参数hWnd是欲设置区域的窗口句 阅读全文
POSTED @   2011-11-06 19:59  KEVIN GAO 阅读(106) |   评论 (0)   编辑
关于句柄的一些知识
摘要: 控制(control)、字体(font)、资源(resource),包括图标(icon),光标 (cursor),字符串(string)等、GDI对象(GDI object),包括位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域 (region),以及设备描述表(device context)。 <<WINDOWS编程短平快>>(南京大学出版社): 句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等. 阅读全文
POSTED @   2011-11-06 19:53  KEVIN GAO 阅读(48) |   评论 (0)   编辑
纯C#钩子实现及应用
摘要: 关于钩子请参见微软中国社区中《HOOK专题》一文。纯C#钩子(Hook)实现要实现系统钩子其实很简单,调用三个Win32的API即可。SetWindowsHookEx 用于设置钩子。(设立一道卡子,盘查需要的信息)[DllImport("user32.dll",CallingConvention=CallingConvention.StdCall)]publicstaticexternIntPtrSetWindowsHookEx(WH_CodesidHook,HookProclpfn,IntPtrpInstance,intthreadId);CallNextHookEx 用 阅读全文
POSTED @   2011-11-03 10:06  KEVIN GAO 阅读(117) |   评论 (0)   编辑
Windows_API_函数 参考大全
摘要: 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接 WNetAddConnection2 创建同一个网络资源的连接 WNetAddConnection3 创建同一个网络资源的连接 WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接 WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接 WNetEnumResource 枚 阅读全文
POSTED @   2011-11-03 09:05  KEVIN GAO 阅读(167) |   评论 (0)   编辑
操作ini文件的公共类
摘要: 以前我提供了一个操作ini文件的类,但是是VB.net版本。以下是我转载的一个C#版本的操作ini文件的类。这里是一个通过调用Windows API来操作ini文件的一个公共类,并用托管代码进行了封装,提供了对ini文件的增删查改功能。using System;using System.IO;using System.Text;using System.Runtime.InteropServices;public class IniFiles{ public delegate void EventHandler(object sender, EventArgs e); public event 阅读全文
POSTED @   2011-11-01 14:53  KEVIN GAO 阅读(52) |   评论 (0)   编辑
解决绘图中闪烁的问题(C#)
摘要: 如果你在Form中绘图的话,不论是不是采用的双缓存,都会看到图片在更新的时候都会不断地闪烁,解决方法就是在这个窗体的构造函数中增加以下三行代码:请在构造函数里面底下加上如下几行:SetStyle(ControlStyles.UserPaint, true);SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲参数说明:UserPaint 如果为 true,控件将自行绘制,而不是通过操作系统来绘制。此样式仅适用于派生自 Con 阅读全文
POSTED @   2011-10-31 23:26  KEVIN GAO 阅读(211) |   评论 (0)   编辑
c# 判断网络是否连接
摘要: win32 API函数的做法: 要用的函数:InternetGetConnectedState 函数原形:BOOL InternetGetConnectedState(LPDWORD lpdwFlags,DWORD dwReserved); 参数lpdwFlags返回当前网络状态,参数dwReserved依然是保留参数,设置为0即可。 INTERNET_CONNECTION_MODEM 通过调治解调器连接网络 INTERNET_CONNECTION_LAN 通过局域网连接网络 这个函数的功能是很强的。它可以: 1. 判断网络连接是通过网卡还是通过调治解调器 2. 是否通过代理上网 ... 阅读全文
POSTED @   2011-10-31 23:21  KEVIN GAO 阅读(458) |   评论 (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文件")]方法的声明; [DllImport("user32.dll")]private static extern bool ShowWindow(IntPtr hWnd, int   阅读全文
POSTED @   2011-10-30 20:55  KEVIN GAO 阅读(168) |   评论 (0)   编辑
在C#中SendMessage和PostMessage的参数传递
摘要: 用 PostMessage、SendNotifyMessage、SendMessageCallback 等异步函数发送系统消息时,参数里不可以使用指针,因为发送者并不等待消息的处理就返回,接受者还没处理指针就已经被释放了。 5、在 Windows 2000/XP 里,每个消息队列最多只能存放 10,000 个 Post 的消息,超过的还没被处理的将不会被处理,直接丢掉。这个值可以改得更大:[HKEY_LOCAL_MACHINE/SOFTWARE/ Microsoft/Windows NT/CurrentVersion/Windows] USERPostMessageLimit,最小可以是... 阅读全文
POSTED @   2011-10-30 20:35  KEVIN GAO 阅读(1804) |   评论 (1)   编辑
C#中在窗体间使用消息来处理相关联的事件
摘要: 在项目中有这样的需求,在主窗体隐藏时或者主进程运行时对其它窗体的控件或者事件进行控制,而且其它窗体是处于活动状态,而主窗体或者主进程是隐藏在后面的。这个时候使用句柄和消息来处理就比较好解决这些问题了,当然了也可以使用其它方法。比如将其它窗体在主窗体中申明并且定义,使之和主窗体一样一直存在于内存中,在各个窗体中申明公共方法,在主进程需要调用时直接调用即可,但是这样耗费了大量的系统资源。现在使用消息来解决这个问题。下面提供一个小程序,在主窗体中通过句柄和消息来控制子窗体中Label上文字变化和颜色,代码如下:Windowns的API类usingSystem;usingSystem.Runtime. 阅读全文