-
2018-06-20 14:27:50
GetCursorPos函数
在上一篇中的WindowFromPoint函数的示例代码中就已经用到了GetCursorPos函数,这是一个用于获取鼠标指针位置的函数。#include<stdio.h> #include<windows.h> #include<time.h> int main(){ POINT mouse; //用来储存鼠标的x y坐标 while(1){ GetCursorPos(&mouse); //调用GetCursorPos函数获取坐标值 printf("%d,%d\n",mouse.x,mouse.y); Sleep(300); } return 0; }
SetCursorPos函数
上一个既然讲到了Get到鼠标的坐标,那么,也一定能Set鼠标的坐标,SetCursorPos函数就是用来设置鼠标坐标的函数。函数的用法就是SetCursorPos(x坐标,y坐标)。#include<windows.h> int main(){ int i; while(i < 100000){ SetCursorPos(100,100); i += 1; } return 0; }
ShowWindow函数
这个函数用来实现对windows窗口包括最大化最小化隐藏在内的操作,具体用法为ShowWindow(句柄变量名,功能)。
功能例如 SW_HIDE 隐藏窗口、SW_MAXIMIZE 最大化窗口、SW_MINIMIZE 最小化窗口、SW_RESTORE 还原窗口。#include<windows.h> #include<stdio.h> #include<time.h> int main(){ HWND window; window = FindWindow(NULL,"新建文本文档.txt - 记事本"); ShowWindow(window,SW_HIDE); //隐藏窗口 Sleep(5000); ShowWindow(window,SW_MAXIMIZE); //最大化窗口 Sleep(5000); ShowWindow(window,SW_MINIMIZE); //最小化窗口 Sleep(5000); ShowWindow(window,SW_RESTORE); //还原窗口 Sleep(5000); return 0; }
更多相关内容 -
Windows.h 库函数的学习
2022-04-23 18:38:54应用程序总是通过调用Windows API获得一个句柄,之后其他 Windows函数就可以使用该句柄,以引用和操作相应的内核对象。句柄可以像指针那样置空,那样句柄就没有任何意义,不代表任何内核对象。 句柄地址(稳定)→...句柄:
句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控制、位图、GDI对象、资源、文件等 。
从数据类型上来看,它只是一个16位的无符号整数。应用程序总是通过调用Windows API获得一个句柄,之后其他 Windows函数就可以使用该句柄,以引用和操作相应的内核对象。句柄可以像指针那样置空,那样句柄就没有任何意义,不代表任何内核对象 。
句柄地址(稳定)→记载着对象在内存中的地址→对象在内存中的地址(不稳定)→实际对象
句柄是一种指向指针的指针。在Windows中,句柄是一个系统内部数据结构的引用。
1、FindWindow函数
该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄。
HWND FindWindowW( [in, optional] LPCWSTR lpClassName, [in, optional] LPCWSTR lpWindowName );
lpClassName: "lp"可以当作指针,"ClassName" 为类名。
lpWindowName:前面"lp"一样,"WindowsName"为窗口标题。
LPCWSTR:是一个指向unicode编码字符串的32位指针,wchar型,而不是char型
其相当于WCHAR*,wchar数据类型一般为16或32位,wchar_t所能表示的字符数远超char型。
这里可以用SPY++抓类名/窗口标题。
抓目标窗口,这里就复制标题来抓句柄。
2、SendMessage函数
这个函数的功能是向句柄对应窗口发送指令
SendMessage function (winuser.h) - Win32 apps | Microsoft Docs
LRESULT SendMessage( [in] HWND hWnd, [in] UINT Msg, [in] WPARAM wParam, [in] LPARAM lParam );
HWND 窗口句柄
UINT 消息名称
关于消息的文档看这About Messages and Message Queues
文档里可以查到所有消息类型,常用的像是WM前缀下的窗口消息,剪贴板消息等
WPARAM 消息附带内容
LPARAM 消息附带内容
一个是WORD类型的16位整型变量;另一个是LONG类型的32位整型变量。因此根据匈牙利命名法,16位的变量就被命名为wParam, 32位的变量就被命名为lParam。
消息响应机制
消息的组成:一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)组成。当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。例如当菜单选中之后会有WM_COMMAND消息发送,WPARAM的低字中(LOWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。当然用户也可以定义自己的消息名称,也可以利用自定义消息来发送通知和传送数据。
Message.LParam Property (System.Windows.Forms) | Microsoft Docs
UNI 例子1- WM_CLOSE
WM_CLOSE message (Winuser.h) - Win32 apps | Microsoft Docs
LRESULT CALLBACK WindowProc( __in HWND hWindow, __in UINT uMsg, __in WPARAM wParam, __in LPARAM lParam) { switch (uMsg) { case WM_CLOSE: DestroyWindow(hWindow); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWindow, uMsg, wParam, lParam); } return 0; }
By default, the DefWindowProc function calls the DestroyWindow function to destroy the window.
这里说明传入UNI类型数据的值为WM-CLOSE时 会通过DestroyWindow这个函数来摧毁当前窗口,DestroyWindow的如何实现,好奇的话可以点进去看看。
代码
//摧毁窗口测试 void testHWND() { HWND window; //定义一个窗口句柄变量,用来储存窗口句柄 window = FindWindow(NULL, TEXT("文件资源管理器")); SendMessage(window, WM_CLOSE, 0, 0);//不需要附带内容 }
打开一枚窗口
运行,发现窗口君他消失了
UNI 例子2- WM_SETTEXT
官方文档,定义,评论
The DefWindowProc function sets and displays the window text. For an edit control, the text is the contents of the edit control. For a combo box, the text is the contents of the edit-control portion of the combo box. For a button, the text is the button name. For other windows, the text is the window title.
简单来说就是,根据物件的不同改不同的名字,按钮改按钮的名字,窗口就改标题。
WM_SETTEXT message (Winuser.h) - Win32 apps | Microsoft Docs
试着写个代码改标题,结果成功了
//设置改标题 void testHWND2() { HWND window; //定义一个窗口句柄变量,用来储存窗口句柄 window = FindWindow(NULL, TEXT("文件资源管理器")); SendMessage(window, WM_SETTEXT, 0, LPARAM(TEXT("喷3快来 我tm社保")));//属于long parameter的类型?我也不懂 }
这里遇到2个问题:
1.没法直接把字符串变成LPARAM类型传进去。但用LPARAM(" ")的形式可以传进去,推测是转型成了LPARAM类型。
2.字符串不作处理会出现乱码(估计C++会,而C不会),字符串前加TEXT可以转成unicode字符串就没有乱码了。
执行后
UNI 例子3-WM_CHAR
文档WM_CHAR message (Winuser.h) - Win32 apps | Microsoft Docs
Parameters
wParam
The character code of the key.
用这个参数就完事了
The WM_UNICHAR message is similar to WM_CHAR, but it uses Unicode Transformation Format (UTF)-32, whereas WM_CHAR uses UTF-16.
这里提到UNICHAR可以使用更高字节数32位,但WM_CHAR可以使用16位的unicode字符,其实就已经可以使用中文了,足矣。
可以写个往QQ窗口写入信息,回车模拟发送的程序。
//发送 void sendKey() { HWND window; //定义一个窗口句柄变量,用来储存窗口句柄 window = FindWindow(NULL, TEXT("XXX")); //根据需要抓窗口 //英文 string str1 = "This is automatic English sentence."; for (char c : str1) SendMessage(window, WM_CHAR, WPARAM(c), NULL);//英文用char遍历 //中文 wchar_t str2[] = L"这是代码执行的中文自动消息";//string 改成wchar_t 数组成功了 for(wchar_t c:str2) SendMessage(window, WM_CHAR, WPARAM(c),NULL);//中文用unicode/wchar_t遍历 //回车发送 SendMessage(window, WM_KEYDOWN, VK_RETURN, NULL); }
问题:用中文的时候用char遍历会乱码,要改成:wchar_t来获取中文字符。
-
stdio.h 库函数下载
2019-04-17 11:48:15我在编写"Hello World !"时,刚写第一行代码, IDE就...其实是因为stdio.h文件的缺失造成的,解决方法很简单:把stdio.h文件下载到”C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\x64“路径下即可。 -
C语言windows.h有哪些函数?
2021-05-20 06:43:02C语言windows.h库的常用函数:1、FindWindow函数该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用。)函数用法:#include "stdafx.h"#.....Windows.h是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。下面我们就来看一下这个头文件中有哪些函数。
C语言windows.h库的常用函数:
1、FindWindow函数
该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用。)
函数用法:#include "stdafx.h"
#include
int main() {
HWND window; //定义一个窗口句柄变量,用来储存窗口句柄
/*FindWindow("这里填窗口类名","这里填窗口标题名")
窗口类名和窗口标题名可以只填一个,不填的用NULL填充*/
window = FindWindow(NULL,"文本.txt - 记事本"); //查找标题为"文本.txt - 记事本"的窗口
SendMessage(window,WM_CLOSE,0,0); //向窗口发送关闭指令
return 0;
}
2、SendMessage函数
这个函数的功能是向句柄对应窗口发送指令
函数用法#include "stdafx.h"
#include
int main() {
POINT mouse;
HWND window;
while (1) {
GetCursorPos(&mouse);
window = WindowFromPoint(mouse);
/*SendMessage(窗口句柄,消息类型,消息附带内容,消息附带内容)
比如我这里选定的消息类型是WM_CHAR
消息附带内容为WPARAM('a')
所以消息附带内容就是模拟键盘向窗口输入a*/
SendMessage(window,WM_CHAR,WPARAM('a'),0);
Sleep(100);
}
return 0;
}
3、WindowFromPoint函数
这个函数的功能是通过鼠标点击获得被点击窗口的句柄
函数用法#include "stdafx.h"
#include
int main() {
POINT mouse; //定义一个结构体变量储存鼠标位置
HWND window;
while (1) {
GetCursorPos(&mouse); //获取到当前鼠标位置
/*WindowFromPoint(鼠标位置变量名)*/
window = WindowFromPoint(mouse);
SendMessage(window,WM_CLOSE,0,0);
Sleep(100);
}
return 0;
}
4、GetCursorPos函数
这是一个用于获取鼠标指针位置的函数。#include
#include
#include
int main(){
POINT mouse; //用来储存鼠标的x y坐标
while(1){
GetCursorPos(&mouse); //调用GetCursorPos函数获取坐标值
printf("%d,%d\n",mouse.x,mouse.y);
Sleep(300);
}
return 0;
}
5、SetCursorPos函数
SetCursorPos函数就是用来设置鼠标坐标的函数。函数的用法就是SetCursorPos(x坐标,y坐标)。#include
int main(){
int i;
while(i < 100000){
SetCursorPos(100,100);
i += 1;
}
return 0;
}
6、ShowWindow函数
这个函数用来实现对windows窗口包括最大化最小化隐藏在内的操作,具体用法为ShowWindow(句柄变量名,功能)。#include
#include
#include
int main(){
HWND window;
window = FindWindow(NULL,"新建文本文档.txt - 记事本");
ShowWindow(window,SW_HIDE); //隐藏窗口
Sleep(5000);
ShowWindow(window,SW_MAXIMIZE); //最大化窗口
Sleep(5000);
ShowWindow(window,SW_MINIMIZE); //最小化窗口
Sleep(5000);
ShowWindow(window,SW_RESTORE); //还原窗口
Sleep(5000);
return 0;
}
更多相关知识请关注前端学习网站
-
C语言windows.h库的常用函数(四)
2020-02-24 15:57:36CopyFile函数 用途 CopyFile函数可以用来复制文件到指定目录。 参数 CopyFile("文件源目录","文件目标目录",TRUE or FALSE); 其中第三个参数如果设为TRUE(非零),那么一旦目标文件已经存在,则...windows.h> ...CopyFile函数
用途
CopyFile函数可以用来复制文件到指定目录。
参数
CopyFile("文件源目录","文件目标目录",TRUE or FALSE);
其中第三个参数如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件会被覆盖掉。
实例
将D盘根目录1.txt复制到E盘根目录并命名为2.txt
#include <windows.h> void main(){ CopyFile("d:\\1.txt","e:\\2.txt",FALSE); }
DeleteFile函数
用途
用于删除文件
参数
DeleteFile("要删除的文件路径和文件名");
实例
删除D盘根目录下文件test.txt
#include <windows.h> void main(){ DeleteFile("d:\\test.txt"); }
CreateDirectory函数
用途
创建一个目录
参数
CreateDirectory("文件夹路径名",NULL); //一次只能创建一级路径,而不能创建多级路径
实例
在D盘根目录创建testdir目录
#include <windows.h> void main(){ DeleteFile("d:\\testdir",NULL); }
RemoveDirectory函数
用途
创建一个目录
参数
RemoveDirectory("目录路径名"); //只能删除空目录
实例
在D盘根目录删除testdir目录
#include <windows.h> void main(){ RemoveDirectory("d:\\testdir"); }
-
C语言windows.h库的常用函数(一)
2018-05-16 22:06:34该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的引用。例如当你操作一个窗口,或说是一个Delphi窗体时,系统会给你一个该窗口的句柄,... -
c语言库的学习——windows.h
2019-11-25 22:29:52#include<windows.h>//API函数的头文件 int main() { HWND wnd;//定义一个窗口句柄变量,用以存储找到的窗口句柄 wnd=FindWindow(NULL,“无标题.txt - 记事本”);//获得窗口名为"无标题.txt - 记事本"的窗口句柄... -
c语言中dos.h和bios.h中有哪些库函数?具体的
2021-05-22 03:02:50} // FloppyIO.h /* defines */ #define FLOPPY_READ 2 #define FLOPPY_WRITE 3 #define FLOPPY_READY 4/* test if floppy is ready now, if so return 1, else 0 */ int IsFloppyReady(void); /* write first head... -
c语言中memory.h有什么作用
2021-05-20 17:45:17提供了内存操作相关的一些函数及声明,如:extern void *memchr(const void *, int, size_t);extern void *memccpy();extern void *memchr();extern void *memcpy();extern void *memset();extern int memcmp();... -
c语言库函数总结----stdlib.h库
2019-11-18 19:33:39思维导图大纲 前言 stdlib .h 头文件定义了四...库函数 stdlib.h 函数原型 double atof(const char *str) //时间:2019年11月15日 //作者:Kroner //编译环境:VS 2019 //库函数 stdlib.h //函数原型 do... -
C语言中头文件 windows.h什么意思
2019-11-26 20:58:58Windows.h头文件之所重要,是因为头文件封装了许多库函数以及一些类,将一些复杂的工作由库函数处理,Windows.h头文件中包含了Windef.h、Winnt.h、Winbase.h、Winuser.h、Wingdi.h等头文件,涉及到了Windows内核API... -
windows.h有哪些函数
2021-08-20 00:08:53C语言windows.h库的常用函数1:FindWindow函数该函数可以通过窗口类名或者窗口标题名来查找特定窗口句柄,返回值是窗口的句柄(在Windows中,句柄是一个系统内部数据结构的... -
c语言库函数总结----string.h库
2019-11-15 11:41:59string.h库函数是工程中很常用的字符串操作库函数。 在这篇博客中总结一下常用的几个string.h有关的库函数,在工程中避免重复造轮子,换句话说提高工程效率 (* ̄︶ ̄)。 char *strcpy(char *destin, const char *... -
C语言头文件#include<unistd.h>的作用
2021-05-23 11:09:5440%等级:7已帮助:908人#include符号常量是POSIX标准定义的unix类系统定义符号常量的头文件,包含了许多UNIX系统服务的函数原型,例如read函数、write函数和getpid函数unistd.h在unix中类似于window中的windows.h!... -
C语言字符串处理库函数
2021-05-19 09:13:01http://blog.csdn.net/pipisorry/article/details/36898405使用C语言字符串处理的库函数,务必包含头文件string.h,即#include 1、 比较字符串大小函数1) 忽略大小写---strcasecmp函数原型: int strcasecmp (const ... -
C 语言 时间操作(time.h)
2022-04-15 00:47:05在C语言中,用time_t来表示时间数据类型,它是一个long类型的别名,在time.h文件中定义,表示一个日历时间,是从1970年1月1日0时0分0秒到现在的秒数 typedef long time_t; 1.1、time库函数 time函数返回1970年1月... -
#include<windows.h>
2022-02-02 08:06:29Windows.h头文件之所重要,是因为头文件封装了许多库函数以及一些类,将一些复杂的工作由库函数处理。Windows.h头文件中包含了Windef.h、Winnt.h、Winbase.h、Winuser.h、Wingdi.h等头文件,涉及到了Windows内核API... -
C语言dos.h中的system浅析
2019-06-16 19:37:12以前一直是用Microsoft Windows下调用一些简单的命令,现在也可以在C语言程序中调用了。其实以前接触过,没放在心上,觉得用处不大,但其在实用方面,用处很大。 例如: C语言调用DOS命令实现定时关机 #include&... -
关于C语言大做业的一些提示和一些C语言的库函数
2021-05-21 15:10:46web 二、#include “time.h”库是C/C++中的日期和时间头文件。用于须要时间方面的函数。用于生成随机数。srand函数随机数发生器的初始化函数,使用的时候用rand()%i函数得到0~i-1之间的随机数,其中i为整数通常初始... -
fcntl函数的使用详解
2021-05-25 04:56:08(1)fcntl函数说明前面的这5个基本函数实现了文件的打开、读写等基本操作,这一节将讨论的是,在文 件已经共享的情况下如何操作,也就是当多个用户共同使用、操作一个文件的情况,这时,Linux 通常采用的方法是给文件... -
strcasecmp,strncasecmp函数实现——strings.h库函数
2015-12-01 01:35:50strcasecmp和strncasecmp函数相当于windows下的stricmp和strnicmp函数! 信息来自RHEL,man page: STRCASECMP( 3 ) Linux Programmer's Manual STRCASECMP( 3 ) NAME strcasecmp, strncasecmp - compare two... -
C语言常用标准库函数整理
2020-04-08 20:27:44标准库函数是一个工具箱,极大的扩展了C语言的能力 整形函数 这组函数返回整形值。这些函数分为三类:算数,随机数 和 字符串转换。 算数:<stdlib.h> 函数原型: int abs( int value); 返回它参数的绝对值... -
c语言_头文件_windows.h
2014-03-11 14:00:00WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是: WINDEF.H 基本数据类型定义。 WINNT.H 支持Unicode的类型定义。 WINBASE.... -
pow函数以及math.h的一些坑
2018-12-12 09:47:26本文来自独孤伶俜的博客: pow函数以及math.h的一些坑 - 独孤伶俜 pow函数以及math.h的...主要是C语言函数库中main.h中的pow(); 等函数有这个问题 问题的重现性和随机性还有得到的结果可能和你的编译器和cpu架构有... -
c语言main.c文件简单解析
2021-05-19 15:52:19屏幕快照 2016-05-29 15.40.53.png下面我们针对上述代码做一个简单的解析=========================一、#include 1、#include 是c语言的预处理指令之一,所谓预处理,就是在编译之前做的... -
C语言调用C++实现的库函数方法
2021-08-08 21:19:01C语言调用C++实现的库函数方法Linux 平台Windows 平台 在 C 语言代码工程中经常会用到其他高级语言生成的动态、静态库函数,对于这种情况就需要进行特别处理。本文针对 C++ 实现的一系列库函数在 C 语言代码中的调用... -
C语言常用的库函数以及随机数的生成
2021-03-19 21:09:11常用的库函数 int atoi(const char *nptr); // 把字符串nptr转换为int整数 long atol(const char *nptr); // 把字符串nptr转换为long整数 int abs(const int j); // 求int整数的绝对值 long labs(const long int j);... -
C语言模拟实现strcpy库函数
2020-06-06 17:16:42windows.h> //模拟实现strcpy函数 void MyStrcpy(char *str, char *arr) { while (*arr!='\0') { *str = *arr; str++, arr++; } } int main() { char arr[] = "abcdefgh"; char str[10] = "ffsds"; ... -
C语言学习:剪切板UNICODE码使用
2022-03-11 10:57:49本文程序是基于作者另一篇文章的程序基础上做修改,链接:(17条消息) C语言学习:除去剪切板内容的换行与回车_余宁C的博客-CSDN博客 由于剪切板中普通的text数据是8位的,不能支持一些字符的转换,这样就会导致粘贴...