windows窗口API
WindowsAPI常用函数
WindowsAPI常⽤函数.Net中虽然类库很强的,但还是有些时候功能有限,掌握常⽤的api函数,会给我们解决问题提供另⼀种思路,下⾯给出⾃⼰常⽤到的Api函数,以备查询。
1,SetForegroundWindow将窗⼝显⽰到最前⾯,前提是窗⼝没有最⼩化。
[DllImport("User32.dll")]public static extern bool SetForegroundWindow(IntPtr hWnd);2,ShowWindowAsync显⽰窗⼝,如最⼩化后显⽰正常,这是异步的。
[DllImport("User32.dll")]public static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);public enum ShowState : int{SW_HIDE = 0,SW_SHOWNORMAL = 1,SW_NORMAL = 1,SW_SHOWMINIMIZED = 2,SW_SHOWMAXIMIZED = 3,SW_MAXIMIZE = 3,SW_SHOWNOACTIVATE = 4,SW_SHOW = 5,SW_MINIMIZE = 6,SW_SHOWMINNOACTIVE = 7,SW_SHOWNA = 8,SW_RESTORE = 9,SW_SHOWDEFAULT = 10,SW_FORCEMINIMIZE = 11,SW_MAX = 11}3,SendMessage进程间通信,接受窗⼝要有消息循环才⾏。
WM_COPYDATApublic const int WM_COPYDATA = 0x004A;public struct COPYDATASTRUCT{public IntPtr dwData;public int cbData;[MarshalAs(UnmanagedType.LPStr)]public string lpData;}[DllImport("User32.dll", EntryPoint = "SendMessage")]public static extern int SendMessage(IntPtr hWnd, // handle to destination windowint Msg, // messageint wParam, // first message parameterref COPYDATASTRUCT lParam // second message parameter);例⼦:发送⽅:byte[] sarr = System.Text.Encoding.Default.GetBytes(args[0]);Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();copyData.cbData = sarr.Length + 1;copyData.lpData = args[0];copyData.dwData = (IntPtr)100; //这⾥随便写什么数字Winn32.SendMessage(runningInstance.MainWindowHandle, Winn32.WM_COPYDATA, 0, ref copyData);接收⽅protected override void DefWndProc(ref Message m){if (m.Msg == Winn32.WM_COPYDATA){Winn32.COPYDATASTRUCT copyData = new Winn32.COPYDATASTRUCT();Type type = copyData.GetType();copyData = (Winn32.COPYDATASTRUCT)m.GetLParam(type);this.textBox1.Text = copyData.lpData;}base.DefWndProc(ref m);}4,FindWindow找到窗⼝句柄[DllImport("User32.dll", EntryPoint = "FindWindow")]private static extern int FindWindow(string lpClassName, string lpWindowName);5,SetLocalTime设定系统时间[StructLayout(LayoutKind.Sequential)]public struct SYSTEMTIME{public ushort wYear;public ushort wMonth;public ushort wDayOfWeek;public ushort wDay;public ushort wHour;public ushort wMinute;public ushort wSecond;public ushort wMilliseconds;public void FromDateTime(DateTime dateTime){wYear = (ushort)dateTime.Year;wMonth = (ushort)dateTime.Month;wDayOfWeek = (ushort)dateTime.DayOfWeek;wDay = (ushort)dateTime.Day;wHour = (ushort)dateTime.Hour;wMinute = (ushort)dateTime.Minute;wSecond = (ushort)dateTime.Second;wMilliseconds = (ushort)lisecond;}public DateTime ToDateTime(){return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond); }}[DllImport("kernel32.dll")]public static extern bool SetLocalTime(ref SYSTEMTIME Time);6,SHGetFileInfo获取执⾏⽂件的图标icon[Flags]enum SHGFI : int{/// <summary>get icon</summary>Icon = 0x000000100,/// <summary>get display name</summary>DisplayName = 0x000000200,/// <summary>get type name</summary>TypeName = 0x000000400,/// <summary>get attributes</summary>Attributes = 0x000000800,/// <summary>get icon location</summary>IconLocation = 0x000001000,/// <summary>return exe type</summary>ExeType = 0x000002000,/// <summary>get system icon index</summary>SysIconIndex = 0x000004000,/// <summary>put a link overlay on icon</summary>LinkOverlay = 0x000008000,/// <summary>show icon in selected state</summary>Selected = 0x000010000,/// <summary>get only specified attributes</summary>Attr_Specified = 0x000020000,/// <summary>get large icon</summary>LargeIcon = 0x000000000,/// <summary>get small icon</summary>SmallIcon = 0x000000001,/// <summary>get open icon</summary>OpenIcon = 0x000000002,/// <summary>get shell size icon</summary>ShellIconSize = 0x000000004,/// <summary>pszPath is a pidl</summary>PIDL = 0x000000008,/// <summary>use passed dwFileAttribute</summary>UseFileAttributes = 0x000000010,/// <summary>apply the appropriate overlays</summary>AddOverlays = 0x000000020,/// <summary>Get the index of the overlay in the upper 8 bits of the iIcon</summary> OverlayIndex = 0x000000040,}[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]public struct SHFILEINFO{public SHFILEINFO(bool b){hIcon = IntPtr.Zero;iIcon = 0;dwAttributes = 0;szDisplayName = "";szTypeName = "";}public IntPtr hIcon;public int iIcon;public uint dwAttributes;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]public string szDisplayName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]public string szTypeName;};[DllImport("shell32.dll", CharSet = CharSet.Unicode)]//路径有中⽂字符,要⽤unicodepublic static extern int SHGetFileInfo(string pszPath,int dwFileAttributes,out SHFILEINFO psfi,uint cbfileInfo,SHGFI uFlags);例⼦:private static Icon GetIcon(string strPath, bool bSmall){SHFILEINFO info = new SHFILEINFO(true);int cbFileInfo = Marshal.SizeOf(info);SHGFI flags;if (bSmall)flags = SHGFI.Icon | SHGFI.SmallIcon | eFileAttributes;elseflags = SHGFI.Icon | rgeIcon;Win32API.SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);return Icon.FromHandle(info.hIcon);}7,GetWindowThreadProcessId得到句柄的进程和线程ID,返回的是线程ID,ref返回的是进程ID[System.Runtime.InteropServices.DllImport("User32.dll")]private static extern int GetWindowThreadProcessId(int Hwnd, ref int OutPressId);例⼦:杀死excel进程int processID = 0;int threadID;threadID = GetWindowThreadProcessId(excelApp.Hwnd, ref processID);if (processID > 0){System.Diagnostics.Process process = System.Diagnostics.Process.GetProcessById(processID); if (process != null){ process.Kill(); }}。
windows api 关闭窗口的方法
windows api 关闭窗口的方法一、引言Windows API是微软为开发者提供的一套用于与操作系统进行交互的接口,它广泛应用于Windows应用程序的开发。
关闭窗口是Windows应用程序中常见的操作之一。
本文将介绍如何使用Windows API关闭窗口。
二、关闭窗口的方法关闭窗口通常涉及到调用Windows API函数,其基本步骤如下:1. 打开窗口句柄在调用其他API函数关闭窗口之前,需要先获取窗口的句柄。
可以使用`FindWindow`或`OpenWindow`等函数来获取窗口句柄。
2. 判断窗口是否处于激活状态在关闭窗口之前,需要先判断窗口是否处于激活状态。
可以使用`IsWindowEnabled`函数来检查窗口是否被禁用。
3. 调用关闭窗口的API函数一旦确认窗口处于激活状态且未被禁用,就可以调用相应的API 函数来关闭窗口。
常用的API函数包括`PostMessage`、`SendMessage`、`DestroyWindow`等。
其中,`DestroyWindow`函数可以直接销毁窗口并释放资源。
三、示例代码以下是一个简单的示例代码,演示如何使用Windows API关闭窗口:```c++#include <windows.h>int main() {// 打开窗口句柄HWND hwnd = FindWindow(NULL, "窗口标题");if (hwnd == NULL) {// 找不到窗口,处理错误return -1;}// 判断窗口是否处于激活状态if (!IsWindowEnabled(hwnd)) {// 窗口被禁用,处理错误return -2;}// 调用关闭窗口的API函数DestroyWindow(hwnd);return 0;}```需要注意的是,以上代码仅为示例,实际应用中需要根据具体情况进行修改和完善。
例如,需要添加错误处理代码,以确保程序的稳定性和可靠性。
WindowsAPI编程入门
WindowsAPI编程⼊门Windows ⼯作原理的中⼼思想就是“动态链接”概念。
Windows ⾃⾝带有⼀⼤套函数,应⽤程序就是通过调⽤这些函数来实现它的⽤户界⾯和在屏幕上显⽰⽂本和图形的。
这些函数都是在动态链接库⾥实现的。
这些⽂件的名称都带有后缀 .dll,或有时带有 .exe。
Windows 的 3 个主要⼦系统:内核(kernel),⽤户(user),GDI。
内核负责操作系统的传统⼯作:如内存管理,⽂件输⼊/输出以及任务管理等。
⽤户指的是⽤户界⾯,负责所有的窗⼝管理。
GDI 就是图形设备接⼝,负责在屏幕或打印机上显⽰⽂本与图形。
在 Windows 程序中,调⽤ Windows 函数与调⽤ C 语⾔的库函数没有什么两样。
最主要的区别就是 C 语⾔库函数的机器代码会直接链接到你的程序代码中去,⽽ Windows 函数则是放到你的程序之外的 DLL ⾥。
Windows 程序运⾏时,它通过⼀个叫“动态链接”的进程与 Windows 接⼝。
每个 Windows 的 EXE ⽂件包含它所要⽤到的各个动态链接库以及库中的函数的引⽤地址。
当⼀个 Windows 程序被装⼊内存后,程序中的函数调⽤都被解析 DLL 函数⼊⼝的指针,同时这些被调⽤的函数也被装⼊内存。
当链接 Windows 程序以⽣存可执⾏⽂件时,⼀定得链接你的编程环境所提供的特殊的“导⼊库”。
这些导⼊库包含所有 Windows 函数调⽤要碰到的动态链接库的名字及引⽤信息。
链接程序利⽤这些信息构建 EXE ⽂件中的表格,当装⼊程序的时候,Windows 要靠这些表格来解析 Windows 函数调⽤。
另外值得提醒的⼀点是,MFC 是对 API 的封装,隐藏了许多复杂的情节。
Windows 的 Hello World!程序:#include <windows.h>int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow){MessageBox (NULL, TEXT ("Hello, World!"), TEXT ("HelloMsg"), MB_OKCANCEL) ;return0 ;}该程序的 #include<windows.h> 就是像 C 语⾔的 #include<stdio.h> ⼀样重要的头⽂件。
windows_api_帮助文档
编者目录第一章Win32 API概论 (1)1.1 为什么使用Win32 API (1)1.2 Win32 API简介 (1)1.3 综述 (11)第二章窗口管理函数(Windows Control Function) (13)2.1 易用特性函数(Accessibility Features) (13)2.2 按钮函数(Button) (20)2.3 插入标记(^)函数(Caret) (21)2.4 组合框函数(Combo box) (24)2.5 通用对话框函数(Common Dialog Box) (25)2.6 标函数(Cursor) (36)2.7 对话框函数(Dialog Box) (40)2.8 编辑控制函数(Edit Control) (54)2.9 图标函数(Icon) (54)2.10 键盘加速器函数(Keyboard Accelerator) (61)2.11 键盘输入函数(Keyboard InPut) (63)2.12 列表框函数(List box) (75)2.13 菜单函数(Menu) (76)2.14 消息和消息队列函数(Message and Message Queue) (90)2.15 鼠标输入函数(Mouse Input) (100)2.16 多文档接口函数(Multiple Document Interface) (103)2.17 资源函数(Resource) (105)2.18 滚动条函数(Scroll Bar) (113)2.19 窗口函数(Window) (119)2.20 窗口类函数(Window Class) (144)2.21 窗口过程函数(Window Procedure) (150)2.22 窗口属性函数(Window Property) (152)第三章图形设备接口函数(Graphic Device Interface Function) (155)3.1 位图函数(Bitmap) (155)3.2 笔刷函数(Brush) (171)3.3 剪切函数(Clipping) (176)3.4 颜色函数(Color) (179)3.5 坐标空间与变换函数(Coordinate Space Transformation) (186)3.6 设备环境函数(Device Context) (195)3.7 填充形态函数(Filled shape) (211)3.8 字体和正文函数(Font and Text) (215)3.9 ICM 2.0函数 (238)3.10 线段和曲线函数(Line and Curve) (295)3.11 图元文件函数(Metafile) (300)3.12 多显示器函数(Multiple Display Monitors) (311)3.13 绘图函数和画图函数(Painting and Drawing) (313)3.14 路径函数(Path) (328)3.15 画笔函数(Pen) (332)3.16 打印及打印假脱机程序函数(Printing and Print Spooler) (334)3.17 矩形函数(Rectangle) (371)3.18 区域函数(Region) (374)第四章系统服务函数(System Service Function) (383)4.1 访问控制函数(Access Control) (383)4.2 原子函数(Atom) (406)4.3 客户/服务器访问控制函数(Client/Server Access Control) (409)4.4 剪贴板函数(Clipboard) (431)4.5 通信函数(Communication) (436)4.6 控制台函数(Console) (444)4.7 数据解压库函数(Data Decompression Library) (463)4.8 调试函数(Debugging) (466)4.9 设备输入输出函数(Device Input and Output) (472)4.10 动态数据交换函数(Dynamic Data Exchange) (474)4.11 动态数据交换管理函数(Dynamic Data Exchange Management) (476)4.12 动态链接库函数(Dynamic-Link Library) (489)4.13 错误函数(Error) (496)4.14 事件日志函数(Event Logging) (499)4.15 文件函数(File) (503)4.16 文件安装库函数(File Installation Library) (542)4.17 文件映射函数(File Mapping) (546)4.18 文件系统函数File System) (551)4.19 句柄和对象函数(Handle and Object) (556)4.20 挂钩函数(Hook) (560)4.21 ImageHlp函数 (572)4.22 大整数操作函数(Iarge Integer Operations) (594)4.23 低层访问控制函数(Low-Level Access Control) (596)4.24 LSAPI函数 (617)4.25 邮槽函数(Mailslot) (622)4.26 内存管理函数(Memory Management) (623)4.27 管道函数(Pipe) (655)4.28 电源管理函数(Power Management) (663)4.29 进程和线程函数(Process and Thread) (666)4.30 注册表函数(Registry) (700)4.31 字符串操作函数(String Manipulation) (724)4.32 结构化异常处理函数(Structured Exception Handling) (742)4.33 同步函数(Synchronization) (745)4.34 系统信息函数(System Information) (766)4.35 系统消息函数(System Message) (780)4.36 系统关机函数(System Shutdown) (781)4.37 磁带备份函数(Tape Backup) (783)4.38 时间函数(Time) (789)4.39 计时器函数(Timer) (795)4.40 工具帮助函数(Tool Help) (796)4.41 窗口站和桌面函数(Window Station and Desktop) (799)4.42 Windows NT 4.0访问控制函数(Window NT 4.0 Access-Control) (808)4.43 WinTrust函数(WinTrust) (814)第五章国际特性函数(International Peatures Punction)时性 (815)5.1 输入方法编辑函数(Input Method Editor) (815)5.2 国家语言支持函数(National Language Support) (828)5.3 Unicode和字符集函数(Unicode and Character Set) (843)第六章网络服务函数(Networding Service Function) (849)6.1 数据链路控制函数(DLC) (849)6.2 网络函数(Net) (849)6.3 NetBIOS函数 (896)6.4 网络DDE函数(Networking DDE) (897)6.5 RAS服务器管理函数(RAS Server Administration) (901)6.6 远程访问服务函数(Remote Access Administration) (910)6.7 服务函数(Service) (929)6.8 Windows网络函数(Windows Networking) (930)附录1 如何在VB中调用DLL API (945)1 DLL API的声明 (945)2 DLL API的调用 (947)附录2 在Delphi中直接调用Windows API (953)第一章Win32 API概论1.1为什么使用Wu32 API在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数。
用Windows API取得窗体句柄二例
用Windows API取得窗体句柄二例文/胡克Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在Windows API中具有举足轻重的作用,现举三例,有兴趣的读者不妨一试。
获取窗体和控件的句柄步骤如下:1、为了看到显示于屏幕上所有的窗体和控件的句柄,用SetWindowPos函数设置窗口始终在最上面,其他窗口不能覆盖它,并使其只以标题显示于屏幕左上角。
(1)新建一工程,打开API Viwer:Add-ins→API Viewer→File→Load text file→Win32api.txt。
(2)将SetWindowPos函数的声明粘贴到窗体的声明部分:Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long。
(3)程序启动时调用SetWindowPos函数,窗体Load事件代码如下:Private Sub Form_Load()SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, conSwpNoActivate Or conSwpShowWindow'使窗体一直置于最顶层End Sub卧龙传说提醒:当第二个参数hWndInsertAfter的值为-1时置于顶层;值为-2时不置于顶层。
2、为了找到鼠标指针的X和Y坐标,用上面同样的方法,通过API Viewer工具把获取的鼠标指针位置的API函数GetCursorPos的声明和结构类型声明粘贴到窗体的声明部分:Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Type POINTAPIx As Longy As Long。
windows api命名规格
windows api命名规格Windows API命名规范是微软公司为了提高代码可读性和维护性而制定的一系列规则,用于指导开发者在使用Windows API时的命名风格和约定。
本文将逐步回答关于Windows API命名规范的问题,并解释其重要性和实际应用。
问题1:什么是Windows API?Windows API(Application Programming Interface)是一套由操作系统提供的函数和过程,用于允许应用程序与底层操作系统交互。
Windows API为开发者提供了访问和控制Windows操作系统的能力,包括窗口管理、文件访问、网络通信等功能。
问题2:为什么需要命名规范?命名规范在软件开发中非常重要,它有助于提高代码的可读性和可维护性。
当多个开发者同时参与一个项目时,遵循统一的命名规范可以使代码更具一致性,降低理解和修改代码的难度。
此外,命名规范还有助于提高代码的可重用性和扩展性,减少错误和冲突的可能性。
问题3:有哪些常见的命名规范?Windows API命名规范主要包括以下几个方面:1. 前缀:Windows API函数通常以一个或多个字母作为前缀来表示它们所属的模块或子系统。
例如,以“Get”开头的函数通常用于获取某些信息,以“Create”开头的函数通常用于创建对象或资源。
2. 名称规则:函数名称应使用驼峰命名法,即单词首字母大写,并且去掉下划线分隔符。
例如,"CreateWindow"代表创建一个窗口,"SendMessage"代表发送消息。
3. 参数名称:参数名称应具有描述性,并且避免使用缩写或简写。
参数名称应该清晰地表示参数的含义和用途。
4. 常量命名:常量应使用全大写字母,并使用下划线分隔单词。
例如,"WM_CLOSE"代表窗口关闭消息。
5. 枚举命名:枚举类型应使用单数形式,并遵循驼峰命名法。
例如,"BorderStyle"代表边框样式的枚举类型。
什么是WinAPI
什么是WinAPI视窗操作系统应用程序接口(Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的内核应用程序编程接口的称法。
它设计为由C/C++程序调用,而且它也是应用软件与Windows系统最直接的交互方式。
而大多数驱动程序所需要的对Windows系统的更底层次访问接口,由所用版本的Windows的Native API来提供接口。
Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具,以使程序员开发使用Windows API 的软件和利用Windows技术。
历史Windows API总会为程序员提供大量的构建不同Windows的底层结构,这有助于为Windows程序员开发应用程序提供大量的灵活性和功能。
但是,它同样使Windows applications要负责处理大量底层且有时是繁琐的与图形用户界面(GUI)相关的操作。
Charles Petzold, 许多有关Windows API的畅销书的作者曾经说过:[1]“ The original hello-world program in the Windows 1.0 SDK was a bit of a scandal. HELLO.C was about 150 lines long, and the HELLO.RC resource script had another 20 or so more lines. (...) Veteran C programmers often curled up in horror or laughter when encountering the Windows hello-world program. ” —Charles Petzold, Programming Microsoft Windows with C#常用的例子程序Hello world程序,通常是用来演示一个系统上最简单的程序(即打印一行"Hello World")。
【分享】Windows API 手册
【分享】W i n d o w sA P I手册work Information Technology Company.2020YEARWindows API 手册1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称WNetGetUser 获取一个网络资源用以连接的名字WNetOpenEnum 启动对网络资源进行枚举的过程2. API之消息函数BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列字串2PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口SendMessageTimeout 向窗口发送一条消息SendNotifyMessage 向窗口发送一条消息3. API之文件处理函数CloseHandle 关闭一个内核对象。
windapi手册
windapi手册摘要:1.引言2.WindAPI 简介3.WindAPI 的功能4.WindAPI 的使用方法5.WindAPI 的示例6.WindAPI 的常见问题及解答7.总结正文:【引言】WindAPI 是一款非常实用的编程接口,它可以帮助开发者快速地实现各种功能。
在这篇文章中,我们将详细介绍WindAPI 的使用方法及其功能。
【WindAPI 简介】WindAPI,全称Windows API,是微软提供的一套用于开发Windows 应用程序的编程接口。
它包含了大量可用于实现各种功能的函数,涵盖了文件操作、内存管理、系统设置等多个领域。
通过使用WindAPI,开发者可以更加高效地编写代码,实现更加复杂的功能。
【WindAPI 的功能】WindAPI 具有丰富的功能,主要包括以下几个方面:1.文件操作:WindAPI 提供了大量文件操作相关的函数,如创建、删除、重命名、读取、写入等,方便开发者进行文件管理。
2.内存管理:WindAPI 提供了内存分配、释放以及数据拷贝等函数,帮助开发者轻松实现内存管理。
3.系统设置:WindAPI 提供了许多与系统设置相关的函数,如更改桌面背景、设置系统时间等。
4.用户界面:WindAPI 提供了许多用户界面相关的函数,如创建窗口、处理用户输入等,方便开发者构建用户界面。
5.其他功能:WindAPI 还包括许多其他功能,如注册表操作、网络通信、安全控制等,为开发者提供了强大的支持。
【WindAPI 的使用方法】要使用WindAPI,首先需要包含相应的头文件。
在C++中,通常需要包含<windows.h>头文件。
然后,通过调用相应的函数,即可实现所需功能。
在使用WindAPI 时,需要注意函数的返回值和参数,以确保正确地调用函数。
【WindAPI 的示例】以下是一个简单的使用WindAPI 的示例,用于创建一个窗口:```cpp#include <windows.h>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){WNDCLASS wc = {0};HWND hwnd;// 设置窗口类wc.lpfnWndProc = DefWindowProc;wc.hInstance = hInstance;wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);wc.lpszClassName = TEXT("MyWindowClass");// 注册窗口类RegisterClass(&wc);// 创建窗口hwnd = CreateWindow(TEXT("MyWindowClass"), TEXT("Hello, World!"), WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 300, 200, NULL, NULL, hInstance, NULL);// 显示窗口ShowWindow(hwnd, nCmdShow);// 消息循环MSG Msg;while (GetMessage(&Msg, NULL, 0, 0)){TranslateMessage(&Msg);DispatchMessage(&Msg);}return Msg.wParam;}```【WindAPI 的常见问题及解答】1.问题:调用WindAPI 函数时出现错误。
WindowsAPI函数大全(完整)
WindowsAPI函数⼤全(完整)Windows API函数⼤全,从事软件开发的朋友可以参考下1. API之⽹络函数WNetAddConnection 创建同⼀个⽹络资源的永久性连接WNetAddConnection2 创建同⼀个⽹络资源的连接WNetAddConnection3 创建同⼀个⽹络资源的连接WNetCancelConnection 结束⼀个⽹络连接WNetCancelConnection2 结束⼀个⽹络连接WNetCloseEnum 结束⼀次枚举操作WNetConnectionDialog 启动⼀个标准对话框,以便建⽴同⽹络资源的连接WNetDisconnectDialog 启动⼀个标准对话框,以便断开同⽹络资源的连接WNetEnumResource 枚举⽹络资源WNetGetConnection 获取本地或已连接的⼀个资源的⽹络名称WNetGetLastError 获取⽹络错误的扩展错误信息WNetGetUniversalName 获取⽹络中⼀个⽂件的远程名称以及/或者UNC(统⼀命名规范)名称WNetGetUser 获取⼀个⽹络资源⽤以连接的名字WNetOpenEnum 启动对⽹络资源进⾏枚举的过程2. API之消息函数BroadcastSystemMessage 将⼀条系统消息⼴播给系统中所有的顶级窗⼝GetMessagePos 取得消息队列中上⼀条消息处理完毕时的⿏标指针屏幕位置GetMessageTime 取得消息队列中上⼀条消息处理完毕时的时间PostMessage 将⼀条消息投递到指定窗⼝的消息队列PostThreadMessage 将⼀条消息投递给应⽤程序RegisterWindowMessage 获取分配给⼀个字串标识符的消息编号ReplyMessage 答复⼀个消息SendMessage 调⽤⼀个窗⼝的窗⼝函数,将⼀条消息发给那个窗⼝SendMessageCallback 将⼀条消息发给窗⼝SendMessageTimeout 向窗⼝发送⼀条消息SendNotifyMessage 向窗⼝发送⼀条消息3. API之⽂件处理函数CloseHandle 关闭⼀个内核对象。
Windows API函数与快捷键
Windows API函数与快捷键
吃饭的时候,碗是买的,而不是自己做的,不必懂得如何去制作,只需知道如何使用即可,API函数,就是系统本来有的功能,通过DLL命令直接使用,下面到易语言中来实战一下!
新建一个Windows窗口程序,点击程序,DLL如图:
右键,新建一个DLL命令,如图:
输入表格如下:
记住,DLL命令名可以随便你写,但在库中对应命令名,不能修改。
这条DLL就是所谓的子程序,如果某个键被按下,返回-32767。
完毕之后设计界面如下:
双击时钟组件进入代码编辑,输入代码:
.局部变量真假, 逻辑型, 静态
.如果真(GetAsyncKeyState (#F1键) =-32767)
真假=取反(真假)
.如果真结束
.判断开始(真假)
_启动窗口.可视=假
.默认
_启动窗口.可视=真
.判断结束
如图:
这样就实现了窗口的隐藏和显示。
《易语言开发文档》由学习吧原创,转载务必保留版权。
视频已经录制完成,请到论坛下载,有什么不懂,请大胆提问,或许会有答案. 学习吧论坛:
易语言QQ群:
一群:214542668
二群:122533855。
Python使用WindowsAPI创建窗口示例【基于win32gui模块】
Python使用 WindowsAPI创建窗口示例【基于 win32gui模块】
本文实例讲述了Python使用Windows API创建窗口。分享给大家供大家参考,具体如下:
一、代码
# -*- coding:utf-8 -*#! python3 import win32gui from win32con import * def WndProc(hwnd,msg,wParam,lParam):
if msg == WM_PAINT: hdc,ps = win32gui.BeginPaint(hwnd) rect = win32gui.GetClientRect(hwnd) win32gui.DrawText(hdc,'GUI Python',len('GUI Python'),rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER) win32gui.EndPaint(hwnd,ps)
二、运行结果:
更多关于Python相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》及《》
希望本文所述对大家Python程序设计有所帮助。
if msg == WM_DESTROY: win32gui.PostQuitMessage(0)
return win32gui.DefWindowProc(hwnd,msg,wParam,lParam) wc = win32gui.WNDCLASS() wc.hbrBackground = COLOR_BTNFACE + 1 wc.hCursor = win32gui.LoadCursor(0,IDI_APPLICATION) wc.lpszClassName = "PyndProc reg = win32gui.RegisterClass(wc) hwnd = win32gui.CreateWindow(reg,' - Python',WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,0,None) win32gui.ShowWindow(hwnd,SW_SHOWNORMAL) win32gui.UpdateWindow(hwnd) win32gui.PumpMessages()
用Windows API取得窗体句柄二例
h&& = GetFocus&&()
Debug.Print h&
End Sub
End Sub
卧龙传说提醒:当第二个参数hWndInsertAfter的值为-1时置于顶层;值为-2时不置于顶层。
2、为了找到鼠标指针的X和Y坐标,用上面同样的方法,通过API Viewer工具把获取的鼠标指针位置的API函数GetCursorPos的声明和结构类型声明粘贴到窗体的声明部分:
Private Sub Timer1_Timer()
Dim xy As POINTAPI'(声明变量类型)
GetCursorPos xy'(取得XY的座标)
ahwnd = WindowFromPointXY(xy.x, xy.y) '(取得当前鼠标坐标下窗口的句柄)
(2)将SetWindowPos函数的声明粘贴到窗体的声明部分:Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long。
(3)程序启动时调用SetWindowPos函数,窗体Load事件代码如下:
Private Sub Form_Load()
SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, conSwpNoActivate Or conSwpShowWindow'使窗体一直置于最顶层
windows api 用法
windows api 用法
Windows API是指Windows操作系统开发的接口,用于控制系统内的各种应用。
以下是Windows API的用法示例:
```vb
Private Declare Sub Sleep Lib "kernel32" (ByVal dw Milliseconds As Long) ```
上述代码中的关键字和参数含义如下:
- Private:声明在窗体的通用部分,表示这个窗体的任何地方都可以调用。
- Declare:表示要声明API。
- Sub:是一个过程,没有返回值。
- Sleep:是API的名称,相当于过程的名字,从字面上来看是“睡眠”的意思,在这里是让系统延时。
- dw Milliseconds:参数为毫秒,即暂停运行的时间,1秒=1000毫秒。
通过调用Windows API,开发人员可以在编程中实现更强大的功能和更复杂的操作,如果你想了解更多关于Windows API的用法,可以继续向我提问。
使用JNA访问WindowsAPI操作Windows窗口元素
使⽤JNA访问WindowsAPI操作Windows窗⼝元素问题背景:我的毕业设计中需要在Windows平台上⾯跨进程操作窗⼝。
实际上是获取浏览器上⾯的⽹页中的⽂本框元素,还有windows32窗体上⾯的编辑框。
然后进⾏⾃动填值等的操作。
我能想到的⼀共有这么⼏种⽅法:使⽤C#编写窗体应⽤程序,然后使⽤WebBrowser浏览器控件或者嵌⼊其他应⽤程序窗⼝。
如果使⽤WebBrowser控件,只能强制⽤户使⽤该C#应⽤程序上⽹,影响⽤户体验,不切实际。
如果使⽤嵌⼊其他应⽤程序窗⼝的⽅式,其实就转化为了跨进程获取窗⼝的⽅法了。
使⽤浏览器插件的⽅式,针对不同浏览器编写不同插件,然后让⽤户安装。
当浏览器页⾯载⼊后,使⽤驻留程序(这是我毕设的核⼼进程)向浏览器发消息,执⾏浏览器插件中的JS代码操作⽹页DOM元素。
但是缺点是需要编写很多插件,且调试起来,真正执⾏起来很艰难。
先使⽤远程线程注⼊到⽬标进程的线程空间,创建⼀个虚拟线程,然后执⾏这个虚拟线程,向拥有这个窗⼝的界⾯线程发送消息。
实际上这个⽅法和上⾯的⽅法⼤同⼩异。
只不过进程注⼊⾏为会被⽤户系统的安全机制检测到,类似360安全卫⼠这种神经质的安全软件会让⽤户把我们的程序查杀掉。
另外需要针对各种浏览器,各种程序窗体做特定的分析处理,代价太⼤,⽽我只不过是完成⼀个毕设,没必要⽤⽜⼑吧。
使⽤模拟⽤户操作⽅式。
先拿简单的⽅法说,很多脚本语⾔例如在Windows上⾯的VBS脚本执⾏时会启动WScript驻留进程,使⽤VBS的sendKey命令可以模拟⽤户的输⼊,甚⾄VBS能模拟⽤户⿏标的点击。
还可以使⽤Python,JS(需要先让⽤户下载python)等都可以。
他们的核⼼其实都是调⽤Windows系统API来完成功能,从结构上来看都是要运⾏⼀个本地即时解释器,它可以调⽤WindowsAPI,然后解释脚本执⾏操作。
再说深层次⼀点就是先获取⽬标窗⼝的句柄,然后对该窗体的消息处理队列发送WM_SET_TEXT,WM_GET_TEXT,WM_EXIT等各种消息。
如何通过句柄获取外部程序的窗口的内容
如何通过句柄获取外部程序的窗口的内容要通过句柄获取外部程序的窗口内容,可以使用Windows API函数来实现。
具体步骤如下:
1. 使用Windows API函数`FindWindow`或`FindWindowEx`来查找目标窗口的句柄。
`FindWindow`可以根据窗口类名或窗口标题查找句柄,`FindWindowEx`可以根据父窗口句柄和窗口类名查找句柄。
如果获取到了目标窗口的句柄,继续下一步;否则,表示未找到目标窗口。
2. 使用Windows API函数`GetWindowTextLength`和
`GetWindowText`来获取目标窗口的文本内容。
`GetWindowTextLength`用于获取文本内容的长度,`GetWindowText`用于获取实际文本内容。
可以先使用`GetWindowTextLength`来获取文本长度,然后创建一个对应长度的缓冲区,再使用`GetWindowText`来获取文本内容。
3. 可以使用其他Windows API函数来获取窗口的其他信息,如
`GetClassName`获取窗口的类名,`GetWindowRect`获取窗口的位置和大小等。
需要注意的是,使用Windows API函数需要导入`user32.dll`库,并且可以使用C++、C#、Python等编程语言进行开发。
使用不同编程语言,具体API函数的调用方式会有所差异。
WindowsAPI大全
WindowsAPI大全API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
什么是windows APIWindows API是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windo ws函数.用户的每个动作都会引发一个或几个函数的运行以告诉Wind ows发生了什么.这在某种程度上很象Windows的天然代码.其他的语言只是提供一种能自动而且更容易的访问API的方法.VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法. 这也就是说,你用VB写出的每行代码都会被VB转换为API 函数传递给Windows.例如,Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数. 。
同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Butt on_Click).API函数包含在Windows系统目录下的动态连接库文件中(如Us er32.dll,GDI32.dll,Shell32.dll...).API 声明正如在"什么是API"中所说,API函数包含在位于系统目录下的DLL 文件中.你可以自己输入API函数的声明,但VB提供了一种更简单的方法,即使用API Text Viewer. 要想在你的工程中声明API函数,只需运行API Text Viewer,打开Win32api.txt(或.MDB如果你已经把它转换成了数据库的话,这样可以加快速度.注:微软的这个文件有很多的不足,你可以试一下本站提供下载的api32.txt),选择"声明",找到所需函数,点击"添加(Add)"并"复制(Copy)",然后粘贴(Paste)到你的工程里.使用预定义的常量和类型也是同样的方法.你将会遇到一些问题:假设你想在你的窗体模块中声明一个函数.粘贴然后运行,VB会告诉你:编译错误...Declare 语句不允许作为类或对象模块中的Public 成员...看起来很糟糕,其实你需要做的只是在声明前面添加一个Private(如 Private Declare Function...).--不要忘了,可是这将使该函数只在该窗体模块可用. 在有些情况下,你会得到"不明确的名称"这样的提示,这是因为函数.常量或其他的什么东西共用了一个名称.由于绝大多数的函数(也可能是全部,我没有验证过)都进行了别名化,亦即意味着你可以通过Alias子句使用其它的而不是他们原有的名称,你只需简单地改变一下函数名称而它仍然可以正常运行.API 分为四种类型:远程过程调用(RPC):通过作用在共享数据缓存器上的过程(或任务)实现程序间的通信。
深入浅出 windows api 程序设计
深入浅出windows api 程序设计全文共四篇示例,供读者参考第一篇示例:深入浅出Windows API程序设计Windows API是Windows操作系统所提供的一组接口,允许开发者与操作系统进行交互,控制、管理和定制系统资源。
通过调用Windows API,开发者可以实现各种功能,包括但不限于文件操作、窗口管理、内存管理、网络通信等等。
深入掌握Windows API程序设计,可以让开发者更加灵活地处理系统资源,提高程序性能和用户体验。
本文将通过实例介绍Windows API程序设计的基本原理和常用技巧,帮助读者快速上手和深入了解Windows API。
Windows API是一组由微软公司定义和支持的应用程序编程接口,包括了一系列的函数、结构体和常量。
开发者可以通过调用这些接口,实现对操作系统资源的操作和控制。
Windows API可以分为用户界面API和系统服务API两类。
用户界面API包括了一系列函数,用于创建、管理和处理用户界面元素,如窗口、按钮、菜单等。
其中最常用的函数包括CreateWindow、SendMessage、GetDlgItem、SetWindowText 等。
系统服务API则包括了一系列函数,用于访问系统资源和执行系统级操作,如文件操作、注册表访问、进程管理等。
常用的系统服务API函数包括CreateFile、RegOpenKey、EnumProcesses等。
Windows API程序设计的基本原理是通过调用API函数,与操作系统进行交互并控制系统资源。
在使用Windows API进行程序设计时,需要注意以下几点:1. 导入API函数:在使用Windows API时,需要先导入对应的API函数。
可以通过声明函数原型的方式告诉编译器需要调用的函数及其参数,然后利用LoadLibrary和GetProcAddress函数来获取函数的地址。
2. 创建消息循环:在Windows程序中,消息循环是至关重要的部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BOOL UpdateWindow(HWND hWnd);
消息循环代码:
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻译消息
DispatchMessage(&Msg);//分派消息
}
Windows为消息定义一种新的数据类型MSG,用于保存消息的相关信息。在windows中GetMessage函数从消息队列种取得消息,
{
char *cName = "myWindow";
WNDCLASSEX wc;
HWND hWnd;
MSG Msg;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.cbSize = sizeof(WNDCLASSEX);
int cbWndExtra; //记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA
HINSTANCE hInstance; //句柄
HICON hIcon; //窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。
HMENU hMenu, //菜单句柄,或依据窗口风格指明一个子窗口标识。
HINSTANCE hInstance, //与窗口相关联的模块事例的句柄。
LPVOID lpParam //指向一个值的指针,该值传递给窗口 WM_CREATE消息,返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。
DWORD dwStyle, //指定创建窗口的风格。
int x, //窗口的横坐标
int y, //窗口的竖坐标
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //
LPCTSTR lpszMenuName; //指向一个以NULL结尾的字符床,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。
LPCTSTR lpszClassName; //窗口类的名字,字符串类型。
WS_EX_STATICEDGE:为不接受用户输入的项创建一个3一维边界风格
WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。
X_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。
创建窗口:
HWND CreateWindowEx(
DWORD dwExStyle, //指定窗口的扩展风格。
LPCTSTR lpClassName, //窗口类的名字。
LPCTSTR lpWindowName, //指向一个指定窗口名的空结束的字符串指针。其实就是窗口的名字。
WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE, WS_EX_合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。
WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。这是缺省设置的。
WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading order alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。
);
dwExStyle可以是下列值:
WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。
WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。
WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。
WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。
//EndPaint就是做些收尾的工作了。
EndPaint(hWnd,&paint);
break;
case WM_DESTROY://响应鼠标单击关闭按钮事件
PostQuitMessage(0);//退出消息队列,至于什么是消息队列,下节说
return 0;//退出函数
在dc中可直接建立windows界面的工程
弹出一个“hello world"窗口:
MessageBox(NULL," Hello World!","我的第一个窗口程序",MB_OK);
窗口类:
typedef struct {
UINT cbSize; //cbSize 值为sizeof(WNDCLASSEX),在调用GetClassInfoEx前必须要先设置它值。
HCURSOR hCursor; //窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。
HBRUSH hbrBackground; // 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值
COLOR_ACTIVEBORDER ,COLOR_ACTIVECAPTION ,COLOR_APPWORKSPACE ,COLOR_BACKGROUND ,COLOR_BTNFACE ,COLOR_BTNSHADOW ,COLOR_BTNTEXT ,COLOR_CAPTIONTEXT ,COLOR_GRAYTEXT ,
WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设置的。
WS_EX_MDICHILD:创建一个MD子窗口。
WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。
WS_EX_OVERLAPPED:WS_EX_CLIENTEDGEWS_EX_WINDOWEDGE的组合。
DispatchMessage将消息发送到窗口对应的窗口过程去处理。窗口过程返回后DispatchMessage函数才返回,然后开始新一轮的消息循环。
在绘制窗口时,Windows会产生WM_PAINT消息
例子:
#include <windows.h>
#define CUR 0x1000 //预定义光标的id
填写好MSG结构并返回,如果获取的消息是WM_QUIT消息,则退出循环。
TranslatMessage遇到键盘消息则将扫描码转换成ASCII码并在消息队列种插入WM_CHAR或WM_SYSCHAR消息,参数就是转换好的ASCII码,
如此一来,要处理键盘消息的话只要是处理WM_CHAR消息就好了。非键盘消息TranslateMessage则不做处理。
case WM_LBUTTONUP://鼠标左键松开时
MessageBox(hWnd,"你击了左键","提示",MB_OK);
break;
case WM_RBUTTONUP://鼠标右键松开时
MessageBox(hWnd,"你击了右键","提示",MB_OK);
HDC hDC;//HDC是指设备上下文(暂时不用管,只要能这样用就可以了)的句柄
PAINTSTRUCT paint;
RECT rect;//RECT用来存储窗口信息的结构,只要是窗口的坐标、宽度和高度。
//回调函数
LRESULT WINAPI WinProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
break;
}
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
//主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
//GetClientRect用来获取窗口所在客户区的位置大小信息
GetClientRect(hWnd,&rect);
//DrawText就是Windows用来“画字”的笔了,DT_*之类是指文字的样式,看字面意思也能看懂的
DrawText(hDC,"Hello World!",-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
wc.hIcon = NULL;//不设置
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//通过函数来设置一个白色的背景,这里大家设置为NULL看看,会很有趣的
wc.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(CUR));//这里改了,来载入光标资源
HICON hIconSm; //小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。
} WNDCLASSEX, *PWNDCLASSEX;
定义一个WNDCLASSEX类型变量后,在给变量成员初始化后,我们就可以用
RegisterWindowEx(&wndclassex)来注册这个窗口类了。
UINT style; //窗口类的样式,它的值可以是窗口样式值的任意组合。
WNDPROC lpfnWndProc; //指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。