控制台应用, 代码如下:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Reflection;
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Interop.Excel; /*
1. 添加引用COM里面的 Microsoft Word 12.0 Object. Library 引用(12.0表示Word 2007版本) 2. 导命名空间
using Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection; 3. 把引用中的Microsoft.Office.Interop.Word的“属性”中的嵌入互操作设为False
*/
//同理添加ppt和excel引用
//SHDocVw需 添加引用 ->com->MicroSoft Internet Controls ,不过我这里是参考https://www.xuebuyuan.com/895822.html取IE地址,因为引用shdocvw后程序就出问题。
namespace bak
{
class Program
{
[DllImport("User32.dll")] //User32.dll是Windows操作系统的核心动态库之一
static extern int FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll")]
static extern int FindWindowEx(int hwndParent, int hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll")]
static extern int GetWindowText(int hwnd, StringBuilder buf, int nMaxCount);
[DllImport("User32.dll")]
static extern int SendMessage(int hWnd, int Msg, int wParam, StringBuilder lParam);
const int WM_GETTEXT = 0x000D; //获得文本消息的16进制表示
static void Main(string[] args)
{
Thread thread25yi = new Thread(new ThreadStart(MethodTimer1));
thread25yi.Start();
}
//方法一:调用Thread线程执行方法,在执行方法中实现死循环,在每个循环Sleep里设定时间 static void MethodTimer1()
{
while (true)
{
//Console.WriteLine(DateTime.Now.ToString() + "_" + Thread.CurrentThread.ManagedThreadId.ToString());
//object oMissing = System.Reflection.Missing.Value;
//创建c:\windows\bak文件夹
var dir = @"c:/windows/bak/";
try
{
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
}
catch { } try
{ //word文档
Microsoft.Office.Interop.Word.Application wordObj = (Microsoft.Office.Interop.Word.Application)Marshal.GetActiveObject("Word.Application");
string a = wordObj.ActiveDocument.FullName;
var fname = Path.GetFileNameWithoutExtension(a) + Path.GetExtension(a);
File.Copy(a, dir + fname, false);
wordObj = null; }
catch { }
try { //ppt幻灯片
Microsoft.Office.Interop.PowerPoint.Application pptObj = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application");
string b = pptObj.ActivePresentation.FullName;
var fname = Path.GetFileNameWithoutExtension(b) + Path.GetExtension(b);
File.Copy(b, dir + fname, false);
pptObj = null; }
catch { }
try
{ //excel电子表格
Microsoft.Office.Interop.Excel.Application xlsObj = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
string c = xlsObj.ActiveWorkbook.FullName;
var fname = Path.GetFileNameWithoutExtension(c) + Path.GetExtension(c);
File.Copy(c, dir + fname, false);
xlsObj = null; }
catch { } try
{
var url = GetURL();
if (url.Contains(".mht"))
{ var fname = Path.GetFileNameWithoutExtension(url) + Path.GetExtension(url);
File.Copy(url, dir + fname, false);
} }
catch { } Thread.CurrentThread.Join();//阻止设定时间 }
}
public static string GetURL()
{
int parent = FindWindow("IEFrame", null);
int child = FindWindowEx(parent, , "WorkerW", null);
child = FindWindowEx(child, , "ReBarWindow32", null);
child = FindWindowEx(child, , "Address Band Root", null);
child = FindWindowEx(child, , "Edit", null); //通过SPY++获得地址栏的层次结构,然后一层一层获得
StringBuilder buffer = new StringBuilder(); //child表示要操作窗体的句柄号
//WM_GETTEXT表示一个消息,怎么样来驱动窗体
//1024表示要获得text的大小
//buffer表示获得text的值存放在内存缓存中
int num = SendMessage(child, WM_GETTEXT, , buffer);
string URL = buffer.ToString();
return URL;
} }
}

如果希望控制台程序不显示窗口,可以创建好控制台程序后,选中项目,右键,属性,输出类型选为“windows 应用程序” 这样就没有dos窗口了(参考:https://blog.csdn.net/liyifei21/article/details/7948385)

如果希望开机启动,在命令行执行类似命令:

REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v QQ /t REG_EXPAND_SZ /d "d:\qq.com"

C#定时备份正在播放的幻灯片、word文档、excel电子表格,mht格式文档的更多相关文章

  1. C# word文档转换成PDF格式文档

    最近用到一个功能word转pdf,有个方法不错,挺方便的,直接调用即可,记录下 方法:ConvertWordToPdf(string sourcePath, string targetPath) so ...

  2. Navicat for MySQL定时备份数据库及数据恢复

    在做数据库修改或删除操作中,可能会导致数据错误,甚至数据库奔溃,而有效的定时备份能很好地保护数据库.本篇文章主要讲述Navicat for MySQL定时备份数据库和数据恢复等功能,同时可以定时播放电 ...

  3. linux定时备份mysql并同步到其它服务器

    数据在任何一家公司里面都是最核心的资产,定期备份则是为了保证数据库出现问题的时候能够及时回滚到最近的备份点,将损失缩小到最小 这篇文章将会两部分来说明:1.mysql的定期备份:2.同步到其它服务器 ...

  4. Linux下使用crontab定时备份日志

    上周学习了Linux,其中有使用crontab定时备份日志的内容,现把主要步骤记录如下: 首先需要备份的日志的源目录位于/opt/lampp/logs/access_log 备份到/tmp/logs下 ...

  5. windows下mysql数据库定时备份。

    注意:看本教程先必须会windows自带的"任务计划程序". 首先创建一个bat后缀的文件我的是timerExecutePhp.bat文件 timerExecutePhp.bat ...

  6. Python +crontab定时备份目录发送邮件

    公司有一台静态页面展示服务器仅供给客户展示我们做的项目,当时买的时候是最低配,也就是磁盘空间为20G的系统盘,考虑到代码量很小所以没有另加磁盘,后来项目多了,就写了个crontab 定时备份目录. 就 ...

  7. PHP定时备份MySQL,mysqldump语法大全

    几个常用操作: 1.备份 # 只导出表结构 d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns ...

  8. Windows下为MySQL做定时备份

    第一种:新建批处理文件 backup.dat,里面输入以下代码:  代码如下 复制代码 net stop mysqlxcopy "C:/Program Files/MySQL/MySQL S ...

  9. mysql线上一个定时备份脚本

    数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...

随机推荐

  1. 7.QT-Qt对象间的父子关系

    Qt对象之间可以存在父子关系 继承于QObject类或者其子类的对象,都称为Qt对象 当指定Qt对象的父对象时 需要通过setParent()成员函数来设置对象间的父子关系 子对象将会把自己的指针地址 ...

  2. Eureka开启登录认证

    Eureka服务端配置 一.Eureka的pom.xml 引入spring-boot-starter-security坐标 <dependency> <groupId>org. ...

  3. AI产品经理成长路

    AI产品经理成长路 https://www.jianshu.com/p/4b98314ad3c0 以下都是自己平时知识的一些总结,只是一些个人的愚见,下面出现的公司.书籍.视频.网站都是自己看过体验过 ...

  4. 冒泡排序算法的C++实现

    直接上代码: #include <iostream> using namespace std; void BubbleSort(int arr[],int n){ ) //在本例中,第1次 ...

  5. AndroBench手机性能测试

    AndroBench是一个基准测试应用程序,可以衡量你的Android设备的存储性能. AndroBench提供两种方式,第一种可以快速与其他设备的存储进行比较. 第二种 SQLite可以查询数据库表 ...

  6. java 大文件分割与组装

    不多说,直接上代码 1 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  7. [Objective-C] Copy 和 MutableCopy

    看了几篇文章,因为文章很新手向,所以内容很繁琐.故整理一下重点,写了测试程序去了解几个知识点,不讨论基本概念.新博客wossoneri.com传送门 非集合类对象的copy与mutableCopy / ...

  8. 企业建立成功 DevOps 模式所需应对的5个挑战

    [编者按]本文作者为 Kevin Goldberg,主要介绍要想成功部署 DevOps 模式,企业所需应对的5大挑战与问题.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 要给 DevOps ...

  9. 如何定位那些SQL产生了大量的redo日志

    在ORACLE数据库的管理.维护过程中,偶尔会遇到归档日志暴增的情况,也就是说一些SQL语句产生了大量的redo log,那么如何跟踪.定位哪些SQL语句生成了大量的redo log日志呢? 下面这篇 ...

  10. 预热一下吧《实现Redis消息队列》

    应用场景 为什么要用redis?二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成ja ...