
Windows
文章平均质量分 57
FlushHip
凝视深渊
展开
-
Windows下VS Code设置CMakeTools调试有输入的程序
Windows下,不管是使用VS Code进行本地调试还是远程调试,调试有输入的程序都不会出现输入窗口。先给解决方案。打开setting.json,添加如下代码: "cmake.debugConfig": { "console": "integratedTerminal" }其实这里使用"console": "externalConsole"对于本地调试来说也是没有问题的,但是远程调试是出不来的。点击下方状态栏的小蜘蛛或者直接Ctrl + F5调试。即可解决CMak原创 2021-03-12 15:21:29 · 2694 阅读 · 3 评论 -
Windows中文件和文件夹的链接类型(快捷方式、软链接、硬链接、符号链接)
链接四大类型There are three types of file links supported in the NTFS file system: hard links, junctions, and symbolic links.快捷方式软链接硬链接符号链接快捷方式(Shortcut)A Shell link is a data object that contai...原创 2020-05-20 16:44:28 · 8710 阅读 · 1 评论 -
Windows获取本地安装软件详细信息(对标卸载程序控制面板)
背景在做C++客户端的一些业务时,需要采集本地计算机上已经安装的软件,上传至云端,供后台做数据分析,数据展示等功能,这里需要对标控制面板中的卸载程序列表,做到采集到的软件列表中的信息和控制面板中的保持一致。控制面板中的信息结构名称发布者安装时间版本大小获取信息的方式注册表WMI这里推荐使用注册表,WMI貌似不能完全对标上控制面板中的软件列表。不过可以了解下WMI是怎...原创 2020-03-02 18:23:00 · 9409 阅读 · 1 评论 -
Visual Studio远程调试Windows上C++程序的几种方式
背景远程调试(Remote Debugging)的原理可以见下图:可以看到,远程调试是通过网络进行通信(使用TCP协议)的,将远程程序的运行信息和Visual Studio的控制信息通过网络互传。如果一些特殊的BUG发生在没有网络的情况下,那么远程调试就派不上用场了。其次,远程调试需要在被调试的目标机器上部署一个程序(Remote tools),这个程序msvsmon.exe的版本必须要和...原创 2020-01-19 10:10:17 · 3757 阅读 · 1 评论 -
IsDebuggerPresent和DebugBreak在Windows项目中的应用
首先要从一篇文档说起,https://docs.microsoft.com/zh-cn/windows/win32/debug/basic-debugging,这篇文档介绍了Windows调试的相关内容,比如相关的调试术语Debugging Terminology,可以看一下,举个例子,为什么调试器可以动态修改变量的值,这里Process Functions for Debugging就给出了解释...原创 2019-12-03 18:45:31 · 1117 阅读 · 1 评论 -
Windows下C++动态监测网络变化(对标Windows网络托盘图标)
背景把Windows网络托盘小图标移植到应用程序中来。使得应用界面显示网络状态,状态包括无网络、有线网、无线网(需要显示WiFi信号强度)方案动态监测托盘图标变化(没有采用)动态监测网络状态变化(利用Windows的API和COM接口,也可以采用轮询)问题点获取Windows网络的活动连接列表获取活动连接的网络适配器类型注册网络状态变化的通知,避免轮询获取WiFi信号强度...原创 2020-05-20 16:44:56 · 9061 阅读 · 15 评论 -
LoadLibrary下错误返回126错误码排查过程
在开发一些Windows下的应用程序过程中,经常会手动加载一些DLL,使用的就是LoadLibrary这个函数,而这个函数一旦失败,返回的错误码基本都是126,126错误码的意思是找不到指定的模块,这不,我就遇到了这个问题,而且挺诡异的,就是Debug模式下一点问题没有,Release模式下就必出这个错误码。先介绍下问题的环境,一个应用程序需要加载一个IoT模块的DLL,这个DLL又依赖了一些D...原创 2019-07-21 13:02:26 · 23553 阅读 · 5 评论 -
利用googletest命令行参数简化单元测试
首先看看gtest如何写:#include <gtest/gtest.h>int main(int argc, char **argv){ testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS();}TEST(main, minor){}可以看到,main中的命令行参数传入了g...原创 2019-02-26 18:05:35 · 10330 阅读 · 0 评论 -
Windows下C++程序实现单例运行
在Windows下,有些程序是需要单例运行的,比如QQ和Wechat吧。QQ可以打开多个Wechat只能打开一个可以自己在Windows下点一点就知道了。那么在Windows下如何实现单例运行呢?这个单例运行和代码的单例设计模式是不是一个东西呢?一一来回答。首先单例模式和这个肯定是不一样的,单例设计模式解决的是在一个进程中只能有一个类实例问题;而程序单例运行是值系统中只能运行该程序的...原创 2018-12-17 19:36:38 · 2681 阅读 · 0 评论 -
Windows/Linux下C++对于UUID的跨平台封装
Universally Unique Identifier,UUID,通用唯一识别码。是用于计算机体系中以识别信息数目的一个128位标识符,这个东西很有用,在分布式系统中经常用于标识一个结点。根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID码概率接近零,可以忽略不计。UUID是128位,16个字节,可以用32个HEX进制的数字表示。标准的...原创 2018-12-19 16:29:28 · 6400 阅读 · 1 评论 -
Windows下C++得到一个空闲的端口API
这个东西,并不太常用,客户端弄一个Tcp连接,也不需要你去指定端口,系统会自动找一个空闲的端口给你;但是,如果在服务器端,手动得到一个空闲端口是很重要的,毕竟这个端口要固定,因此需要你自己指定一个空闲的端口。那么在Windows下,如何利用C++得到一个空闲的端口呢,答案是Windows的API。要用的Windows系统API如下:#include <tcpmib.h>#in...原创 2020-05-20 16:45:16 · 3966 阅读 · 2 评论 -
Windows关机重启API封装
这纯属记录下代码,Windows系统在程序中关机和重启电脑。大体上就是两个步骤:- 拿关机权限- 关机需要注意的点,一定要在`ExitWindowsEx`中加上`EWX_FORCE`参数,不然,在Windows锁屏界面下是关不了机或者重启不了的。原创 2018-11-30 16:15:40 · 1651 阅读 · 0 评论 -
聊聊实现C++跨平台ping函数及ICMP请求回显数据包解析
ping我们经常使用,大多数的时候是在命令行ping下IP地址,然后一堆输出。程序中有时候也会用ping函数,那么ping是如何实现的呢。计算机网络告诉我们,ping函数是基于ICMP协议实现的,而ICMP协议又是基于IP协议弄的(ICMP作为IP协议的数据部分传输)。ping通过ICMP协议中的类型8和代码0来搞的,这个类型和代码的组合在ICMP协议中表示请求回显。如果能正常回显,那么返回...原创 2018-11-12 17:26:59 · 3719 阅读 · 4 评论 -
Windows/Linux中C++对于系统函数发生错误时的调试方法(调试Windows/Linux下创建原始socket失败返回-1)
调用系统API时,经常会由于操作不当导致系统函数调用发生错误,而系统API也是比较友好的,会给你一些特殊的返回值,普遍返回-1,同时,会设置一些变量,表示错误类型。在Windows中,调用GetLastError,可以得到最近的调用失败的错误码;在Linux中,“全局变量”errno记录了最近调用失败的错误码。这里纠正一下,errno其实并不是全局变量,errno的作用是thread local...原创 2018-11-12 16:02:57 · 1902 阅读 · 0 评论 -
Windows利用WTS API获取锁屏状态
下面的这个函数可以获取Windows是否处于锁屏状态:代码来自stackoverflow,C++: check if computer is locked。#include <Windows.h>#include <WtsApi32.h>bool IsSessionLocked(){ typedef BOOL(PASCAL * WTSQuerySessi...原创 2018-10-18 09:21:48 · 5438 阅读 · 3 评论 -
Linux/Windows下C++设置线程名字方便多线程调试
C++多线程编程,调试是一个大问题,原因之一就是,线程名字继承了父进程的名字,因此导致同一段代码的不同线程名字一样;而且还会导致线程的名字怪怪的,不好看。因此,如果在代码中可以设置线程的名字就好了,这样在调试中就可以看到期望的线程名字,这样便于调试。由于编写跨平台代码,因此,线程设置名字对Windows和Linux来说都很重要,这里分别来讲下。Windows在Visual Studio调试...原创 2018-10-12 11:12:51 · 5896 阅读 · 0 评论 -
Windows下C++调用系统软键盘及其需要注意的点
Windows下系统软键盘的程序名是osk.exe,系统软键盘在有键盘的时候一点用都没有,但是没有键盘的时候想要输入点东西,系统软键盘就至关重要了。osk.exe为微软系统自带的虚拟键盘程序,功能与真的键盘差不多.只需要在运行中输入"osk"即可启动虚拟键盘。Window8开始,Windows开始采用扁平化设计,还有一个系统软键盘叫TabTip.exe,这个待会再说。先来看看这两个软键盘在...原创 2018-10-11 13:07:57 · 11489 阅读 · 3 评论