<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">学习4-4期视频</span>
1、 创建线程,并行执行
#include<Windows.h>
#include<process.h>//线程相关
void run(void *p) //void *p,代表一个空地址
{
MessageBoxA(0, "你好", "123", 0);
}
void main()
{
for (int i = 0; i < 5; i++)
{
_beginthread(run, 0, NULL);//第一个位置传递函数,第三个位置传递函数
}
system("pause");
}
多线程->解决并发问题
2、模块化编程
(1)隐藏黑窗口
#include<Windows.h>
#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"") //隐藏黑窗口
void main()
{
MessageBoxA(0, "你好","123", 0);
}
(2)模块化,注入dll
选中解决方案->新建项目,文件->将项目属性中配置类型选为动态库
#include<Windows.h>
_declspec(dllexport) void run() //dll文件不需要main函数
{
MessageBoxA(0, "你好","123", 0);
}
使用dllinject(https://yunpan.cn/cvcXE4Hz3HBRz 访问密码 2540)将生成的dll文件注入,
3、静态库
选中解决方案->新建项目,文件->将项目属性中配置类型选为静态库
调用:须放在调用的项目目录下,属性-》链接器-》输入-》附加依赖项-》添加lib文件;
函数中包含头文件,声明函数 或#pragma commentt(lib,"lib库名")
4、goto
#include<Windows.h>
#pragmacomment(linker,"/subsystem:\"windows\"/entry:\"mainCRTStartup\"") //隐藏黑窗口
void main()
{
AA: MessageBoxA(0, "你好","123", 0);
goto AA; //跳转到上一行
}
5、窗口
HWND win=FindWindowA(“#32770”,”message”);//读取程序的句柄
HWND zi=FindWindowExA(“win”,0,”Button”,”Button1”);//读取子窗口句柄(程序句柄,状态,类名,标题)
SendMessageA(zi,BM_CLICK);//前者为句柄号,后者为状态(BM_CLICK点击,WM_CLOSE退出)
ShowWindow(zi,SW_HIDE);//前者为句柄号,后者为状态(SW_HIDE为隐藏,SW_SHOW为正常显示)
EnableWindow(zi,0);//前者为句柄号,后者为状态(0为不可用,1为正常)
SetWindowPos(zi,NULL,400,400,200,200,0);//句柄,3-4左上角坐标位置,5-6大小,7控制(参数是否可修改)
让操作系统给进程发送消息
SendMessageA(zi,WM_CHAR,65,0);//同步
PostMessageA(zi,WM_CHAR,65,0);//异步