// Windows系统函数.cpp: 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <time.h>
#include <tlhelp32.h>using namespace std;//SendMessage(hWnd,WM_CHAR,WPARAM('g'),0);//发送一个字符(按键)消息g给当前鼠标所指向的窗口句柄
//参数 窗口句柄,WM_CHAR,要按下的键,0//SendMessage(wnd,WM_RBUTTONDOWN,0,0);//鼠标右键按下,第三,四个参数说明了鼠标按下时的位置
//鼠标右键按下的消息类型是“WM_RBUTTONDOWN”,右键松开的消息是“WM_RBUTTONUP”//获取随机数 len随机数范围 [0,len)
void random(const int len) {//头文件time.h 包含time clock函数//time获取1970年到现在的秒数//clock获取毫秒srand(time(0)+clock());//设置随机数种子while (1) {srand(time(0) + clock());//设置随机数种子int r = rand() % len;//cout << r << endl;if (r == 0 || r == len-1)cout << r << endl;}
}
//获取光标(Cursor)位置 根据光标位置获取窗口句柄
void fun1() {while (1) {POINT p;//POINT 点 结构体GetCursorPos(&p);//获取 光标 Pos点(传入 点内存地址)HWND hwnd = WindowFromPoint(p);//窗口 来自 点(传入 结构体点)--返回值 HWND 窗口句柄cout <<"鼠标位置X:"<<p.x<<" Y:"<<p.y<<"\n窗口句柄"<< hwnd <<endl;Sleep(100);}
}//移动窗口 改变窗口大小 是否重绘
void fun2() {HWND hwnd = FindWindowA("Notepad","无标题 - 记事本");//窗口句柄 x y w h 是否重绘bool b=MoveWindow(hwnd,1000,500,900,500,0);cout << "返回值" << b << endl;
}//设置窗口显示状态,如隐藏,最大化,最小化
void fun3() {HWND hwnd = FindWindowA("Notepad", "无标题 - 记事本");ShowWindow(hwnd, SW_SHOWNORMAL);//SW_HIDE:隐藏窗口并激活其他窗口。并激活其他窗口?当隐藏用//SW_MAXIMIZE:最大化指定的窗口。//SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。//SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。//SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。//SW_SHOWNORMAL 正常显示
}//设置鼠标的位置、把鼠标移动到指定的位置
void fun4() {SetCursorPos(1042, 93);//srand(123);//设置随机数种子srand(time(0));//获取系统时间 设置随机数种子cout << rand() << endl;cout << rand() << endl;cout << rand() << endl;cout << rand() << endl;cout << rand() << endl;
}//获得窗口大小
void fun5() {HWND hwnd = FindWindowA("Notepad", "无标题 - 记事本");RECT rect;//矩形 结构体//获取 客户端 矩形,参数1 窗口句柄,参数2 矩形指针,返回值 BOOLbool b1 = GetClientRect(hwnd, &rect);cout << "GetClientRect返回值" << b1 << endl;cout << "left:" << rect.left << endl; //0cout << "top:" << rect.top << endl; //0cout << "right:" << rect.right << endl;cout << "bottom:" << rect.bottom << endl;//因为与位置无关 所以left=0 top=0,right窗口宽度 bottom高度//注意:right bottom 为窗口实际的宽高cout << endl;//相对屏幕bool b2 = GetWindowRect(hwnd, &rect);cout << "GetWindowRect返回值" << b2 << endl;cout << "left:" << rect.left << endl;cout << "top:" << rect.top << endl;cout << "right:" << rect.right << endl;cout << "bottom:" << rect.bottom << endl;//right-left=宽度//bottom-top=高度cout << "width:" << rect.right - rect.left << endl;cout << "height:" << rect.bottom - rect.top << endl;//注意:width height 不是窗口实际的宽高(QQ截图用的就是这个函数,和QQ截图里计算的结果一样)
}//运行一个程序
void fun6() {//运行的程序启动路径为当前程序的启动路径//第一个参数hwnd是父窗口的句柄,可以为NULL//第二个参数lpOperation表示行为//第三个参数lpFile是程序的路径名//第四个参数lpParameters是给所打开程序的参数,可以为NULL//第五个参数lpDirectory可以为NULL//第六个参数nShowCmd跟ShowWindow函数的第二个参数一样,作用也一样,如果打开的程序有窗口的话,这个参数就指明了窗口如何显示SW_SHOWNORMAL(正常显示)//字符集://字符集"open"使用的是ascii//L"open"使用的是unicode,L"open" 相当于 _T("open")//HWND hwnd = FindWindowA("Notepad", "无标题 - 记事本");//ShellExecute(hwnd, L"open", _T("NOTEPAD.exe"), NULL, NULL, SW_SHOWNORMAL);//ShellExecute(0, L"open", _T("NOTEPAD.exe"), NULL, NULL, SW_SHOWNORMAL);//ShellExecute(0, L"open", _T("NOTEPAD.exe"), L"C:\\Users\\Liziguo\\Desktop\\新建文本文档.txt", NULL, SW_SHOWNORMAL);//传参 打开桌面的记事本//ShellExecute(0, L"open", _T("java"), L"-jar C:\\Users\\Liziguo\\Desktop\\windows.h.jar", NULL, SW_SHOWNORMAL);//传参//ShellExecute(0,L"open",L"http://www.liziguo.cn",0,0,SW_SHOWNORMAL);//打开一个网址//ShellExecute(0,L"open",L"C:",0,0,SW_SHOWNORMAL);//打开C盘//ShellExecute(NULL, L"open", L"g:\\瓦力高清2.jpg", NULL, NULL, SW_SHOWNORMAL);//还可以根据文件后缀名选择相应的程序打开一个文件//类似的函数还有WinExec,只有两个参数, 它的最后一个参数跟ShellExecute函数的最后一个参数一样//WinExec("NOTEPAD.EXE", SW_SHOWNORMAL);//WinExec("java -jar C:\\Users\\Liziguo\\Desktop\\windows.h.jar", SW_SHOWNORMAL);//传参
}//GetModuleFileName根据模块导入表获取程序的完整路径
//CreateWindow创建窗口 跳过//GetDC根据窗口句柄获取设备上下文。得到了一个窗口的设备上下文,就可以进行画图操作了,像画圆,画正方形,显示图片等函数都是要设备上下文(DC)句柄做参数的。
void fun7() {HWND hwnd = FindWindowA("Notepad", "无标题 - 记事本");HDC dc = GetDC(0);//获取这个窗口的设备上下文while (1) {//在窗口里画矩形(窗口被刷新时消失)Rectangle(dc, 20, 20, 120, 120);//left top right bottomSleep(50);}
}//在光标指向的窗口画图
void fun8() {POINT p;while (1) {GetCursorPos(&p);HWND hwnd = WindowFromPoint(p);HDC hdc = GetDC(hwnd);Rectangle(hdc, 20, 20, 120, 120);Sleep(50);}
}//30.CreateToolhelp32Snapshot给当前进程拍一个照
//Process32First根据CreateToolhelp32Snapshot函数返回的句柄获取进程信息//TerminateProcess结束一个进程
void fun9() {HWND hwnd = FindWindowA("Notepad", "无标题 - 记事本");DWORD id;GetWindowThreadProcessId(hwnd, &id);HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, id);TerminateProcess(handle, 0);//第一个是进程句柄,第二个填0就行了}//CreatePen创建一个画笔(返回画笔句柄)CreateSolidBrush创建一个画刷。相当于fun8()设置了 画笔和画刷
void fun10() {//函数定义:BOOL CreatePen(int nPenStyle, int nWidth, COLORREFcrColor);//第一个参数,表示是什么类型的线,取值有以下://PS_SOLID 画笔画出的是实线 PS_DASH 画笔画出的是虚线(nWidth必须是1) PS_DOT 画笔画出的是点线(nWidth必须是1)//PS_DASHDOT 画笔画出的是点划线(nWidth必须是1) PS_DASHDOTDOT 画笔画出的是点 - 点 - 划线(nWidth必须是1)//第二个参数是画笔的宽度,第三个参数是画笔的颜色,COLORREF类型可以RGB来获得如RGB(233, 128, 88); 分别是红绿蓝。//如创建一个画笔:HPEN pen = CreatePen(PS_SOLID, 3, RGB(255, 78, 99));//----------------------------------------------------------------------------------------------------------//CreateSolidBrush创建一个画刷//只有一个COLORREF类型的参数//HBRUSH brush = CreateSolidBrush(RGB(22, 182, 111));POINT p;HPEN hpen = CreatePen(PS_DOT, 1, RGB(7, 47, 231));HBRUSH hbrush = CreateSolidBrush(RGB(220, 220, 12));while (1) {GetCursorPos(&p);HWND hwnd = WindowFromPoint(p);HDC hdc = GetDC(hwnd);SelectObject(hdc, hpen);//选入画笔SelectObject(hdc, hbrush);//选入画刷Rectangle(hdc, 20, 20, 120, 120);Sleep(1);}
}//获取系统进程快照 获取系统所有进程
void fun11() {/*进程信息结构体:typedef struct tagPROCESSENTRY32 {DWORD dwSize;//结构大小DWORD cntUsage;//此进程的引用计数DWORD th32ProcessID;//进程IDDWORD th32DefaultHeapID;//进程默认堆IDDWORD th32ModuleID;//进程模块IDDWORD cntThreads;//此进程开启的线程计数DWORD th32ParentProcessID;//父进程IDLONG pcPriClassBase;//线程优先权DWORD dwFlags;//保留char szExeFile[MAX_PATH];//进程名} PROCESSENTRY32;*///记住这种格式就行了,返回的句柄,存储有进程信息,可以用Process32Firs函数找出来。//头文件tlhelp32.h//HANDLE hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//创建 工具 帮助 32 快照HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//参数记住就行了,成功返回句柄 失败返回INVALID_HANDLE_VALUE(-1)if (handle == INVALID_HANDLE_VALUE) {cout << "获取当前系统进程快照失败" << endl;}PROCESSENTRY32 processentry32;//结构体:程序 进口 32//在使用这个结构之前,先设置它的大小processentry32.dwSize = sizeof(processentry32);bool b=Process32First(handle, &processentry32);while(b) {/*cout << "结构大小 " << processentry32.dwSize << endl;cout << "此进程的引用计数 " << processentry32.cntUsage << endl;cout << "进程ID " << processentry32.cntUsage << endl;cout << "进程默认堆ID " << processentry32.th32DefaultHeapID << endl;cout << "进程模块ID " << processentry32.th32ModuleID << endl;cout << "此进程开启的线程计数 " << processentry32.cntThreads << endl;cout << "父进程ID " << processentry32.th32ParentProcessID << endl;cout << "线程优先权 " << processentry32.pcPriClassBase << endl;cout << "保留 " << processentry32.dwFlags << endl;*///cout << "进程名 " << processentry32.szExeFile << endl;printf("%ls\n", processentry32.szExeFile);printf("进程ID号:%u\n\n", processentry32.th32ProcessID);//th32ProcessID是进程ID号cout << endl;b=Process32Next(handle, &processentry32);}CloseHandle(handle);//列举完后,需要调用CloseHandle函数关闭系统进程句柄
}//创建一个线程(多线程)
DWORD _stdcall xiancheng(LPVOID lpvoid) {POINT p;while (1) {GetCursorPos(&p);HWND hwnd = WindowFromPoint(p);HDC hdc = GetDC(hwnd);Rectangle(hdc, 20, 20, 120, 120);Sleep(50);}
}
//创建一个线程(多线程)
void fun12() {//第一个参数不用管它,填NULL//第二个参数dwStackSize用于新线程的初始堆栈大小,默认为0//第三个lpStartAddress填函数名(指标),但这个函数必须是这种固定格式的DWORD _stdcall xiancheng(LPVOID lpParameter), 新的线程将会执行这个函数里面的代码,直到函数结束,线程死亡//第四个lpParameter是一自定义参数,用户可以通过这个参数,传递需要的类型,这个参数与线程函数的参数相对应//第五个dwCreationFlags填0表示立即执行,如果是CREATE_SUSPENDED表示挂起,直到用ResumeThread函数唤醒//第六个lpThreadId填NULL就行了。CreateThread(0,0,xiancheng,0,0,0);Sleep(5000);//不管创建的线程是否结束 进程都会关闭
}//获取当前进程ID
void fun13() {cout << "当前进程ID:" << ::GetCurrentProcessId() << endl;
}//在窗口输出一个位图
void fun14() {BITMAP bmInfo;//这个结构存储位图信息HBITMAP bmp;bmp = (HBITMAP)LoadImage(NULL, L"G:\\瓦力高清2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//第一个参数hgdiobj是对象句柄,第二个参数cbBuffer是待写入lpvObject指针指向缓存区数据大小,第三个参数lpvObject是一个指针,指向一个缓存区。GetObject(bmp, sizeof(BITMAP), &bmInfo);//获取位图信息HWND wnd = FindWindow(L"Notepad", L"无标题.txt - 记事本");HDC hdc = GetDC(wnd);HDC memDC = ::CreateCompatibleDC(hdc);//创造兼容的DCSelectObject(memDC, bmp);//选入位图while (1){BitBlt(hdc, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, memDC, 0, 0, SRCCOPY);//输出位图Sleep(200);}
}//GetWindowText根据窗口句柄获得窗口标题名
void fun15() {POINT p;wchar_t ch[100] = {0};while (1) {GetCursorPos(&p);HWND hwnd = WindowFromPoint(p);GetWindowText(hwnd, ch, 100);printf("%ls",ch);cout << endl;Sleep(100);}}//SetWindowText根据窗口句柄设置窗口标题名
void fun16() {//HWND hwnd = FindWindowA("TXGuiFoundation", "Innocence.等3个会话");//SetWindowText(hwnd, L"李子果");SetWindowText((HWND)0x003E0670,L"李子果123");}//GetCurrentProcess获得当前线程句柄//OpenProcessToken获得一个进程的访问令牌句柄
void fun17() {/*获得一个进程的访问令牌有什么用呢?主要是为了修改它的权限,前面在介绍结束一个进程的时候说过了,无法结束系统进程,是什么原因呢,原因是调用OpenProcess函数失败,无法获取系统进程句柄而引起的,那为什么会失败呢,权限不够,普通程序的进程没有SeDeDebug权限,而一个进程的权限是与访问令牌相关的,这样我们只要获取一个进程的访问令牌句柄,再以这个句柄为参数调用相应的函数提升进程的权限为SeDeDebug就可以获取系统进程句柄,进而结束它。*///第一个参数ProcessHandle待获取的进程句柄//第二个参数DesiredAccess操作类型,填TOKEN_ADJUST_PRIVILEGES就行了//第三个TokenHandle是访问令牌句柄的指针,该参数接收句柄//GetCurrentProcess()获取当前进程句柄,TOKEN_ADJUST_PRIVILEGES填这个,接收令牌的指针HANDLE handle;OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,&handle);//TOKEN_PRIVILEGES是描述进程权限的结构体//LookupPrivilegeValue函数查看对应系统权限的特权值,返回信息到一个LUID结构体里//第一个参数lpSystemName通常都填NULL,本地系统调用,第二个参数lpName填要查询的权限名,如要查询的是SeDeDebug权限则取值是SE_DEBUG_NAME,第三个参数lpLuid接收其取值。//如LUIDluid; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid);//AdjustTokenPrivileges调整一个进程的访问令牌信息(权限)//第一个参数TokenHandle是令牌句柄//第二个是禁用所有权限标志,后面填FALSE就行了//第三个NewState是待刷进令牌句柄的PTOKEN_PRIVILEGES结构信息指针//第四个BufferLength指明TOKEN_PRIVILEGES结构大小//第五,六个参数填NULL就行了。
}//提升权限 结束系统进程
void fun18() {//那么结合上面两个函数,提升一个进程权限制,让它能够结束系统进程的代码就是:HANDLE handle;OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &handle);TOKEN_PRIVILEGES tp;LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);tp.PrivilegeCount = 1;//tp里其它一些属性设置tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(handle, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL);DWORD id;GetWindowThreadProcessId((HWND)0x000806E6, &id);HANDLE ha = OpenProcess(PROCESS_ALL_ACCESS, false, id);cout << ha << endl;TerminateProcess(ha, 0);
}//RegisterHotKey注册一个热键
void fun19() {//第一个参数hWnd表明热键消息(HOT_KEY)发送给哪个窗口,为NULL表明直接把消息投递给调用这个函数进程的消息队列。//第二个参数可以自定取值,取值范围0xC000 - 0xFFFF, 这个参数是为了程序能同时拥有多个热键而存在。//第三个参数fsModifiers的可选取值如下:MOD_ALT(Alt键),MOD_CONTROL(Ctrl键),MOD_SHIFT(Shift键),MOD_WIN(‘田’图标键)//最一个参数是一个ASCII值,指明具体和哪个非系统键组合。//如QQ的热键ctrl+alt+z,注册这个热键的语句是RegisterHotKey(NULL,0x0001,MOD_CONTROL|MOD_ALT,‘Z’)//如QQ的截图热键RegisterHotKey(NULL, 0x0001, MOD_CONTROL | MOD_ALT, 'A')
}int main()
{//fun5();//fun8();fun18();return 0;
}

windows.h系统函数相关推荐

  1. Windows硬件系统函数 - ClipCursor, ClipCursorBynum

      VB声明 Declare Function ClipCursor& Lib "user32" (lpRect As RECT) Declare Function Cli ...

  2. Windows.h 常用API函数【转】

    转自:https://blog.csdn.net/farmwang/article/details/50603608 http://www.vbgood.com/api.html http://hi. ...

  3. windows常用 API函数

    系统API查询 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个 ...

  4. C++图书馆管理系统——基于jsoncpp与windows.h

    0. 演示视频 先直接上演示视频看看具体的实现效果 C++图书馆管理系统--基于jsoncpp和windows.h 系统的代码打包为百度云 链接:https://pan.baidu.com/s/1Lm ...

  5. c语言库的学习——windows.h

    1.http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ffae3 第一个:FindW ...

  6. windows.h 详解

    参考windows.h解构 刚开头的一段注释是对该头文件的描述: /*++ BUILD Version: 0001 Increment this if a change has global effe ...

  7. windows.h详解

    参考 http://blog.csdn.net/fengningning/article/details/2306650?locationNum=1&fps=1 windows.h解构 刚开头 ...

  8. windows常用API函数

    windows常用API函数 http://www.vbgood.com/api.html http://hi.baidu.com/3582077/item/9cc3483b581f53c5392ff ...

  9. windows.h有哪些函数

    C语言windows.h库的常用函数 1:FindWindow函数 该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用.例 ...

最新文章

  1. 查询所有张姓同学学号6_只需简单几步 做出属于老师自己的专属成绩查询表格 方便家长查询...
  2. 2021年4月22日 阿里供应链Java开发实习面试(三面)(含总结)
  3. java鼠标样式设置,设置Echarts鼠标悬浮样式
  4. smc数显压力表设定方法_SMC压力表使用注意与调试方法
  5. 嵌入式系统开发入门一:必备基础知识
  6. Java中的观察者设计模式
  7. 以命令行的方式运行activity
  8. beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel
  9. 一步步实现SDDC-双节点VSAN部署
  10. 微信退款参数格式错误
  11. java查看当前活动的线程数量
  12. 2019年7月9日星期二(C语言)
  13. 回音消除--富迪科技
  14. L298N驱动俩路电机按键控制正反转
  15. 【解决方法汇总】SpringBoot项目报错 Could not resolve placeholder ‘‘ in value “${}“
  16. 二元函数对xy同时求导_复变函数(1)——解析与保角,导数的几何意义,柯西-黎曼方程...
  17. 软件开发中的3P和1A
  18. 百知教育-胡鑫喆讲师-java-第一章03
  19. 苏彤,你的 Python Flask 编写生成二维码接口写完了
  20. php语言做心理测评系统,心理测评系统

热门文章

  1. php 中文域名,如何注册中文域名?
  2. Freenom注册免费域名的方法
  3. 电话和网上订购火车票
  4. CAT分布式监控系统:CAT功能介绍,CAT监控系统是什么,能做什么?
  5. 湖南大学计算机专业女生宿舍,湖南大学宿舍条件,宿舍环境图片(10篇)
  6. .Net开源框架列表【转载】
  7. 将chrome中的收藏夹导入edge
  8. Android之targetSdkVersion详解
  9. 犯罪心理学Seasons one
  10. 新疆最新建筑八大员(资料员)模拟真题集及答案解析