C的函数,变量声明,malloc,MessageBox,sprintf,简单应用

函数声明

一.原因

c是按顺序执行的,当被调用函数定义在主调函数的后面,

而主调函数不能标识这个还未遇到过的函数,

∴需要在主调函数前声明被调用的函数,来通知被调函数的存在
二.位置
(1)函数内:则只能在此函数中标识
(2)函数外:则从声明点以后的函数,均能标识
(定义在函数外的,一般定义在源文件首部)
Eg:

#include<stdio.h>
void test(int i);//声明函数
void main(){
test(1);
}
void test(int i){

}

三.格式:可以省略形参名,甚至形参类型
(但省形参类型,编译器就不能检查实参和形参是否匹配, ∴建议最好不要省略)
四.注意:与定义不同,函数声明可以反复,变量声明在函数外可以反复
Ps:在函数外声明的变量为全局变量

MessageBox函数

一.作用:创建显示操作消息对话框
二.适用:Visual Basic 6.0)
三.参数
hWnd:
指定该对话框的所有者窗口。如果该参数为空(0),则该对话框不属于任何窗口(?)。
lpText:
显示在对话框中的消息。
lpCaption:
在对话框标题栏中显示的字符串表达式。如果该参数为空(vbNullString),则使用默认的“错误”作为对话框的标题。
wType:
指定显示按钮的数目及形式,使用的图标样式,缺省按钮是什么以及消息框的强制回应等。可以为下列常数之一或某几个数值相加的和。
指定按钮样式,
指定图标样式,
指定默认按钮,
四.返回值
如果没有足够内存创建消息对话框,则返回0。
如果函数成功运行,则返回:点击的相应按钮
五.与MessageBoxAMessageBoxW的区别:
MessageBox其实是在库里声明了一个宏
当使用宽字符,即unicode时,自动转换用MessageBoxW
当使用窄字符时,会自动帮转换用MEssageBoxA
即当宽窄不相同的时候编译器会自动帮你转换
∴基本没区别

sprintf变参函数

一.定义:字符格式化命令
二.主要功能:把格式化的数据写入某字符串缓冲区
三.头文件:stdio.h
四.参数列表
buffer: char型指针,指向将要写入的字符串的缓冲区。
format: 格式化字符串。
[argument]…: 可选参数,可以是任何类型的数据。
五.返回值
返回写入buffer 的字符数,出错则返回-1.

若buffer 或 format 空指针,且不出错而继续,函数将返回-1,
并且 errno 会被设置为 EINVAL。

sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。
即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5

malloc函数

一.作用:向系统申请分配指定size个字节的内存空间
二.返回类型: void* 类型。void* 表示未确定类型的指针。
C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
三.返回值
分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回NULL。
当内存不再使用时,应使用free()函数将内存块释放。
函数返回的指针一定要适当对齐,使其可以用于任何数据对象。
四.原型
extern void *malloc(unsigned int num_bytes);
以前malloc返回char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。
五.头文件

#include <stdlib.h>
#include <malloc.h>

六.与new的区别:
new 返回指定类型的指针,并且可以自动计算所需

int *p;
p = new int;
//返回类型为int *类型(整数型指针),分配大小为sizeof(int);
int *parr;
parr = new int[100];
//返回类型为int *类型(整数型指针),分配大小为sizeof(int) * 100;
  malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针
int *p;
p = (int*)malloc(sizeof(int) * 128);
//分配128个(可根据实际需要替换该数值)整型存储单元,
//并将这128个连续的整型存储单元的首地址存储到指针变量p中
double *pd = (double*)malloc(sizeof(double) * 12);
//分配12个double型存储单元,
//并将首地址存储到指针变量pd中

改变命令行程序的前景背景色:

Windows

cmd
键入enter后
键入enter后的提示信息

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void main(){
    char str[10];
    for(int i=0;i<16;i++){
        sprintf(str,"color %x%x",i,15-i);
        system(str);anshu
        Sleep(2000);
    }
    getchar();
}

Linux
参考以下两篇文章
http://blog.sina.com.cn/s/blog_8043547601013rxf.html
https://www.centos.bz/2013/07/linux-shell-c-show-color-word/
导出dll文件使用dll控制其他的程序
(1)vs中打开工程属性
(2)设置运行生成的类型
(3)参考代码可如下(test.c)

#include<Windows.h>
_declspec(dllexport) void go(){
    MessageBoxA(0,"HI","Title",MB_OK);
}

(4)运行,获取生成的dll路径
弹出警示框正常现象
复制生成路径
(5)打开示例软件
(6)刷新可见新开的软件(新打开的软件在最底下)
刷新可见
(7)注入
注入vs中生成的dll文件
(8)将获得的路径输入,并输入要执行的函数
确定之后就会执行函数

操作窗体

//一个项目中必须有且只有一个main()
(1)拖动箭头点击QQ窗体
获取QQ窗体信息
(2)获取红框中的数据
获取需要的信息
(3)代码如下:

#include<windows.h>
#include<stdio.h>

void openQQ()
{
    ShellExecuteA(0, "open", "\"D:\\QQ\\Bin\\QQScLauncher.exe\"", 0, 0, 1);
//非无意义值的参数依次为“open”字符串,打开路径,打开是否显示
//或者ShellExecuteA(0, "open", "D:\\QQ\\Bin\\QQScLauncher.exe", 0, 0, 1);

}

void moveQQ()
{
    HWND win = FindWindowA("TXGuiFoundation","QQ");//HWND是 qq的编号; find寻找窗口
    if (win == NULL)//-------------每获取一个对象,都要判断是否为空---------------
    {
        printf("获取窗口对象失败!");
    }
    int i = 0;
    while (i < 768){
        SetWindowPos(win, NULL, i*16/9, i, 500, 400, 0);//非无意义值的参数依次为: 窗口对象, x坐标,y坐标,宽度,高度
        i += 10;//每次增加10像素
        Sleep(100);
        if (i/10%2)
        {
            ShowWindow(win, SW_HIDE);
        }
        else
        {
            ShowWindow(win, SW_SHOW);
        }
    }
}

void main()
{
    //system("taskkill /f /im qq.exe");
    openQQ();
    Sleep(5000);
    moveQQ();
    Sleep(5000);
}

换桌面

SystemParametersInfoA(20,1,"C:\\Users\ASUS-PC\Pictures\\123.png",1);
//SystemParametersInfo(20, True, 图片路径, 1)
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值