C++
Strive_Sun
学技术,一定要一步一个脚印,千万不要急于求成
展开
-
uint32_t 至 int64_t 转换
而 -1 在 uint32_t 中并不会保持为负值,它只能表示非负的整数值,所以 -1 会被解释为一个很大的正整数,具体取决于该类型的最大值(UINT32_MAX)int64_t 的取值范围是 -9223372036854775808 到 9223372036854775807,所以放下 UINT32_MAX 没有压力。在 uin32_t 中,-1 被表示为该类型的最大值减去它的绝对值再加 1,即 4294967295 - 1 + 1,结果为 4294967295。主要问题在这行代码上,原创 2023-08-31 18:25:48 · 1137 阅读 · 0 评论 -
tolower()函数用法
头文件:#include <stdlib.h>定义函数:int tolower(int c);函数说明:若参数 c 为大写字母则将该对应的小写字母返回。返回值:返回转换后的小写字母,若不须转换则将参数c 值返回。范例:将s 字符串内的大写字母转换成小写字母。#include <ctype.h>int main(){ char s[] = "aBcDeFg...原创 2018-03-15 15:26:54 · 26125 阅读 · 4 评论 -
使用SendMessage获得另一个程序的窗口标题
SendMessage可以将指定的消息发送到一个或多个窗口。一个简单的例子char text[256];LRESULT result = SendMessage(windowHandle, WM_GETTEXT, sizeof(text), LPARAM(text));...原创 2019-08-09 17:38:33 · 1289 阅读 · 0 评论 -
GetWindowTextW的使用
GetWindowTextW: 将指定窗口标题栏的文本(如果有)复制到缓冲区,如果指定的窗口是控件,则复制控件的文本。注意:GetWindowTextW无法检索另一个应用程序中的控件文本函数原型:int GetWindowTextW( HWND hWnd, LPWSTR lpString, int nMaxCount);hWnd: 文本的窗口或控件的句柄...原创 2019-08-09 17:56:42 · 6811 阅读 · 0 评论 -
为什么我们需要C++中的虚函数
摘自stackoverflow:https://stackoverflow.com/a/2392656/11128312假设你有这两个类:class Animal{ public: void eat() { std::cout << "I'm eating generic food."; }};class Cat : public Anima...翻译 2019-08-14 11:09:30 · 123 阅读 · 0 评论 -
用全局挂钩检测当前窗口是否激活
使用全局挂钩的前提是使用DLLDLL.cpp// dllmain.cpp : Defines the entry point for the DLL application.#include "stdafx.h"#include <Windows.h>#include <stdio.h>HMODULE thisModule;HHOOK hook;...原创 2019-08-14 18:20:13 · 461 阅读 · 0 评论 -
进程and窗口的相关api
要查看给定进程是否正在运行,可以使用:CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS)用Process32First()和Process32Next() 请参阅拍摄快照和查看进程或者EnumProcesses用OpenProcess()和GetModuleBaseName()/GetProcessImageFileName()/QueryFu...原创 2019-08-15 16:21:58 · 121 阅读 · 0 评论 -
将std::string转换为LPCSTR
方法:使用LPWSTR可以更改指向字符串的内容。不能使用LPCWSTR,因为它无法改变指向的内容LPWSTR ConvertToLPWSTR( const std::string& s ){ LPWSTR ws = new wchar_t[s.size()+1]; // +1 for zero at the end copy( s.begin(), s.end(), ws ...原创 2019-08-16 18:16:31 · 1790 阅读 · 0 评论 -
如何使用com组件
这里有篇介绍的很详细的文章:https://www.codeproject.com/Articles/633/Introduction-to-COM-What-It-Is-and-How-to-Use-It这是我根据文章写的demo,能够成功实现#define WIN32_LEAN_AND_MEAN#include <Windows.h>#include <W...原创 2019-08-16 18:23:02 · 718 阅读 · 0 评论 -
C++如何检测DPI
DPI的英文全称为Dots per inch解释:每英寸点数(dpi或dpi[1])是空间打印、视频或图像扫描仪点密度的一种度量,特别是可以放置在1英寸(2.54厘米)跨度内的一行中的单个点的数量。同样,新引入的每厘米[2]点(d/cm或dpcm)是指可以放置在1厘米(≈0.393英寸)线内的单个点的数量。监视器没有点,但有像素;监视器和图像的密切相关概念是每英寸像素或PPI。许多资源,包括...原创 2019-08-13 10:51:33 · 1289 阅读 · 0 评论 -
如何使用UpdateLayeredWindow
将WS_EX_LAYERED样式添加到窗口中。例如,可以通过调用CreateWindowEx完成此操作:hWnd = CreateWindowEx(WS_EX_LAYERED,szWindowClass,szTitle,0, CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);创建窗口后,我们将加载带有Al...原创 2019-08-22 10:09:36 · 4794 阅读 · 0 评论 -
WS_EX_TRANSPARENT - 它实际上做了什么?
MSDN是这样说的,在窗口下方(由同一个线程创建)的兄弟姐妹被绘制之前,不应该对窗口进行绘制。窗口显示为透明,因为底层兄弟窗口的位已经被绘制。要在没有这些限制的情况下实现透明度,请使用SetWindowRgn函数。根据我的理解就是,透明使你的事件(如鼠标单击)从窗口 穿过。而不透明度只是一个单独的概念,它指示窗口管理器在绘制表单时应用alphabLending。这两件事没有关系,...原创 2019-08-22 11:04:01 · 4655 阅读 · 0 评论 -
通过createprocess获取cmd.exe里面命令行数据
时间比较匆忙,我就直接上样例了,后面有时间再贴细节。#include <Windows.h>#include <string>int main(){ BOOL ok = TRUE; HANDLE hStdInPipeRead = NULL; HANDLE hStdInPipeWrite = NULL; HANDLE hStdOutPipeRead = ...原创 2019-08-22 18:13:44 · 928 阅读 · 0 评论 -
使用FindNextFile遍历特定文件夹
如果你想要列出所有后缀为.cur的游标文件,那么你可以使用FindNextFile轻松做到,但是最好限于特定文件夹,因为你如果要全盘搜索,那效率是十分低的。源码是开箱即用的:#include <windows.h>#include <iostream>#include <tchar.h>#pragma warning (disable: 4996...原创 2019-08-27 14:04:59 · 668 阅读 · 0 评论 -
检测计算机是否处于睡眠模式
通过监听WM_POWERBROADCAST消息:小示例:LRESULT WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ if (WM_POWERBROADCAST == message && PBT_APMSUSPEND == wParam) { // Going to ...原创 2019-08-27 15:40:38 · 2352 阅读 · 2 评论 -
使用更安全的方法去子类化控件
在很长一段时间内,我们都习惯使用SetWindowLong去子类化控件,但是这种方法存在很多缺点,具体可以看MSDN文档的介绍。这是列举出的四个缺点:窗口过程只能更换一次。 创建子类后很难删除它。 将私有数据与窗口相关联是低效的。 要调用子类链中的下一个过程,不能转换旧窗口过程并调用它,必须使用CallWindowProc函数调用它。所以现在我们需要使用SetWindowSubCl...原创 2019-08-06 17:47:57 · 461 阅读 · 0 评论 -
创建Message-Only 窗口
Message-Only的作用是什么?根据MSDN的回答,只有消息窗口允许您发送和接收消息。它不可见,没有z顺序,无法枚举,并且不接收广播消息。窗口只是发送消息。要创建仅消息窗口,请在CreateWindowEx函数的hWndParent参数中指定HWND_MESSAGE常量或现有仅消息窗口的句柄。您还可以通过在SetParent函数的hWndNewParent参数中指定H...原创 2019-07-23 10:47:28 · 699 阅读 · 0 评论 -
总结一下进程句柄和“文件句柄”
进程句柄,顾名思义,一个进程所对应的句柄如何获得一个电脑上所运行的所有进程ID和进程Name?Demo:#include <stdio.h>#include <Windows.h>#include <winternl.h>#pragma comment(lib,"ntdll.lib") // Need to link with ntdll....原创 2019-07-22 17:09:33 · 1174 阅读 · 0 评论 -
自定义控件
// WindowsProject12.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "WindowsProject12.h"#define MAX_LOADSTRING 100#define IDC_STATIC_TEXT 1000// Global Variable...原创 2019-04-26 17:06:05 · 171 阅读 · 0 评论 -
win32程序之子窗口编程
一丶简介.什么是子窗口 在前边我们已经讲解了窗口的本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环.那么有很多窗口其实Windows已经帮我们创建出来了.我们直接使用即可. 而这些窗口都有自己的消息循环. 只有改变状态的时候.才会发送消息给我们的父窗口通知.此时我们捕获消息就可以进行处理了.子窗口其实就是绘制在主窗口的一个窗口. 这些窗口包含了 BUTTON (按钮控件...转载 2019-04-29 10:22:18 · 551 阅读 · 2 评论 -
mciSendString在多线程里的应用
假设你正在学习游戏编程,随着学习的深入,终于要开始学习音乐播放了,能让自己编写的游戏播放音乐,那是件多么美好的事情啊!于是乎,你根据MCI的相关资料,简单编写了一个音乐播放程序,代码如下:Eg1:#include <Windows.h>#include <string>#include <iostream>#pragma comment(lib...转载 2019-04-29 14:16:22 · 1001 阅读 · 0 评论 -
GetDIBits 遍历位图 获取像素的颜色值(RGB)
GetDIBits 遍历位图 获取像素的颜色值(RGB)CBitmap m_bmp;//根据位图资源导入之后的ID来获得位图m_bmp.LoadBitmap(IDB_BITMAP_ORIGIN);</pre>接下来就是通过GetDIBits函数来对位图的像素进行遍历,获取RGB BITMAP bm; m_bmp.GetBitmap(&bm); in...转载 2019-04-30 11:34:18 · 3274 阅读 · 0 评论 -
获取windows窗口句柄
目前有几种方法可以获得ChildWindow句柄;FindWindowEx(使用父句柄,加上窗口标题),GetWindow(使用父句柄和Z-Order)和EnumChildWindows。想使用像FindWindowEx这样的东西,但这需要了解FindWindowsEx使用的TextBox(标题)的内容。如果TextBox内容是静态的,则此方法有效,但在大多数情况下,内容会发生变化,并且对于...翻译 2019-05-31 14:11:10 · 6606 阅读 · 0 评论 -
EnumWindow 样例
#include <windows.h>#include <cstdio>BOOL CALLBACK MyEnumWindowsProc(HWND hwnd, LPARAM lparam){ int& i = *(reinterpret_cast<int*>(lparam)); ++i; char title[256];...原创 2019-05-31 18:07:21 · 383 阅读 · 0 评论 -
数据结构对单链表进行数据排序
引用论坛的一个精华帖讲的还是很不错的https://bbs.csdn.net/topics/392201633转载 2019-06-17 10:20:48 · 1043 阅读 · 0 评论 -
GetModuleHandle(NULL) 和 HINSTANCE的区别
在exe中,它们没有任何区别。hInstance和GetModuleHandle(NULL)从 WinMain()入口都引用相同的HINSTANCE(.exe文件的模块)。但是如果在DLL中创建窗口就会有所不同,因为你必须使用DLL中的 hInstance,但GetModuleHandle(NULL)仍然会返回exe中的HINSTANCE。...原创 2019-07-18 17:49:04 · 1052 阅读 · 0 评论 -
Createprocess 和 ShellExecute
CreateProcess在MSDN里面的定义是:(机翻)创建一个新进程及其主线程。新进程在调用进程的安全上下文中运行。如果调用进程正在模拟其他用户,则新进程将使用该令牌进行调用,而不是模拟令牌。要在模拟令牌表示的用户的安全上下文中运行新进程,请使用CreateProcessAsUser或CreateProcessWithLogonW函数。MSDN官方文档(英语版):https:...原创 2019-07-19 10:35:51 · 1579 阅读 · 0 评论 -
GetModuleFileName的用法
一般说来,要想获得一个文件的相对路径是极其重要的。比如项目的移植,代码里面加载项目的资源文件如果用的是绝对路径,就像C:\\....这样的,到其他的PC上面就改变了,就无法成功执行了。那么我们就需要用到GetModuleFileNameW下面一个简单的DEMO供大家参考,可以直接拷到电脑里面运行。#include <Windows.h>#include <Sh...原创 2019-07-19 11:40:12 · 1941 阅读 · 0 评论 -
GDI如何设置透明背景,以及设置静态控件背景颜色
首先,要熟悉WS_EX_LAYERED的概念,它是设置透明背景的重要参数。看代码: case WM_CREATE: { LONG Style = GetWindowLong(hWnd, GWL_EXSTYLE); //hWnd是主窗口句柄 SetWindowLong(hWnd, GWL_EXSTYLE, Style | WS_EX_LAYERED); ...原创 2019-07-24 11:37:15 · 1978 阅读 · 0 评论 -
UTF8
原文转载:https://www.jianshu.com/p/eb68e3298b0butf-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念要想先讲清楚他们的区别,首先应该讲讲Unicode的来由。众所周知,在盘古开天辟地之前,sorry ,走错片场了(⊙o⊙)…在计算机发明的时候 ,由于计算机你只能表示二进制...转载 2019-07-29 13:48:20 · 445 阅读 · 0 评论 -
自定义对话框(使用CreateDialog)
之所以写这篇文章,一方面是给后面的人提供一个参考,另一方面也是给自己复习。CreateDialog: 从对话框模板资源中创建非模态对话框。函数原型:void CreateDialog(hInstance, lpName, hWndParent, lpDialogFunc)第一个参数是模块句柄,一般就是输入hInstance,这个参数是窗口创建过程中就自动生成的。第二个参数很重要,涉...原创 2019-07-30 13:57:34 · 4981 阅读 · 0 评论 -
如何在子控件上使用WS_EX_LAYERED
从Window 8开始,WS_EX_LAYERED可用于子控件。方法:需要清单文件,至少指定Window 8兼容性(子分层仅支持从Window 8开始)。对于想要使用分层子窗口的任何人,应将以下内容作为清单文件包含在内。<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> &...翻译 2019-07-25 16:28:36 · 1017 阅读 · 0 评论 -
如何使静态控件“透明”
需要自定义静态控件,且重绘控件背景,贴一个样例,仅供参考// Test_WM_CTLCOLORSTATIC.cpp : Defines the entry point for the application.//#include "stdafx.h"#include "Test_WM_CTLCOLORSTATIC.h"#define MAX_LOADSTRING 100// ...原创 2019-07-25 16:45:29 · 241 阅读 · 0 评论 -
虚拟按键的判断
intstat=GetAsyncKeyState(VK_SHIFT); boolis_pressed=stat&0x0001;//如果为真,表示按下过 boolis_pressing=stat&0x8000;//如果为真,表示正处于按下状态,展开为二进制来数,最高的一位就是15位 if (GetAs...原创 2019-04-26 11:33:05 · 355 阅读 · 0 评论