VS2015 C++ 海鼎MPOS更新程序
场景:需要使用U盘内文件夹覆盖至D盘,用于替代手动操作
其中用到的有
1,使用oftream写入文件
2,使用shappmgr.h,勾选自动隐藏任务栏
3,使用VBS创建快捷方式
4,使用批处理获取当前系统的桌面及启动2个文件的目的地并进行复制,达到开机自启动的目的
//导入相应模块
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <fstream>
#include <cassert>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <shappmgr.h>
using namespace std;
int main()
{
/*调用FindWindow隐藏任务栏
HWND task;
task = FindWindow(L"Shell_TrayWnd", NULL);*/
system("title POS终端文件更换程序 v1.3");
cout << "v1.1:\n更新复制方式。\n";
cout << "v1.2:\n新增了MPOS创建桌面快捷方式及开机自启动,皆为最大化窗口。\n";
cout << "v1.3:\n增加勾选自动隐藏任务栏。\n";
/*
文件说明:
a.vbs:生成POS主程序的桌面快捷方式。
copy.bat:从注册表获取当前系统的“桌面”及“启动”文件夹并将桌面POS快捷方式复制到“启动”文件夹
实现开机自启动
*/
//创建a.vbs
ofstream avbs;
avbs.open("a.txt");
avbs << "set WshShell=WScript.CreateObject(\"WScript.Shell\")\n";
avbs << "strDesktop=WshShell.SpecialFolders(\"Desktop\")\n";
avbs << "set oShellLink=WshShell.CreateShortcut(strDesktop & \"\\MPOS.lnk\")\n";
avbs << "oShellLink.TargetPath=\"D:\\MPOS\\bin\\MPosShell.EXE\"\n";
avbs << "oShellLink.WindowStyle=3\n";
avbs << "oShellLink.Description=\"MPOS\"\n";
avbs << "oShellLink.WorkingDirectory=\"D:\\MPOS\\bin\"\n";
avbs << "oShellLink.Save";
avbs.close();
//a.vbs创建完毕
//创建copy.bat
ofstream copy;
copy.open("copy.txt");
copy << "@echo off\n";
copy << "for /f \"tokens=2,*\" %%i in ('reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v \"Desktop\"') do set \"desktop_dir=%%j\"\n";
copy << "echo %desktop_dir%\n";
copy << "for /f \"tokens=2,*\" %%i in ('reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\" /v \"Startup\"') do set \"Startup_dir=%%j\"\n";
copy << "echo %Startup_dir%\n";
copy << "copy \"%desktop_dir%\\MPOS.lnk\" \"%Startup_dir%\\MPOS.lnk\"\n";
copy << "exit";
copy.close();
//更改文件后缀以使用
system("rename a.txt a.vbs");
system("rename copy.txt copy.bat");
//定义POS机编号
int posno;
cout << "必须以管理员运行该程序备份才能生效!\n\n";
cout << "请输入POS机编码:";
cin >> posno;
//原MPOS文件夹更名备份,再将程序所在目录下的MPOS文件夹复制至D盘。
system("rename d:\\mpos MPOS_bak");
system("xcopy mpos d:\MPOS /e /h /k /i /y");
//清空posconf.ini文件以方便写入。
ofstream truncini("D:\\MPOS\\bin\\mposconfig\\posconf.ini",ios::trunc);
fstream posini;
//向posconf.ini中写入配置数据
posini.open("D:\\MPOS\\bin\\mposconfig\\posconf.ini",ios::out|ios::app);
posini << "[MPOS]\n";
posini << "PosNo=" << posno<<endl;
posini << "##ServerUrl=http://192.168.21.70:7480/cre-pos/\n";
posini << "ServerUrl=http://XXX.XXX.XXX.XXX:XXXX/cre-pos/\n";
posini << "Reg=\n";
posini << ";是否全屏 0 不全屏;1 全屏;默认 0 不全屏; \n";
posini << "FullScreen=0\nFirstRun=0\n;窗口分辨率,缺省为1024*768\n";
posini << "标准分辨率=1024*768\n";
posini << "FVersion=17112002\n";
posini << "FVersionName=1.13-SNAPSHOT\n";
posini << ";副屏播放模式0 不开启副屏 1 图片轮播, 2 广告播放, 默认不开启副屏\n";
posini << "FViceScreenMode=0\n";
posini.close();
cout << "安装成功!接下来将进行其他配置,请稍后.....\n";
system("start a.vbs");
cout << "桌面快捷方式安装成功!\n";
Sleep(5000);
system("start copy.bat");
//删除运行时用到的子程序。
Sleep(3000);//睡眠3秒
//设置勾选自动隐藏任务栏
LPARAM lParam;
lParam = ABS_AUTOHIDE;
APPBARDATA apBar;
memset(&apBar, 0, sizeof(apBar));
apBar.cbSize = sizeof(apBar);
apBar.hWnd = FindWindow(L"Shell_TrayWnd", NULL);
if (apBar.hWnd != NULL)
{
apBar.lParam = lParam;
SHAppBarMessage(ABM_SETSTATE, &apBar); //设置任务栏自动隐藏
}
//删除使用完毕的文件
system("del a.vbs");
system("del copy.bat");
/*强制隐藏任务栏
ShowWindow(task, SW_HIDE);*/
cout << "开机启动安装成功!按任意键退出.....\n";
system("pause>>null");
system("del null");
return 0;
}