1. 函数原型: BOOL WINAPI EnumWindows( _In_ WNDENUMPROC lpEnumFunc, _In_ LPARAM lParam); lpEnumFunc: 应用程序定义的回调函数的指针 lParam:         传递给回调函数的应用程序定义的值 MSDN中对EnumWindows的解释: Enumerates all top-level windows on the screen by passing the handle to each window,…
WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制…… WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制. 首先来谈谈句柄,初学习WinSDK的朋友刚看到这个词头大了吧?…
Windows 工作原理的中心思想就是“动态链接”概念.Windows 自身带有一大套函数,应用程序就是通过调用这些函数 来实现它的用户界面和在屏幕上显示文本和图形的.这些函数都是在动态链接库里实现的. 这些文件的名称都带有后缀 .dll,或有时带有 .exe. Windows 的 3 个主要子系统:内核(kernel),用户(user),GDI. 内核 负责操作系统的传统工作:如 内存管理,文件输入/输出 以及任务管理等. 用户 指的是用户界面,负责所有的窗口管理. GDI 就是图形设备接口,…
函数原型: BOOL WINAPI SystemParametersInfo( _In_ UINT uiAction, _In_ UINT uiParam, _Inout_ PVOID pvParam, _In_ UINT fWinIni ); //函数 MSDN链接:https://msdn.microsoft.com/en-us/library/ms724947(v=vs.85).aspx 用法: UINT nPreviousState; //禁止任务切换 SystemParametersI…
Windows编程有时会因为调用函数而产生错误,调用GetLastError()函数可以得到错误代码.如果错误代码为0,说明没有错误:如果错误代码不为0,则说明存在错误. 而错误代码不方便编程人员或用户直观理解到底发生了什么错误.Visual Studio 2015(或之前的版本)提供了“错误查找”的外部工具,输入错误代码即可以查看到底发生了什么错误. 如果想在程序代码中查看错误代码对应的错误信息,可以编写如下函数来实现: #include<iostream> #include<Wind…
原文链接:https://blog.csdn.net/Donjuan/article/details/3865026在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没有什么比这个更让人恶心的事情了.因为: 1.         如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode DLL的情形. 2.        …
在网上看到很多网友在.NET程序中调用Win32 API,或者调用自己的VC DLL里面提供的函数的时候,总是被生成正确的C函数在C#中的正确声明而困扰,而生成C++中结构体在C#中的声明 - 天,没有什么比这个更让人恶心的事情了.因为: 1.         如果你的结构体里面包含 TCHAR字符串成员的话,需要考虑ANSI和Unicode DLL的情形. 2.         如果你的结构体里面包含数组成员,需要考虑定长的数组,而不是对应C#数据类型. 3.         如果你的结构体里…
最近刚入门SDK编程,在 我终于知道为什么windowsApi学的人这么少了 这篇文章中,确实发现了这样的问题,我的教程使用VS2013->Windows桌面->win32,就诞生了能使用WinMain()的接口的Windows程序.而换成VS2017来编译,却发现问题不止这里 首先,参考某些资料得到VS2017创建win32项目的步骤 Step1,Windows桌面->Windows桌面向导(我取消了右下角“为解决方案创建项目”) S2,取消复选框“预编译标头”和“安全开发生命周期SD…
## #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//回调函数; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wndclass;//窗口类; MSG msg; wndclass.style = CS_HREDRAW | CS_VREDR…
和可执行文件一样,动态链接库也有自己的入口地址,如果系统或者当前进程的某个线程调用LoadLibrary函数加载或者使用FreeLibrary卸载该动态链接库的时候,会自动使用3个特定的堆栈参数跳转到该地址来运行.入口函数是为了完成动态链接库代码的初始化和善后工作,比如卸载后的资源释放. 这三个参数具有特殊的含义. BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) 第一个参数…