窗口信息主要有:窗口句柄、标题、类名、区域,还有一个ZOrder,它表示窗口显示在桌面的上下层级,窗口是否被遮盖。 include <qt_windows.h> include <QDebug> int GetWindowZOrder(HWND hwnd); struct WindowInfo...
远程桌面切换到console session
我用vpn连到公司内网,然后通过mstsc远程桌面连到公司内网机器。我想关掉vpn这样就不能用微软的远程桌面了,所以我先起了一个第三方的远程桌面软件,这样关闭vpn和微软的远程桌面,就可以用第三方的远程桌面在家里连接公司...
Win32 MSAA UIA技术介绍
Win32、MSAA、UIA技术在Windows平台开发中是比较常见的技术。本文将对这几种技术进行简要介绍,并解释为什么RPA产品会用到这些技术。 Win32 Win32是一套基于C语言的API接口,是Windows操作系统最为基础的API。通过Win3...
降权启动应用
如果应用是管理员权限,它再去启其他进程时也会是管理员权限,那么怎样降权呢?让它以普通用户的权限来启动,下面代码提供了一种实现方法。 注意!!! WTSQueryUserToken在普通会话下调用总是失败,但是在session 0上的...
bat常用命令
当前所执行bat文件的路径 cd "%~dp0" 设置变量 set DIR=%~dp0 使用变量,注意路径中可能有空格要加双引号 %DIR% 强制杀死进程 taskkill /f /im "进程名" 删除文件 del "文件路径...
ntscreenshot截图工具开源了
ntscreenshot介绍 Windows截图工具,基本功能都实现了,还有一些细节上的优化。支持截图、贴图,基本的绘制,马赛克,字体颜色设置等等,日常使用的也比较多,运行稳定。开发陆陆续续也花了不少时间,[源码地址](https://gite...
截图软件窗口自动识别实现
使用截图软件开始截图的时候,实际上是将当前桌面抓取成一张背景图(加点暗色的透明度),将背景图作为一个无边框的z-order顶级全屏窗口覆盖在桌面上,后续操作就在这个窗口上进行,类似一个当前桌面的快照。 这里要讲的...
DLL注入和卸载
dll本身是不能运行的,它可以被可执行文件调用来执行,这种是主动去调用dll,反过来也可以将dll注入到指定进程地址空间去执行。 注入程序 使用命令行的方式提供了注入dll和卸载dll两个方法 // inject.cpp : 此文...
ntscreenshot截图工具马赛克功能实现
截图后如果有一些敏感信息不想被别人看到,可以使用马赛克工具将其涂抹掉,用法是点击马赛克图标后按下鼠标左键涂抹敏感信息。 实现原理 一张图片可以认为是有很多个小色块组成,假如每个色块是正方形的并且宽度是blockWidth,那么整张图片x,y轴分割imageWidth/blockWi...
win32应用程序内存不足
当在windows环境运行32位应用程序时,由于32位的限制最大分配的内存只有2G。要想使用更大的内存正常情况下编译为64位就可以了。 但是如果程序依赖的库比较多,其他库也需要编译成64位,这样做起来比较麻烦。下面介绍一个更简单的做法,还是32位程序,只需要修改工程属性重新编...
Qt 正确的显示窗口
显示窗口看起来很简单,但是有一些细节要注意的。通常有下面几种情况需要展示一个窗口: 1. 第一次创建后展示 2. 窗口最小化 3. 窗口不在最前面 4. 窗口销毁后再次创建(同第1种) 注意: 这里说的不是通过任务栏来激活窗口,而是通过用户设计的按钮或者菜单来打...
log4cxx OutputDebugString DebugView
log4cxx常用appender有ConsoleAppender输出到控制台,RollingFileAppender输出到文件。 在GUI程序中使用log4cxx时,要想能实时看到输出日志一般用windows函数OutputDebugString,log4cxx console appender是显示不出来的。 所以如果log4cxx的日志能向OutputDebugSt...
快速遍历磁盘
快速遍历磁盘,不用遍历每个目录,主要使用DeviceIoControl 函数 需要用管理员权限运行 [参考链接](https://docs.microsoft.com/en-us/windows/win32/DevIO/calling-deviceiocontrol) 使用命令行工具也可以遍历出所有文件: 注意C盘需要管理员权限 dir c:...
双击exe阻止程序启动
有些程序不希望用户双击直接运行,而是由其他的程序调用启动。 根据main函数的传参可以简单的实现这个需求,用户双击运行的话参数argc为1,argv为程序运行的路径。 这里通过另外一种方法来实现,不依赖于传参。 在main函数里获取父进程的ID 判断父进程ID是否为expl...
QSortFilterProxyModel排序不正确
QSortFilterProxyModel排序不正确 客户端遇到的问题是当频繁的更新model时发现table上的行排序不正确,默认使用的是setDynamicSortFilter为true的方式。 在排除排序逻辑没有问题的情况下,能想到的方法是在model changed之后手动调用一下sort方法再重新排一下,但是这...
Qt什么时候用activateWindow
Qt什么时候用activateWindow 通常我们使用show来显示窗口,使用raise将窗口显示在最前面。 遇到的问题是,当在主窗口中打开一个子窗口时,如果这个窗口之前已经创建好了,它只是不在最前面被遮挡了,这时候要把它显示在前面使用show和raise是可以的。但是会带来一个问题,...
qpid-cpp Windows编译
qpid-cpp Windows编译 > 先要安装boost,cmake,python2.7,ruby 下载qpid-cpp源码 http://mirrors.hust.edu.cn/apache/qpid/cpp/1.39.0/qpid-cpp-1.39.0.tar.gz 解压之后打开CMake(cmake-gui)工具 Browse Source选择:F:/qpid-cpp-1.39.0 Browse Build...
Qt 客户端应用程序多开要注意的问题
Qt 客户端应用程序多开要注意的问题 很多客户端程序同一台电脑只允许开启一个进程,这个是很有必要的。那将一个原本单开的程序改为允许多开要注意些什么呢? 本地配置 如果多个进程读写同一个配置会造成混乱(只读的配置除外),所以要控制同一个目录不允许开两个。 ...
AStyle格式化代码
通过Node.js脚本来调用AStyle.exe格式化代码。 src:需要格式化的代码目录 params:AStyle参数,默认使用linux风格 filterNameList:不进行格式化的目录,跳过这些目录 regSuffix:需要格式化的文件名正则 const fs = require('fs') const path = require(...
windows安装包制作
我们使用Qt官方提供的安装包制作框架qt-installer-framework来打包我们的应用程序,同时它支持三个平台:Windows,Linux,OS X。 功能强大,用起来也很方便,这里只介绍一下基本用法,完全能满足我们的要求。 qt-installer-framework下载地址: http://download.qt.io/of...