晋江文学城
下一章 上一章  目录  设置

18、用AI解决工作中的难题 ...

  •   编程和设计人员最不喜欢遇到的老板是怎样的呢?那就是不断变更需求的老板。我最近就遇到了这样一个难题:新的需求要求程序改动超过一半,工作量巨大,而且还要求在3天内完成修改。
      过去,这几乎是一个不可能完成的任务。
      但现在,情况有了翻天覆地的变化。我利用AI辅助编程,仅用一晚上就搞定了。编写程序是一项非常专业的工作。我接下来将以一个比较简单的Windows脚本编程为例,来展示如何解决一个既不太大也不太小的问题。
      有了AI的帮助,即使你的专业知识非常一般,甚至是完全没有,也能够完成这样的任务。
      这也是我今天在工作中碰到的一个难题。新的硬件设计中,我们增加了一块电脑板,这块电脑板能够支持远程登录。这样,我就可以在这块电脑板上编写程序,然后将编译好的程序直接刷入我们现场使用的控制板中。
      然而,问题来了:一旦接上这块电脑板,我们的控制板就会随机性地重启!这块电脑板是设计成开机自启动的,这样做的好处是,我可以在异地进行无人值守的登录,无需亲自前往现场出差,这无疑是一个降低人员出差成本的好办法。
      因此,我构思了一个解决方案:如果两分钟内我没有登录这块电脑板,它就会自动关机。如果需要再次开启,可以请当地的同事帮忙启动。因为调试机器并不是一直需要进行,只有在增加新功能或修正问题时才必须运行。因此,预留两分钟的时间是完全足够的。这样也不会影响我们控制板的正常运行。
      为了实现这个方案,我需要编写一个Windows的shell程序。但是,我对这方面的编程并不是特别擅长。
      我记得以前,当我需要写这种程序时,一边查资料一边调试代码,通常需要3到5天才能完成。但现在,我仅用了一个下午就搞定了。
      下面,我将详细描述我解决这个问题的方法和过程。对于不感兴趣或者不太喜欢看技术内容的读者,可以选择快速浏览,不必深究细节。如果将来你遇到类似的需求,可以参考我的经验,或者找一个懂计算机的朋友,让他们参考我的教程来帮助你解决问题。
      首先,我向AI提出了我的需求。注意提问的技巧,使用自然语言清楚地描述你的要求就可以了。我的目标是什么,我想要实现什么。当然,你也可以选择分步骤、提示性地提问,只是这样可能需要更多的时间和更多的步骤。
      我问:
      编写一个Windows shell程序,让电脑在开机后2分钟内,如果没有操作,就自动关机,并且要求开机时自动运行此程序。
      AI回答:
      要实现这个功能,你可以通过编写一个批处理脚本(Batch Script)来实现。这个脚本会在开机时自动运行,等待2分钟,如果用户没有关闭指定的窗口,那么就自动关机。这个过程涉及到几个步骤:
      编写批处理脚本:这个脚本会等待2分钟,然后检查特定窗口是否还开着,如果开着就执行关机命令。
      设置脚本开机自启动:通过将脚本或其快捷方式放入Windows的"启动"文件夹,或者通过任务计划程序设置开机自启动。
      第1步:编写批处理脚本
      首先,需要明确你想要关闭的窗口是哪一个,因为批处理脚本需要根据窗口的标题来判断。这里以“记事本”(Notepad)为例。
      创建一个新的文本文件,将其命名为AutoShutdown.bat,然后用文本编辑器打开它,输入以下内容:
      @echo off
      timeout /t 120
      tasklist /fi "imagename eq notepad.exe" |find ":" > nul
      if errorlevel 1 shutdown /s /f /t 0
      这段脚本的意思是:
      @echo off:不显示后续执行的命令。
      timeout /t 120:等待120秒(2分钟)。
      tasklist /fi "imagename eq notepad.exe":查找当前运行的程序中是否有记事本(notepad.exe)。
      find ":" > nul:通过查找输出中的":"来判断上一个命令是否有输出。
      if errorlevel 1 shutdown /s /f /t 0:如果上一个命令的返回值(errorlevel)不是0(表示没找到记事本),则执行关机操作。
      第2步:设置脚本开机自启动
      有几种方法可以设置脚本开机自启动,这里介绍通过“启动”文件夹的方法:
      按下Win+R键打开运行对话框,输入shell:startup,然后按回车。这会打开“启动”文件夹。
      将你的AutoShutdown.bat文件的快捷方式复制到这个文件夹里。
      这样,每次开机时,Windows就会自动运行这个脚本。
      注意:自动关机可能会导致用户数据丢失,特别是如果用户正在进行未保存的工作时。请确保用户了解这一点,并且这个功能是真正需要的。此外,修改系统行为可能带来意外的后果,所以在实施之前请确保充分测试。
      额外说明
      在实际应用中,你可能需要根据实际情况调整脚本,特别是tasklist /fi "imagename eq notepad.exe"这一行,其中的notepad.exe应该替换为你实际想要检测的程序的进程名。
      如果你想要检测的是某个特定的窗口标题,而不是进程本身,可能需要使用更高级的脚本语言,如PowerShell,或者第三方工具,因为批处理的能力在这方面比较有限。
      自动关机的功能可能会对用户造成不便,确保这是你真正需要的功能,并且用户已经被充分告知可能的后果。
      如果你想要更复杂的逻辑(比如,在特定条件下取消关机),可能需要学习更多关于批处理脚本或PowerShell脚本的知识,或者考虑开发一个小型的应用程序来实现这些功能。
      请在实施这些操作时谨慎行事,并确保你有足够的权限来修改系统设置。
      根据AI的回答,我发现,AI没有完全理解我的问题,有点理解错误,因此我纠正这个错误。
      我再问:
      是检查自己有没有被关闭,或者说不用检查自己被关闭,被用户关闭就不关机。否则就关机。这个功能用于远程链接,如果开机后两分钟内,没有远程链接并关闭这个窗口。windows就自动关机。保护windows强制关机造成的损坏。
      小技巧:我的提问中有错别字,但我没有改正。我这样做,也是提醒同样用AI的朋友们,有一些错字没关系,当然没错更好。AI理解力还是很强的,有一定的自动纠错能力。
      AI回答:
      了解您的需求后,我们可以稍微修改之前的脚本,使其在开机后2分钟内检查一个特定的条件是否满足(在这个场景中是检查一个特定的程序或窗口是否被关闭),如果满足(即没有远程连接并关闭该窗口),则执行关机操作。这里我们假设这个“窗口”是一个简单的批处理脚本界面,当然,这个“窗口”可以是任何你用来作为远程连接标志的程序。
      第1步:创建标志窗口脚本
      首先,我们创建一个简单的批处理脚本,作为远程连接的标志。当这个脚本运行时,它只是打开一个命令提示符窗口,如果这个窗口在2分钟内被关闭,那么就不执行关机操作。我们将这个脚本命名为RemoteConnectionFlag.bat:
      @echo off
      echo Waiting for remote connection...
      pause
      第2步:编写主脚本
      然后,我们编写主脚本,这个脚本会在开机时运行RemoteConnectionFlag.bat,等待2分钟,然后检查RemoteConnectionFlag.bat是否还在运行,如果还在运行,说明没有远程连接并关闭该窗口,就执行关机操作。我们将这个脚本命名为AutoShutdownIfNoRemote.bat:
      @echo off
      start "" "RemoteConnectionFlag.bat"
      timeout /t 120
      tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat" |find ":" > nul
      if errorlevel 1 shutdown /s /f /t 0
      注意:这里的WindowTitle eq RemoteConnectionFlag.bat可能需要根据实际情况进行调整,因为窗口标题可能会因为脚本的实际路径或命令行解释器的不同而有所不同。您可能需要手动检查任务管理器中该脚本运行时的窗口标题,并相应地调整。
      第3步:设置脚本开机自启动
      您可以通过将AutoShutdownIfNoRemote.bat脚本或其快捷方式放入Windows的"启动"文件夹来实现开机自启动,具体操作步骤如下:
      按下Win+R键打开运行对话框,输入shell:startup,然后按回车。这会打开“启动”文件夹。
      将AutoShutdownIfNoRemote.bat文件的快捷方式复制到这个文件夹里。
      这样,每次开机时,Windows就会自动运行这个脚本,从而实现您的需求。
      额外注意:
      请确保在实施这些脚本之前进行充分测试,以避免意外的关机导致工作丢失。
      根据您的具体需求,可能需要调整脚本中的等待时间或其他逻辑。
      如果您的远程连接程序有特定的进程名或窗口标题,您可能需要对脚本进行相应的调整,以确保正确识别远程连接的建立和断开。
      讲解:其实AI也不是万能的,AI只是个辅助工具罢了,我是专家级程序员了,一眼就看出来这段解答中的问题。然后我就提醒AI改正。
      我问:
      有路径问题吧?得指定执行RemoteConnectionFlag.bat的路径吧?
      AI很诚实外加谦虚的的回答:
      是的,您提到了一个重要的点。如果RemoteConnectionFlag.bat不在同一个目录下,或者该目录未被包含在系统的环境变量PATH中,那么在AutoShutdownIfNoRemote.bat脚本中直接调用RemoteConnectionFlag.bat可能会失败,因为系统无法找到这个文件。为了解决这个问题,我们需要在调用RemoteConnectionFlag.bat时指定其完整的路径。
      修改后的AutoShutdownIfNoRemote.bat
      假设RemoteConnectionFlag.bat位于C:\Scripts目录下,那么我们应该这样修改AutoShutdownIfNoRemote.bat:
      @echo off
      start "" "C:\Scripts\RemoteConnectionFlag.bat"
      timeout /t 120
      tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat" |find ":" > nul
      if errorlevel 1 shutdown /s /f /t 0
      这样,不论RemoteConnectionFlag.bat位于哪个目录,只要你在AutoShutdownIfNoRemote.bat中提供了正确的完整路径,系统就能够找到并执行它。
      注意,在使用tasklist /fi "WindowTitle eq RemoteConnectionFlag.bat"这条命令时,确保窗口标题正确无误。实际上,窗口标题可能并不是脚本的文件名。你可能需要运行RemoteConnectionFlag.bat,然后在任务管理器中查看该批处理脚本打开的命令提示符窗口的确切标题,并据此调整AutoShutdownIfNoRemote.bat中的窗口标题过滤条件。
      如果你的RemoteConnectionFlag.bat脚本不仅仅是打开一个窗口等待关闭,而是执行了一些其他操作(比如启动一个用于远程连接的程序),你可能需要根据实际情况调整AutoShutdownIfNoRemote.bat中的逻辑,以确保它能够正确地判断远程连接是否已经建立。
      通过这种方式,你可以确保无论RemoteConnectionFlag.bat位于系统的哪个目录下,AutoShutdownIfNoRemote.bat都能够正确地找到并执行它,从而实现在没有建立远程连接的情况下自动关机的功能。
      讲解:AI的这个解答确实能解决问题,但是我觉得还有更优化的解决方案,我提醒AI给我一个更好的解决方案。这种交互,是AI帮我解决问题,我也在帮AI提高智商。
      我问:如果不检测别人,只检测自己不也解决这个问题了么?
      AI回答:
      确实,如果目标是检测脚本自身是否在一定时间内被关闭(而不是检测另一个程序或脚本),那么可以简化设计,无需检查其他进程。这种方法可以直接应用于远程连接场景,如果在指定时间内没有人关闭该脚本(即没有建立远程连接),则自动执行关机。
      这里是一个简化版的脚本,我们可以称之为AutoShutdownIfNoAction.bat,它不需要检测其他程序或脚本,只需在开机后等待一定时间(例如2分钟),如果在这段时间内脚本没有被手动关闭,则自动执行关机操作:
      @echo off
      echo Waiting for remote connection or manual shutdown...
      timeout /t 120 /nobreak > nul
      echo No action detected, shutting down...
      shutdown /s /f /t 0
      如何工作:
      脚本启动时,会显示一条消息提示等待远程连接或手动关闭。
      使用timeout命令等待指定时间(这里是120秒,即2分钟),/nobreak参数确保等待不能被键盘操作中断。
      如果在等待时间结束前,脚本没有被关闭,那么会显示一条消息提示将要执行关机,并使用shutdown命令立即关机。
      如何手动关闭脚本以防止关机:
      用户可以在等待时间结束前简单地关闭命令提示符窗口,或者按Ctrl+C中断脚本运行,以此来阻止脚本继续执行关机命令。
      设置脚本开机自启动:
      与之前相同,您可以将AutoShutdownIfNoAction.bat文件或其快捷方式添加到Windows的"启动"文件夹,以实现开机自启动。
      这种方法简化了逻辑,因为它只关注脚本自身是否在给定时间内被关闭,而不是检测其他特定的程序或脚本。这对于一些简单的远程连接使用场景来说可能是足够的,并且避免了诸如路径问题等复杂性。
      讲解:我测试了一下,确实可用,但是,感觉应该能更好用一些。因此我又提示AI改进程序的方向。告诉AI目标就行,大部分情况,没必要告诉AI方法,一般它都能搞定。
      我问的时候,没加句号,真没必要,这不是我语法错误。是保持原汁原味。
      我问:应该再加上一个倒计时显示
      AI回答:
      要在脚本中添加倒计时显示,我们可以稍微修改脚本,使其在等待期间每秒更新一次显示的剩余时间。这样用户就能清楚地看到在自动关机之前还有多少时间,从而有机会在此期间采取行动(例如手动关闭脚本)。
      下面是一个包含倒计时显示的脚本示例,我们可以称之为AutoShutdownWithCountdown.bat:
      @echo off
      set /a "seconds=120"
      :countdown
      cls
      echo Waiting for remote connection or manual shutdown...
      echo.
      echo Shutdown in %seconds% seconds...
      if %seconds%==0 (
      echo No action detected, shutting down...
      shutdown /s /f /t 0
      )
      timeout /t 1 /nobreak > nul
      set /a "seconds-=1"
      goto countdown
      如何工作:
      脚本首先设置一个名为seconds的变量,用于存储倒计时的总秒数(这里是120秒,即2分钟)。
      进入一个循环,每次循环都会清除屏幕(cls命令),然后显示等待信息和剩余时间。
      如果倒计时到达0秒,脚本将显示一条消息提示没有检测到动作,并执行关机命令。
      使用timeout命令暂停1秒,然后减少seconds变量的值,再次进入循环,直到seconds变量减到0。
      用户如何手动阻止关机:
      用户可以在倒计时结束前关闭命令提示符窗口或按Ctrl+C终止脚本,以阻止脚本执行关机命令。
      设置脚本开机自启动:
      按照之前的方法,将AutoShutdownWithCountdown.bat文件或其快捷方式添加到Windows的"启动"文件夹,以实现开机自启动。
      通过这种方式,用户可以清楚地看到剩余时间,并有机会在脚本执行关机操作之前进行干预。这种倒计时功能使得脚本更加用户友好,同时仍然满足自动关机的需求。
      测试和讲解:我按照AI提供的方法操作,运行没问题,只是需要登录之后才运行,因此,不符合我的要求。但我不确定我的理解是否正确,因此我向AI提出我的疑问。
      我问:
      用刚才的win+r键,输入shell:startup,输入刚才的指令,建立刚才指定的文件,登录windows之后,才发现这个启动窗口。是否这个必须登录进入windows,才启动这个监控?这样会有问题的。如果远程没有连接登入,是否就不会执行?我需要的是,不登录也要自动执行。
      AI的回答验证了我的想法是正确的:
      如果您需要在Windows启动时执行脚本,而不需要用户登录,那么将脚本放在"启动"文件夹中是不够的,因为"启动"文件夹中的项目只有在用户登录后才会执行。对于您的需求,一个更合适的解决方案是使用Windows的任务计划程序(Task Scheduler)来设置脚本在系统启动时自动执行,而不需要任何用户登录。
      使用任务计划程序设置脚本自动执行:
      打开任务计划程序:
      按下Win+R键打开运行对话框,输入taskschd.msc,然后按Enter键。
      创建新任务:
      在任务计划程序中,选择“操作”菜单中的“创建任务...”。
      设置任务属性:
      在“常规”选项卡中,给任务命名,并选择“不管用户是否登录都要运行”。
      还可以选择“使用最高权限运行”,如果您的脚本需要管理员权限。
      设置触发器:
      切换到“触发器”选项卡,点击“新建...”。
      在“开始任务”下拉菜单中选择“开机时”。
      设置操作:
      切换到“操作”选项卡,点击“新建...”。
      在“操作”下拉菜单中选择“启动程序”。
      在“程序或脚本”框中,输入您的脚本的完整路径。
      完成设置:
      配置任何其他选项(如“条件”和“设置”选项卡中的选项)根据您的需求。
      点击“确定”保存任务。
      通过这种方式设置后,您的脚本将在系统启动时自动执行,无论是否有用户登录。这对于需要在系统启动时立即开始监控或执行其他任务的场景非常有用。
      请注意,使用任务计划程序设置任务时,确保您的脚本和任何相关文件的路径都是正确的,并且您的脚本在没有用户界面的情况下能够正确执行。此外,如果您的脚本需要特定的运行环境或依赖,确保这些在系统启动时就已经可用。
      讲解:这确实是一个方法,但是,我觉得,太复杂了,建议AI给一个简单的方法。
      我问:
      这确实是一个方法,能不能让远程计算保留远程登录的功能的同时,还能自动登录进去,执行这个功能?
      AI回答的解决方案:
      要保留远程登录功能的同时实现自动登录并执行特定功能,您可以采取以下两步策略:
      1. 设置Windows自动登录
      首先,您需要配置Windows以便在启动时自动登录到指定的用户账户。这样做会降低安全性,因为任何人在启动时都能访问该用户账户,因此请根据您的安全需求谨慎使用。
      如何设置Windows自动登录:
      按Win+R键打开运行对话框,输入netplwiz,然后按Enter键。
      在打开的“用户账户”窗口中,选择您希望Windows自动登录的账户。
      取消选中“要使用本计算机,用户必须输入用户名和密码”的复选框,然后点击“应用”。
      在随后出现的对话框中,输入您希望自动登录的用户账户的密码两次,然后点击“确定”。
      点击“确定”关闭“用户账户”窗口。
      2. 使用任务计划程序执行脚本
      然后,您可以使用之前提到的任务计划程序设置,但这次选择在用户登录时而不是系统启动时执行脚本。由于您已经设置了自动登录,这将在系统启动并自动登录后立即执行脚本。
      设置任务计划程序在登录时执行脚本:
      打开任务计划程序(taskschd.msc)并创建新任务。
      在“触发器”选项卡中,选择“新建...”,然后在“开始任务”下拉菜单中选择“登录时”。
      在“操作”选项卡中配置您的脚本执行操作,如之前所述。
      通过这种方式,您的系统将在启动时自动登录到指定的用户账户,并且随即执行您设置的脚本或程序,同时保留了远程登录的功能。
      安全提示:自动登录会使您的系统更容易被未授权访问,特别是如果计算机是公共或易于物理访问的地方。请确保在适用于您的场景时考虑这个因素,并采取适当的安全措施,例如使用强密码、限制物理访问等。
      讲解:我按照第一个方法在vmware虚拟机上测试,没问题,很正常。但是,在我们工作的远程小电脑上不行。运行Netplwiz后,发现少了一个【要使用本计算机,用户必须输入用户名和密码】复选框。
      这次问AI,给出的解决方案都不太理想,因此我改用谷歌搜索,找到了答案。再次证明,AI不是完成的。
      这是我通过查资料,总结出的详细解决方案,小白也能操作。
      目标:设置Windows 10自动登录指定用户
      步骤1: 打开注册表编辑器
      按“Windows徽标键+R”打开“运行”对话框
      在对话框中输入“regedit”,然后点击“确定”打开注册表编辑器
      步骤2: 修改注册表项找回设置选项
      在注册表编辑器左侧窗格中找到路径:
      “计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device”
      打开“Device”文件夹,找到“DevicePasswordLessBuildVersion”这个项
      (一个小技巧,按F3键,搜DevicePasswordLessBuildVersion,直接找到这个项)
      右键点击该项,选择“修改”
      将数值数据从默认的“1”修改为“0”,然后点击“确定”
      步骤3: 重新打开用户账户设置界面
      关闭注册表编辑器
      按“Windows徽标键+X”,选择“命令提示符(管理员)”
      在命令提示符中输入“netplwiz”并回车
      步骤4: 设置自动登录指定用户
      在打开的“用户账户”窗口中找到需要自动登录的用户
      取消选中“登录时输入用户名和密码”复选框
      单击“应用”按钮保存设置
      重启计算机测试自动登录效果

      测试结果:
      关机之后,我重新启动了电脑,看到系统自动登录进入Windows,随即弹出了一个倒计时窗口。如果我不关闭这个窗口,系统就会自动关机。然而,一旦我关闭了这个窗口,电脑就不会自动关机了,我便可以持续操作电脑。至此,在AI的帮助下,我快速且完美地解决了问题。
      当然,还有一个不太好的消息,我用AI辅助改写的控制板程序表现得不太正常,需要我进一步调试。因此,我再次强调,AI不是万能的,它只是你的强力助手罢了。

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>