win_API笔记
记录自己的win学习历程
老朽在门外
进一寸有进一寸的欢喜
展开
-
ScreenShot
截取当前目录的全屏c++原创 2022-11-10 09:04:06 · 400 阅读 · 0 评论 -
windows的commonfiles
获取common files的时候建议从注册表获取原创 2022-06-29 18:14:27 · 552 阅读 · 0 评论 -
vs中的多字节与unicode
ANSI(即MBCS): 为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节(在处理中文字符时 使用双字节方式)。ANSI字符采用8bit,能表示256种字符,表示26个英文字母是绰绰有余的,但是表示汉字,韩国语,日语等有着成千上万个字符的非西方字符肯定就不够了。Unicode: 不管是英文字符还是中文字符都是采用双字节方式表示。比如字符 ‘A’ 在 ASCII 下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用原创 2022-02-27 16:24:28 · 829 阅读 · 0 评论 -
只获取当前目录下的文件(不包含文件夹)
/// <summary>/// 只获取当前目录下的文件(不包含文件夹)/// </summary>/// <param name="path"></param>/// <param name="files"></param>void ShortCut::onlyGetFiles(std::string path, std::vector<std::string>& files) { //文件句柄原创 2021-08-16 23:08:46 · 440 阅读 · 0 评论 -
createFile
HANDLE CreateFile( LPCTSTR,lpFileName, //指向文件名的指针 DWORD dwDesiredAccess, //访问模式(读/写) DWORD dwShareMode, //共享模式 LP原创 2021-08-10 10:25:50 · 677 阅读 · 0 评论 -
为什么文件路径 Program Files 可以写成 Progra~1
文件夹(sub-directry)名称,以前是不允许带空白的,后来允许带空白,但由于有了空白,许多命令出现二义性,于是采用双引号括起来的办法。例如:cd Documents and Settings按老定义 等于 CD Documents,CD 命令找不到名叫Documents 的 directry于是采用双引号:cd “Documents and Settings“但用到 set PATH 时很麻烦,名字太长,双引号时常括错。于是采用8个字符缩写,即写头六个字母(略去空白),另加波浪号和1转载 2021-08-09 20:48:04 · 293 阅读 · 0 评论 -
VS中的路径宏:OutDir、ProjectDir、SolutionDir等各种路径的说明
$(SolutionDir)解决方案的目录(定义形式:驱动器 + 路径);包括尾部的反斜杠“\”。$(SolutionPath)解决方案的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + 文件扩展名)。$(ProjectDir)项目的目录(定义形式:驱动器 + 路径);包括尾部的反斜杠“\”。$(ProjectPath)项目的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + 文件扩展名)。$(TargetDir)生成的主输出文件的目录(定义形式:驱动器 + 路径);包转载 2021-08-06 18:31:12 · 2065 阅读 · 2 评论 -
VS控制台程序运行不显示控制台界面
方式一main函数前添加下面的编译设置#pragma comment( linker, “/subsystem:windows /entry:mainCRTStartup” )方式二通过项目设置,详见VS程序不显示控制台首先打开“配置属性”->“链接器”->“系统”->“子系统”,设置为“Windows(/SUBSYSTEM:WINDOWS)”,原来可能是默认为“控制台(/SUBSYSTEM:CONSOLE)”的。修改好之后,到“高级”选项中添加“入口点”:mainCRTSta原创 2021-08-05 09:30:16 · 7369 阅读 · 0 评论 -
如何禁止程序启动多个实例
如何禁止程序启动多个实例VC 6.0 项目下编译通过,可在程序启动处(如控制台程序的main函数,form程序的winmain函数)加入如下代码(需要包含windows.h头文件),结合GetLastError函数判断是否程序已经在运行。#include<stdio.h>#include<windows.h>int main(int argc, char* argv[]){ HANDLE m_mutex = NULL; m_mutex = CreateMu转载 2021-08-04 20:11:32 · 147 阅读 · 0 评论 -
对ini文件进行读写
C++ ini配置文件的格式及读写操作1 为什么要使用ini或者其它(例如xml,json)配置文件? 如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序发布后还能根据需要进行必要的配置;配置文件有很多如INI配置文件,XML配置文件,还有就是可以使用系统注册表等。注意:ini的后缀名也不一定是".ini"也可以是".cfg",".conf ”或者是".txt"。因为ini文件实质就是txt文本文件。2转载 2021-08-03 17:20:02 · 636 阅读 · 0 评论 -
关闭指定进程
#include <Tlhelp32.h>//processName-指定的需要杀死的进程名BOOL KillProcessByName(CString processName){ BOOL bRet = FALSE; HANDLE SnapShot, ProcessHandle; SHFILEINFO shSmall; PROCESSENTRY32 ProcessInfo; CString strSearchName; CString strRunProcessName;转载 2021-08-03 14:25:08 · 208 阅读 · 0 评论 -
获取文件大小
以下操作需要包含头文件 | size_t GetFileSize(const std::string& file_name){std::ifstream in(file_name.c_str());in.seekg(0, std::ios::end);size_t size = in.tellg();in.close();return size; //单位是:byte}以下操作需要包含头文件 | size_t GetFileSize(const std::string& f原创 2021-08-03 14:12:42 · 144 阅读 · 0 评论 -
win注册表填写的应用信息
经常碰到程序无法卸载, 就老是骂微软搞的什么安装方式,安装好了不能卸载. 后来就打算研究一下windows是如何卸载程序的,一个程序安装完后留下了什么信息用于后面的卸载. 研究对象win7 64位, 程序npviewinie. 程序安装后生成的最主要的注册表项是在以下三个中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 64位程序 HKEY_LOCAL_MACHINE\SOFTWARE原创 2021-07-22 19:29:31 · 219 阅读 · 0 评论 -
字符串操作
1、字符串查找s.find(s1) //查找s中第一次出现s1的位置,并返回(包括0)s.rfind(s1) //查找s中最后次出现s1的位置,并返回(包括0)s.find_first_of(s1) //查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)s.find_last_of(s1) //查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)s.fin_first_not_of(s1) //查找s原创 2021-07-21 10:53:56 · 125 阅读 · 0 评论 -
Windows系统没有目标位置的快捷方式及其目标文件获取
https://blog.csdn.net/kiss_xq/article/details/88814511?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommend原创 2021-07-20 00:01:46 · 474 阅读 · 0 评论 -
日志的写法(c++)
#define fatal(format, ...) do { \ fprintf(stderr, format, ##__VA_ARGS__); \ exit(1); \} while (0)#define WIN32_LEAN_AND_MEAN#include "get-exe-icon.h"#include <stdlib.h>#include <stdio.h>#include <windows.h>int main(){ std::原创 2021-07-14 17:41:21 · 212 阅读 · 0 评论 -
获取图标(失真)
//在客户端上一级目录创建一个文件夹//inloadName 创建的文件夹名称//outFileload 文件夹的路径int SoftInfosetDownloadLoad(std::string inloadName, std::string& outFileload){ //用于存储模块路径 CHAR szMoudlePath[MAX_PATH]; //使用NULL参数,获取本模块路径 if (!GetModuleFileNameA(NULL, szMoudlePath, MA原创 2021-07-14 17:33:48 · 213 阅读 · 0 评论 -
WMI获取系统信息
利用WMI获取系统信息,一般步骤:1. 通过调用CoInitialzeEx来初始化COM参数.2. 通过调用CoInitializeSecurity来初始化COM过程安全.3. 通过调用CoCreateInstance来实例化。4. 通过调用IWbemLocator::ConnectServer来获取一个本机root\cimv2命名空间的IWbemServices的指针。(注意在字符串中要写“root\\cimv2”,两个\\)5. 设置IWbemServices代理安全,WMI serv原创 2021-07-07 20:22:29 · 397 阅读 · 0 评论 -
在所在模块上一级目录创建一个文件夹
//inloadName 创建的文件夹名称int setDownloadLoad(std::string inloadName) { //用于存储模块路径 CHAR szMoudlePath[MAX_PATH]; //使用NULL参数,获取本模块路径 if (!GetModuleFileNameA(NULL, szMoudlePath, MAX_PATH)) { printf("Get load failed\n"); return原创 2021-06-18 20:02:26 · 156 阅读 · 0 评论 -
十六进制转换成char*,double转换成char*
//将十六进制转换成char*double sss;char ptrs[256];sprintf(ptrs, "%x", sss);int char2int(const char* str) { const char* p = str; bool neg = false; int res = 0; if (*str == '-' || *str == '+') { str++; } while (*str != 0) { i原创 2021-06-18 14:17:59 · 605 阅读 · 0 评论 -
C++11中std::future的使用(转载)
#include "future.hpp"#include <iostream>#include <future>#include <chrono>#include <utility>#include <thread> namespace future_ { ///// reference: http://www.cplusplus.com/reference/future/future/int test_future_1转载 2021-06-15 23:39:04 · 1759 阅读 · 0 评论 -
std::function与std::bind使用总结
C++中函数指针的用途非常广泛,例如回调函数,接口类的设计等,但函数指针始终不太灵活,它只能指向全局或静态函数,对于类成员函数、lambda表达式或其他可调用对象就无能为力了,因此,C++11推出了std::function与std::bind这两件大杀器。std::function vs 函数指针C++函数指针相信大家用的很多了,用法最广泛的应该就是先定义函数指针的类型,然后在声明一个函数指针的变量作为另一个函数的入参,以此作为回调函数,如下列代码所示:typedef void (*PrintFin原创 2021-06-15 10:57:59 · 790 阅读 · 0 评论 -
vs中能编译通过,但是会有红色下划线提示未定义标示符问题
项目能编译通过,但是代码中会有红色下划线提示未定义标示符。就连BOOL TRUE FALSE等都会有下划线。这通常是该代码文件包含在项目文件夹的子文件夹中。解决办法是配置包含项目目录即可:打开项目属性-》配置属性-》C/C++常规-》附加包含目录-》填入:$(ProjectDir)...原创 2021-06-10 10:22:02 · 344 阅读 · 0 评论 -
解决curl对&等特殊字符解析失败
+ URL 中+号表示空格 %2B 空格 URL中的空格可以用+号或者编码 %20 / 分隔目录和子目录 %2F ? 分隔实际的URL和参数 %3F % 指定特殊字符原创 2021-06-07 16:08:29 · 837 阅读 · 0 评论 -
十六进制与字符串的转换
```cpp/****************************************************************************函数名称: str_to_hex函数功能: 字符串转换为十六进制输入参数: string 字符串 cbuf 十六进制 len 字符串的长度。输出参数: 无*****************************************************************************/ static in.原创 2021-06-04 16:41:41 · 8472 阅读 · 0 评论 -
使用winsock2.h出现“sockadd“:“struct“、“fd_set”:“struct“类型重定义错误
方法一:在工程属性->C/C+±>预处理器->预处理器定义中 加入 WIN32_LEAN_AND_MEAN即可。实际原因是windows.h 与winsock2.h的顺序问题上面加宏定义的方法会导致无法使用某些函数比如:ShellExecuteW方法二:#include<windows.h>之前 #include <winsock2.h>...原创 2021-06-02 20:18:40 · 147 阅读 · 0 评论 -
获取软件信息的注册表位置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall # 64位程序HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall # 32位程序HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall #原创 2021-05-19 11:01:56 · 698 阅读 · 0 评论 -
获取随机数、读写文件、获取系统时间
//获取随机数//This program demonstrates using the C++ time function//to provide a nseed,T for the random number generator.#include <iostream>#include <cstdlib> // Header file needed to use srand and rand#include <ctime> // Header file nee原创 2021-05-12 17:17:19 · 57 阅读 · 0 评论 -
CSR证书申请文件
什么是CSR证书申请文件?SR是Cerificate Signing Request的英文缩写,即证书请求文件,在多方之间在互联网上安全分享数据的公钥基础架构PKI系统中,CSR文件必须在申请和购买SSL证书之前创建。也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请 者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。通常CSR文件是在拿到参考码、授权码进行证书签发和下载时,通过网页提原创 2021-04-16 10:24:19 · 469 阅读 · 1 评论 -
证书申请流程
第一步:生成客户端的密钥,即客户端的公私钥对,且要保证私钥只有客户端自己拥有。第二步:以客户端的密钥和客户端自身的信息(国家、机构、域名、邮箱等)为输入,生成证书请求文件。其中客户端的公钥和客户端信息是明文保存在证书请求文件中的,而客户端私钥的作用是对客户端公钥及客户端信息做签名,自身是不包含在证书请求中的。然后把证书请求文件发送给CA机构。第三步:CA机构接收到客户端的证书请求文件后,首先校验其签名,然后审核客户端的信息,最后CA机构使用自己的私钥为证书请求文件签名,生成证书文件,下发给客户端。此证书原创 2021-04-15 15:52:20 · 1436 阅读 · 0 评论 -
最安全的C++单例模式——Meyers’ Singleton
class Singleton {private:Singleton();public: static Singleton& getInstance() { static Singleton instance; return instance; } }原创 2021-04-12 10:25:39 · 199 阅读 · 0 评论 -
打印日志函数
bool g_bWriteLog = true;void writeLog(std::string sMsg) {if (!g_bWriteLog) return;std::ofstream ofs(“logindll.txt”, std::ios::app);ofs << sMsg << std::endl;ofs.close();}原创 2021-04-06 10:59:55 · 103 阅读 · 0 评论 -
获取子线程返回值的方法
https://www.jb51.net/article/189512.htm转载 2021-03-02 19:06:28 · 289 阅读 · 0 评论 -
curl笔记
1原创 2021-02-27 13:43:27 · 145 阅读 · 0 评论 -
cJSON的拼接与解析
https://www.cnblogs.com/catgatp/p/6379955.html原创 2021-02-26 14:18:28 · 616 阅读 · 0 评论 -
拼接与解析json,http使用curl进行get、post、downfile
//http网络通信curl get post参考https://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.htmlhttps://www.cnblogs.com/lyggqm/p/11450555.html//json拼接与解析参考https://blog.csdn.net/centnetHY/article/details/83310331原创 2021-02-25 23:27:22 · 293 阅读 · 0 评论 -
grpc与http
--------------------------------------------------------grpc--------------------------------------------------------所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。gRPC的优势性能gRPC消息使用原创 2020-12-08 16:21:04 · 9448 阅读 · 0 评论 -
ffmpeg解码
1.fmpeg 结构以及作用:AVUtil: 核心工具库AVFormat:提供了音视频容器格式的封装和解析以及所支持的协议文件格式和协议库AVCodec: 编解码库AVFilter: 音视频滤镜库 如视频加水印、音频变声AVDevice: 输入输出设备库,提供设备数据的输入与输出,如读取摄像头数据、屏幕录制SwrRessample: 音频重采样SWScale: 图像格式转换的模块,yuv -> rgbPostProc:后期处理2.解码流程:av_register_all:先调用a原创 2020-08-28 22:59:14 · 165 阅读 · 0 评论