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;
}
posted @ 2018-04-01 13:38  fuRyZ  阅读(214)  评论(0编辑  收藏  举报