HaujetZhao / CapsWriter-Offline

CapsWriter 的离线版,一个好用的 PC 端的语音输入工具
2.44k stars 192 forks source link

win系统下两个黑窗口打开在任务栏里太碍眼了 #49

Open kKevin0001 opened 5 months ago

kKevin0001 commented 5 months ago

能否加一个GUI,一键启动客户端和服务端,并且可以后台运行(不显示在任务栏,可以显示托盘图标)

qaq1000w commented 5 months ago

https://github.com/HaujetZhao/CapsWriter-Offline/issues/40

H1DDENADM1N commented 5 months ago

@kKevin0001 试试我这个GUI,不显示在任务栏,可以显示托盘图标。https://github.com/HaujetZhao/CapsWriter-Offline/pull/53

start_server_and_client_in_tray

gdzjy commented 5 months ago

CreateObject("Wscript.Shell").Run "start_server.exe",0,False CreateObject("Wscript.Shell").Run "start_client.exe",0,False

保存为vbs文件 就可以了。

sjhsbhqf commented 4 months ago

如果你希望cmd窗口一直显示,下面是基于gdzjy的回答的参考回答:

在VBScript中使用CreateObject("Wscript.Shell").Run方法时,第二个参数(在您的示例中是0)控制着命令窗口的显示方式。如果您希望执行脚本时显示CMD窗口,您需要更改这个参数。

这个参数的值有几种不同的选项,分别对应不同的窗口显示方式:

因此,如果您希望在执行start_server.exestart_client.exe时显示CMD窗口,您应该将这个参数改为1。修改后的脚本如下:

CreateObject("Wscript.Shell").Run "start_server.exe", 1, False
CreateObject("Wscript.Shell").Run "start_client.exe", 1, False

这样,当您执行VBScript脚本时,它会打开两个CMD窗口分别运行start_server.exestart_client.exe,并且这些窗口将保持可见,直到相应的程序执行完毕或被手动关闭。请注意,这里的False参数表示调用Run方法时不需要等待命令执行完成即继续执行后续的脚本。如果您希望脚本在执行完一个命令之后再继续执行下一个命令,可以将这个参数设置为True

sjhsbhqf commented 4 months ago

如果你希望添加注释的话,可以参考下面这个回答哟

在VBScript(Visual Basic Scripting Edition)中,您可以添加注释来解释代码的功能或为将来的代码审查或修改提供便利。VBScript支持单行注释,可以通过以下方式添加:

单行注释

单行注释以单引号 (') 开始,例如:

' 这是一个单行注释

您也可以在代码行的末尾添加注释,例如:

CreateObject("Wscript.Shell").Run "start_server.exe", 1, False ' 启动服务器

注释的作用

示例

下面的示例演示了如何在VBScript脚本中使用注释:

' 创建 Wscript.Shell 对象
Set WshShell = CreateObject("Wscript.Shell")

' 运行 start_server.exe,显示窗口
WshShell.Run "start_server.exe", 1, False

' 运行 start_client.exe,显示窗口
WshShell.Run "start_client.exe", 1, False ' 启动客户端应用程序

请注意,VBScript 不支持多行注释块,所以您需要对每一行进行单独注释。通过在代码中妥善使用注释,可以提高代码的可读性和可维护性。

sjhsbhqf commented 4 months ago

如果你希望显示服务端cmd窗口,然后隐藏客户端cmd窗口。但是苦恼于关闭服务端 cmd窗口时客户端的程序不会自动关闭。下面的答案可以借鉴一下:

使用 WMI(Windows Management Instrumentation)来查询和终止进程。WMI 可以通过 VBScript 访问,而且不需要打开命令行窗口,因此可以避免黑窗口不断弹出的问题。下面是如何使用 WMI 在 VBScript 中查询和终止特定进程的示例。

检查进程是否运行并终止进程的脚本示例:

' 创建 WMI 对象
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

' 定义进程名称
strServerProcess = "start_server.exe"
strClientProcess = "start_client.exe"

' 启动服务端
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "start_server.exe", 0, False

' 启动客户端
WshShell.Run "start_client.exe", 0, False

' 循环检查服务端进程是否运行
Do
    Set colProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & strServerProcess & "'")

    ' 如果服务端进程不再运行,则结束客户端进程
    If colProcesses.Count = 0 Then
        ' 查询客户端进程并结束
        Set colClientProcesses = objWMIService.ExecQuery ("Select * from Win32_Process Where Name = '" & strClientProcess & "'")
        For Each objProcess in colClientProcesses
            objProcess.Terminate()
        Next
        Exit Do
    End If

    ' 等待一段时间后再次检查
    WScript.Sleep 5000
Loop

这个脚本使用 WMI 来检查 start_server.exe 是否运行,如果检测到服务端进程不再运行,则通过 WMI 查询客户端进程 start_client.exe 并终止它。这种方法不涉及命令行窗口的显示,因此可以避免黑窗口不断弹出的问题。

H1DDENADM1N commented 4 months ago

还可以看下这个项目SmartSystemMenu

它扩展了系统中所有窗口的系统菜单。 它会将下面的自定义项目追加到菜单,其中就包括

图片

laybxc commented 3 months ago

CreateObject("Wscript.Shell").Run "start_server.exe",0,False CreateObject("Wscript.Shell").Run "start_client.exe",0,False

保存为vbs文件 就可以了。

你好,我现在使用这个方法后并把vbs文件快捷方式放入startup中,服务端自启了,而客户端没有自启,这种是什么情况呢?

rockbenben commented 3 months ago

VBS 启动始终存在问题,仅启动服务器端而缺少客户端。转而使用以下 AutoHotkey 脚本后,问题得到解决。

; 设置程序的目录路径
programPath := "D:\Backup\Tools\0.System\CapsWriter-Offline\"

; 执行 start_server.exe,窗口隐藏,等待程序执行完毕
Run, %ComSpec% /c ""%programPath%start_server.exe"", , Hide, ProcessID_Server
WinWaitClose, ahk_pid %ProcessID_Server%

; 执行 start_client.exe,窗口隐藏,等待程序执行完毕
Run, %ComSpec% /c ""%programPath%start_client.exe"", , Hide, ProcessID_Client
WinWaitClose, ahk_pid %ProcessID_Client%