首页
关于本站
友情链接
全站统计
Search
1
中华人民共和国网络安全法
26 阅读
2
python爬取抖音作者主页视频
24 阅读
3
每日60秒早报 读懂时间
21 阅读
4
《极限竞速:地平线5顶级版》联机版
20 阅读
5
Python3 零基础完全入门 小白到程序猿进化 (80课全)
20 阅读
实验室
生活圈
咖啡屋
破碎代码
闲言碎语
登录
Search
标签搜索
情书
安卓
漏洞
诗词
是小刘同学
累计撰写
24
篇文章
累计收到
4
条评论
首页
栏目
实验室
生活圈
咖啡屋
破碎代码
闲言碎语
页面
关于本站
友情链接
全站统计
搜索到
24
篇与
的结果
2022-11-19
微信上线制作自定义表情啦
微信进入小程序“微信创意表情”->可自己添加各类脸型、文本、图层,制作属于自己的专属表情->制作完成一键添加到微信表情
2022年11月19日
7 阅读
0 评论
0 点赞
2022-11-18
使用c++SDK写个钢琴,加上自动演奏外挂
钢琴买不起,可以自己码一个。来个C++ Piano,码砖累了还可以即兴演奏一首。主要用到SDK知识,文件流,字符转,程序之间消息传送,window运行程序遍历等音源和乐谱在压缩包中,一并奉上,望大佬多多指教实现播放本地音乐:在项目中添加音乐文件,如果在vs中运行即以main数所在文件夹为当前文件夹,如果运行的是exe文件,则是以exe文件所在的文件夹为当前文件夹。导入Windows.h头文件,#pragma comment(lib,"winmm.lib"),需要使用micString(),该函数用于将mci(媒体控制设备)有关指令发送到设备上。该函数有两种版本A版和W版,是否可以使用通用版?函数如果成功返回0失败则返回其他。MCIERROR mciSendString( LPCTSTR lpszCommand, //发送给MCI的指令 LPTSTR lpszReturnString, //返回的结果 UINT cchReturn, //返回结果大小 HANDLE hwndCallback //如果在命令字符串中指定了“通知”标志,则返回回调窗口的hwndCallback句柄 );新建一个loadmusic函数导入所有音乐并设置别名mciSendStringA(("open sound\start.mp3 alias START"), temp, 255, 0);这里alias是别名指令,将start.mp3打开为别名START。新建一个PlayMusic函数用于播放已经打开的音乐,mciSendStringA("seek START to start", NULL, 0, 0);mciSendStringA("play START", NULL, 0, 0);实现窗口对按键的反应在窗口的回调函数中判断 Msg 如果是WM_CHAR消息,则获取wParam的值,以该值作为索引找出对应的音乐。按下不同的按键就会打开对应音乐。实现外挂读取文件包含windows,使用GetDesktopWindow()得到桌面句柄,使用GetWindow得到屏幕上第一个子窗口句柄,通过while循环和GetNextWindow遍历所有窗口,找到Piano程序,得到其句柄。创建SendOpern函数发送曲谱,参数为句柄,第一步打开文件获取数据,使用ofstream读取文本文件。(无法读取空格)将读取到的字符通过sendmessage发送给Pinao窗口,第一个参数为句柄,第二个参数为发送消息类型,第三个参数为wParam,第四个参数为lParam。 SendMessage( hd,WM_CHAR,k, 0)。贴上源代码Piano#include<Windows.h> #include<tchar.h>//为通用提供映射 #include< conio.h > #include<stdio.h> //该链接库用于音乐播放 #pragma comment(lib,"winmm.lib") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); void LoadMusic(); int APIENTRY _tWinMain( HINSTANCE hinstance, //实例句柄 HINSTANCE hPrevInstance, LPTSTR lpCmdLine, //命令行参数 int nCmdShow //显示方式 ) { //1.设计窗口类 WNDCLASS ws = {}; //窗口类名 ws.lpszClassName = _T("Music"); //窗口回调函数 ws.lpfnWndProc = WndProc; //背景颜色 ws.hbrBackground = CreateSolidBrush(RGB(255, 180, 255)); //光标图标菜单, ws.hInstance = hinstance; //2.注册窗口类 RegisterClass(&ws); //3.创建窗口 HWND hWnd = CreateWindow( _T("Music"), //窗口类名 _T("Piano"), //窗口名 WS_OVERLAPPEDWINDOW,//窗口风格 100, 100, //窗口左上角的位置,以屏幕左上角为参考点 600, 800, //窗口的宽度和高度 NULL, //父窗口句柄 NULL, //菜单句柄 hinstance, //实例句柄 NULL //附加参数 ); //4.更新显示窗口 ShowWindow(hWnd, SW_SHOW); UpdateWindow(hWnd); LoadMusic(); //5.消息循环 MSG msg = {}; //GetMessage //第一个是消息结构体 //第二个是窗口句柄,如果填0就是所有窗口的消息 //第三个是最小消息数量 //第四个是最大消息数量 while (GetMessage(&msg, 0, 0, 0)) { //将消息分发给回调函数 TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) { switch (Msg) { case WM_CHAR: { char szBuf[100] = { 0 }; char szBuf1[100] = { 0 }; sprintf_s(szBuf, sizeof(szBuf), "seek %c to start", wParam); sprintf_s(szBuf1, sizeof(szBuf1), "play %c", wParam); mciSendStringA(szBuf, NULL, 0, 0); mciSendStringA(szBuf1, NULL, 0, 0); }break; case WM_KEYDOWN: { //MessageBox(0, buff, 0, 0); }break; case WM_CLOSE: PostQuitMessage(0); break; default: break; } //如果不想要处理的消息类型,就让他返回默认的处理函数 return DefWindowProc(hWnd, Msg, wParam, lParam); } void LoadMusic() { char A = 'A'; for (int i = 1; i < 26; i++) { char szBuf[100] = { 0 }; sprintf_s(szBuf, sizeof(szBuf), "open sound\\Sound_%c.wav alias %c", A, A);//写入 A++; mciSendStringA(szBuf, NULL, 0, 0); } }辅助,读取琴谱自动演奏#include <Windows.h> #include <stdio.h> #include <tchar.h> #include <string.h> #include <iostream> #include<fstream> void SendOpern(HWND hd); void SendOpern2(HWND hd); using namespace std; int main() { HWND hd = GetDesktopWindow(); //得到桌面窗口 hd = GetWindow(hd, GW_CHILD); //得到屏幕上第一个子窗口 char s[200] = {0}; int num = 1; while (hd != NULL) //循环得到所有的子窗口 { //memset(s, 0,200); GetWindowTextA(hd, s, 200); //cout << num++ << ": " << s <<sizeof(s) << endl; //由于字符串数组之间无法比较,所以需要转换为字符串 std::string a(&s[0], &s[strlen(s)]); if (a == "Piano") { SendOpern2(hd); printf("演奏成功"); break; } hd = GetNextWindow(hd, GW_HWNDNEXT); } SendOpern(hd); getchar(); return 0; } void SendOpern(HWND hd) { ifstream Opern; Opern.open("Sound.txt", ios::in); char k; while (Opern >> k) { Sleep(800); //此处空格和"\n"都被>>吃掉了 SendMessage( hd, WM_CHAR, k, 0 ); printf("%c\n", k); } } void SendOpern2(HWND hd) { ifstream Opern; Opern.open("Sound.txt", ios::in); string k; while (Opern >> k) { for (auto ele : k) { Sleep(1000); SendMessage( hd, WM_CHAR, ele, 0 ); printf("%c\n", ele); } Sleep(1000); } }
2022年11月18日
7 阅读
0 评论
0 点赞
2022-11-16
安卓巨大漏洞
研究人员 David Schütz 在 Pixel 6 上 发现 严重的安全漏洞,攻击者只需插入一张已知 PIN 码及 PUK 码的 SIM 卡,即可物理解锁你的手机 且漏洞复用方式异常简单:仅需插入这张 SIM 卡、故意输错三次 PIN 码,然后输入正确的 PUK 码,即可绕过锁屏密码解锁手机。 目前 Google 已在 11 月安全更新中修复该漏洞,CVE 编号为 CVE-2022-20465。注意该漏洞理论上也会影响 AOSP,请有条件获得安全更新的设备尽速升级,以免设备遗失被人轻易物理解锁。 由于 Pixel 4 已结束安全更新支持,请寻找带有 11 月安全更新的第三方 ROM 刷入,或等待 Google 推出带外更新修复该漏洞(不保证)相关链接:https://source.android.com/docs/security/bulletin/2022-11-01
2022年11月16日
5 阅读
0 评论
0 点赞
2022-11-15
联合国《世界人口展望2022》报告:全球人口达到80亿!
联合国《世界人口展望2022》报告预计,全球人口在今天达到80亿。打开这份报告,我们还能知道些什么?联合国《世界人口展望2022》报告 图片来源:联合国网站——从70亿到80亿,用了多久? 11年。根据此前联合国人口基金会的统计,全球人口在2011年10月31日达到了70亿。世界人口从70亿增长到今天的80亿,用了11年零半个月。 ——全球最多会有多少人? 约104亿。根据联合国最新预测,到本世纪80年代,全球人口将达到约104亿的峰值,并保持这个水平到2100年。 不过,不同的研究机构给出的数据也存在差异,例如美国华盛顿大学健康指标与评估研究所2020年的一项研究显示,全球人口将在2064年达到峰值,但不会达到100亿,且在2100年将减少至88亿。 ——现在,全球哪里人口最多? 亚洲。2022年,人口最多的两个区域都分布在亚洲:其中东亚和东南亚有23亿人口(约占全球人口29%),中亚和南亚有21亿人口(约占全球人口26%)。 ——印度人口要超过中国了? 快了。中国和印度各有超过14亿的人口,分别占上述两个区域人口的大多数。印度预计最早将于2023年成为第一人口大国,并在2050年达到约16.7亿。 ——哪里新增人口更多? 联合国预计,到2050年,全球新增人口中超过一半将集中在刚果(金)、埃及、埃塞俄比亚、印度、尼日利亚、巴基斯坦、菲律宾和坦桑尼亚8个国家。 ——人口还会继续增长吗? 是的,但增速正在放缓。世界人口在1962-1965年期间的增长率为每年2.1%,此后增速急剧下降,2020年不到1%。到2050年,全球人口年增长率可能会下降到0.5%左右。 此外,2021年,全球人口平均生育率为2.3,即平均每名妇女一生生育2.3个孩子,而在1950年,生育率的数值为5,预计2050年将下降到2.1。 ——人们的寿命如何? 全球的平均预期寿命持续增加。2019年,全球平均预期寿命为72.8岁,比1990年时增加了9岁;到2050年,预计平均预期寿命将达到77.2岁。 不过,持续增加的预期寿命与下降的生育率叠加,将加剧人口老龄化,65岁以上人口占总人口比例,2022年为10%,到2050年将升至16%。 ——联合国怎么说? 联合国秘书长古特雷斯在《80亿人口,一个人类》中表示,人类大家庭在日益壮大的同时,也面临着日益严重的不平等问题。如果不解决这些问题,世界上将充满紧张和不信任、危机和冲突。 他还援引圣雄甘地的话说,“世界上的东西足以满足每个人的需要——但不足以满足每个人的贪欲。”
2022年11月15日
5 阅读
0 评论
0 点赞
2022-11-15
程序员必做50题第1题
题目有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?代码#include <stdio.h> #include <stdlib.h> int main() { int n; int i,j,k; for(i=1;i<5;i++) { for(j=1;j<5;j++) { for(k=1;k<5;k++) { if(i!=j&&i!=k&&j!=k) { printf("%d%d%d\n",i,j,k); n++; } } } } printf("一共有:%d组\n",n); return 0; }运行结果
2022年11月15日
7 阅读
0 评论
1 点赞
1
2
3
4
5
")
首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧