C#调用vbs脚本实现Windows版Siri

  最近新加入,把自己一些有意思的小东西分享给大家,我是一个学生,代码写得少,哪里不规范,希望大家见谅。

  这事我封装好的一个类,可以直接实例化对象之后,调用"对象.Talk()"方法,让机器读出你传递进去的字符串。

  这个程序原理很简单,就是创建文件读写流,在D:\Alarm下创建一个sys.vbs文件,里面写入CreateObject("SAPI.SpVoice").Speak "你的字符串",然后执行这个vbs,就可以让你的电脑发声啦,听说Windows下的大多数是女声,反正我的电脑上是女声。

  程序很简单,至于文件夹创建,因为是我写的一个外部程序,没有把文件夹的判断创建放进去,如果要自己生成的话记得 加上文件夹存在与否的判断。

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.IO;
 6 using System.Windows.Forms;
 7 
 8 namespace 电脑对话
 9 {
10     class ComTalk
11     {
12         private void runthis()
13         {
14             System.Diagnostics.ProcessStartInfo Info = new System.Diagnostics.ProcessStartInfo();
15 
16             //设置外部程序名  
17             Info.FileName = "sys.vbs";
18 
19             //设置外部程序工作目录为   D:\Alarm
20             Info.WorkingDirectory = @"D:\Alarm";
21 
22             //最小化方式启动
23             Info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
24 
25             //声明一个程序类  
26             System.Diagnostics.Process Proc;
27 
28             try
29             {
30                 Proc = System.Diagnostics.Process.Start(Info);
31                 System.Threading.Thread.Sleep(500);
32             }
33             catch (System.ComponentModel.Win32Exception)
34             {
35 
36                 return;
37             }
38         }
39         public void Talk(string s)
40         {
41             string content = string.Empty;
42             FileStream fs = new FileStream("D:\\Alarm\\sys.vbs", FileMode.OpenOrCreate, FileAccess.Write);
43             fs.SetLength(0);
44             if (s == string.Empty)
45             {
46                 MessageBox.Show("输入的内容不能为空");
47             }
48             else
49             {
50                 StreamWriter sw = new StreamWriter(fs, Encoding.Default);
51                 content = s.Trim();
52                 content = @"CreateObject(""SAPI.SpVoice"").Speak """.Trim() + content + @"""".Trim();
53                 sw.Write(content);
54                 sw.Close();
55             }
56             runthis();
57         }
58     }
59 }
复制代码

 

posted @   letcafe  阅读(2219)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示