Tag: Windows

  • 如何选择适合远程办公的小型计算设备

    如何选择适合远程办公的小型计算设备

    远程办公已经成为了现代工作生活中的一部分,尤其是对于像我这样的自由职业者。在进行远程办公时,选择一台小型计算设备成为瘦客户端是至关重要的,它可以帮助我们连接到云主机,进行工作和运维任务。在本文中,我们将讨论如何选择适合远程办公的小型计算设备,特别是在预算不超过800元的情况下。

    背景故事

    作为一名自由职业者,我的工作需要我随时随地进行远程办公。我经常需要连接到云主机,运行各种任务,包括编程、数据分析和文档编辑。因此,我需要一台小型计算设备,它可以作为我的瘦客户端,帮助我高效地完成工作。在选择这台设备时,我遇到了一些困难,因为市场上有多个选择,如N100、树莓派和J64XX。在预算有限的情况下,我需要仔细考虑每个选项的优缺点,以找到最适合我的设备。

    选择标准

    在选择远程办公设备时,有一些关键因素需要考虑:

    1. 尺寸和便携性

    由于我需要经常携带设备,尺寸和便携性对我来说非常重要。一台小巧轻便的设备可以更容易地放入我的背包或包里,使我能够在任何地方工作。

    2. 接口支持

    为了连接到不同类型的显示器和外部设备,我需要设备支持HDMI和DP接口。这样,我可以轻松连接到各种显示屏,并扩展我的工作空间。

    3. 硬件性能

    虽然我不会进行视频游戏,但我需要设备能够处理多个浏览器标签页和一些轻量级开发工具,如VSCode。因此,内存至少需要达到8GB或16GB,以确保顺畅的多任务处理。

    4. 网络连接

    远程办公需要稳定的网络连接,因此设备需要支持蓝牙和WiFi功能。这样我就可以连接到无线网络并使用蓝牙设备。

    5. 声音和散热

    由于我经常在安静的环境中工作,设备的散热声音不能太大。我需要一台能够有效散热,同时保持低噪音的设备。

    可选设备分析

    现在,让我们来分析一下可选设备,看看哪个更适合我的需求:

    1. N100

    N100是一个潜在的选择,特别是在Linux环境下表现良好。它小巧轻便,适合便携使用。然而,在Windows 11下,它的性能可能不足以满足我的需求,特别是在处理多个浏览器标签页时可能会感到有些吃力。

    2. 树莓派

    虽然树莓派是一个有趣的选择,但它的性能可能不足以支持我在远程办公中的工作负载。此外,树莓派5尚未上市,而且不支持3.5mm耳机孔,这在我的需求中是一个缺点。

    3. J64XX

    J64XX是另一个备选方案,但是它的性能和功能与N100相似,可能会在某些情况下感到不足。

    结论

    在考虑了上述因素后,我认为在预算不超过800元的情况下,N100是最合适的选择。虽然它在某些情况下可能性能有限,但它的小巧便携性、接口支持和网络连接功能使其成为适合远程办公的瘦客户端设备。对于我的需求,它应该足够了,而且不会对我的钱包造成太大压力。

    最后,我想提醒大家,在选择远程办公设备时,一定要根据自己的需求和预算进行仔细的考虑和比较,以确保选择最合适的设备来提高工作效率。

  • 微软Outlook开放对iCloud的支持:提升用户体验的新举措

    微软Outlook开放对iCloud的支持:提升用户体验的新举措

    在数码化的时代,电子邮件服务成为了人们生活中不可或缺的一部分。微软的Outlook一直以其功能强大和稳定性而闻名,而最新的消息将进一步提升用户体验。11月7日,微软宣布向所有使用Win11新版Outlook应用程序的用户开放对苹果iCloud的支持,这一举措将为用户提供更加全面的服务体验。本文将深入探讨这一重要的新发展,以及对电子邮件服务市场的影响。

    支持iCloud:Outlook的新变革

    微软的Outlook一直是电子邮件服务领域的领先者之一,但随着技术的不断发展,它也需要不断更新和改进以满足用户的需求。最新的举措是向所有使用Win11新版Outlook应用程序的用户开放对苹果iCloud的支持。

    以前,经典版和UWP版的Outlook应用程序一直支持苹果的电子邮件服务,但在升级到基于网页的Win11新版后,微软并未对此进行更新。然而,这一限制如今已被打破,用户只需点击菜单中的齿轮图标,即可添加自己的iCloud账号。这一简单的操作为用户带来了更多的选择,让他们能够更方便地管理多个电子邮件账户。

    用户需求的回应

    新版Outlook应用程序引入了许多新功能,但一些用户对其并不满意,认为这款应用程序只是一种套着马甲的网页版。微软一直积极回应用户的反馈,并近期增加了离线支持功能,以改善用户体验。此外,微软还不断扩展Outlook的功能,支持更多类型的电子邮件账户,包括Gmail、Google Calendar和联系人等。

    这一次开放对iCloud的支持,无疑是微软对用户需求的积极回应。越来越多的人在不同的平台上使用不同的电子邮件服务,因此拥有一个集成多种账户的电子邮件客户端变得至关重要。微软的Outlook通过这一举措,提供了更加便捷的解决方案,使用户能够在一个应用程序中轻松管理多个电子邮件账户。

    提升市场竞争力

    电子邮件服务市场一直竞争激烈,各大厂商争相推出新功能和服务来吸引用户。微软的Outlook一直以其安全性和稳定性而脱颖而出,而如今的支持iCloud的举措将进一步提高其在市场上的竞争力。

    用户将能够更加便捷地在Outlook中集中管理他们的电子邮件通信,而无需切换到不同的应用程序。这将为用户带来更高的效率和便利性,使他们更愿意选择Outlook作为他们的首选电子邮件客户端。

    结语

    微软的Outlook开放对iCloud的支持,标志着电子邮件服务市场的不断演进和竞争的加剧。用户将受益于更多的选择和更方便的电子邮件管理方式。微软在满足用户需求方面的努力将继续推动电子邮件服务市场的发展,使用户能够享受到更好的电子邮件体验。

  • 提升RDP性能:开启显卡加速、提高帧率、USB设备重定向

    提升RDP性能:开启显卡加速、提高帧率、USB设备重定向

    远程桌面服务(Remote Desktop Protocol,RDP)是Windows系统自带的一项强大功能,它允许用户远程访问和控制其他计算机,而不需要第三方软件。尤其在需要高效远程管理和控制的场景下,RDP的性能表现出色,但你可能不知道,通过一些简单的操作,你可以进一步优化RDP,提高其性能和功能。

    优化1:开启显卡加速

    众所周知,RDP默认情况下并不调用显卡,因此在远程桌面上运行需要GPU支持的应用程序可能会受到限制。然而,你可以通过以下步骤开启显卡加速:

    1. 打开远程主机上的组策略,按下Win+R组合键,输入gpedit.msc,然后按回车。

    2. 在组策略编辑器中,依次找到:计算机配置 -> 管理模板 -> Windows组件 -> 远程桌面服务 -> 远程桌面会话主机 -> 远程会话环境。

    3. 在右侧窗口中,找到“将硬件图形适配器应用于所有远程桌面服务会话”并右键点击编辑。

    4. 选择“已启用”,然后点击确定保存。

    5. 最后,重启远程主机以使更改生效。

    现在,你可以在远程桌面上运行需要GPU支持的应用程序,包括OpenGL、DirectX和Vulkan等。这将为你提供更多的功能和性能。

    优化2:提高传输帧率

    RDP默认的传输帧率为30帧每秒(fps),这对于一般用途可能已足够。但如果你需要更流畅的远程体验,可以将传输帧率提高到60fps。以下是如何操作:

    1. 打开远程主机上的注册表编辑器,按下Win+R组合键,输入regedit,然后按回车。

    2. 在注册表编辑器中,找到以下路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations。

    3. 在WinStations文件夹中,右键点击空白处,选择“新建” -> “DWORD (32位) 值”,并命名为“DWMFRAMEINTERVAL”。

    4. 双击新创建的“DWMFRAMEINTERVAL”项,在数值数据中输入15,并选择十进制基数。

    5. 点击确定保存更改,然后重启远程主机。

    现在,你的RDP传输帧率将提高到60fps,这将带来更加流畅的远程体验。请注意,实际效果还受到客户端设置和网络环境的影响。

    优化3:开启RemoteFX USB设备重定向

    RDP默认支持共享存储设备,但你也可以让它共享其他USB设备,如打印机、摄像头等。以下是如何开启RemoteFX USB设备重定向:

    1. 在客户端电脑上,打开组策略编辑器,按下Win+R组合键,输入gpedit.msc,然后按回车。

    2. 在组策略编辑器中,找到:计算机配置 -> 管理模板 -> Windows组件 -> 远程桌面服务 -> 远程桌面会话客户端 -> RemoteFX USB 设备重定向。

    3. 选择右侧的“允许此计算机中受支持的其他 RemoteFX USB 设备的 RDP 重定向”,并设置为“已启用”。

    4. 将选项中的“RemoteFX USB重定向访问权限”设置为“管理员和用户”。

    5. 确定保存更改,然后重启电脑。

    重启后,打开远程桌面客户端,点击“显示选项”,在本地资源中的“本地设备和资源”的详细信息中,你可以找到其他支持的RemoteFX USB设备。勾选这些设备后,它们将会在远程主机上可用。

    请注意,不同于一般的USB设备插入,远程主机可能不会自动安装重定向设备的驱动程序,你可能需要手动安装驱动以确保设备正常工作。

    最后,我们需要强调一点:在进行RDP性能优化时,请格外谨慎,特别是对于超频等操作。不正确的设置可能会导致系统稳定性问题,因此建议根据自己的需求和实际情况来决定是否进行这些优化操作。

  • 如何在Windows上设置OpenAI的环境变量

    如何在Windows上设置OpenAI的环境变量

    在使用OpenAI的API时,设置环境变量是一个重要的步骤,它可以帮助你轻松地管理API密钥和基本API配置。本教程将教你如何在Windows操作系统上设置OpenAI的环境变量,以便顺利使用OpenAI的服务。

    背景故事

    在数字时代,人工智能技术已经成为了各行各业的关键工具。OpenAI是一家领先的人工智能公司,提供了强大的自然语言处理模型,可以应用于各种应用程序中,从智能助手到文本生成。为了使用OpenAI的服务,你需要设置API密钥和其他配置参数,而在Windows上设置环境变量是一种高效的方式来管理这些配置。

    步骤1:打开Windows PowerShell

    首先,我们需要打开Windows PowerShell,这是一个功能强大的命令行工具,用于执行各种系统管理任务。你可以在Windows搜索栏中键入“PowerShell”来找到它并打开。

    步骤2:设置环境变量

    在打开的PowerShell窗口中,你可以使用以下命令来设置OpenAI的环境变量。请将这两行命令分别替换为你的API密钥和API基础URL。

    $env:OPENAI_API_KEY="你的API密钥"
    $env:OPENAI_API_BASE="如果有,在这里设置你的API代理地址"

    步骤3:验证环境变量设置

    为了验证环境变量是否已经成功设置,你可以使用以下命令来检查它们是否已经生效。

    echo $env:OPENAI_API_KEY
    echo $env:OPENAI_API_BASE

    如果一切设置正确,你将在PowerShell窗口中看到你的API密钥和API基础URL的值。

    至此,你已经成功在Windows上设置了OpenAI的环境变量。

    总结

    在本教程中,我们学习了如何在Windows操作系统上设置OpenAI的环境变量。这个简单的步骤可以帮助你更轻松地管理API密钥和其他配置信息,以便顺利使用OpenAI的服务。随着人工智能技术的不断发展,你可以利用这些强大的工具来构建各种智能应用程序,为你的工作和项目提供更多可能性。

  • 长期插电使用笔记本电脑:如何保护电池寿命?

    长期插电使用笔记本电脑:如何保护电池寿命?

    现代生活中,笔记本电脑已成为不可或缺的工具,而对于很多人来说,长时间使用笔记本电脑已经成为家常便饭。然而,长期插电使用笔记本电脑可能对电池寿命造成一定影响,因此,我们需要探讨如何保护电池寿命,同时回答是否有软件可以插电时禁用电池的问题。

    电池寿命与长期插电使用

    电池寿命是指电池能够保持满足其性能要求的时间长度,通常以充放电循环次数来衡量。对于内置电池的笔记本电脑来说,电池寿命的保护尤为重要,因为它们不容易更换。

    长期插电使用笔记本电脑,即使电池已经充满,电脑仍然通过电源供电。这种情况下,电池会持续处于充电状态,这被称为过充。过充和过少充电都可能对电池寿命产生负面影响。因此,用户有必要采取措施来降低这种风险。

    保护电池寿命的方法

    1. 使用官方或第三方工具

    一些笔记本电脑品牌提供了官方工具,允许用户在一定程度上控制电池充电状态。例如,Dell 笔记本可以在 BIOS 中设置充电上限和开始充电阈值。这意味着您可以将电池充电限制在一定的百分比范围内,如80%,从而避免过充。

    2. 第三方软件

    有一些第三方软件可以帮助您控制电池充电状态,尤其是在Windows笔记本上。这些软件通常允许您设置充电上限,以确保电池不会过度充电。一个例子是AlDente,它在Mac笔记本上可用。

    3. 充电宝

    如果您长时间需要使用笔记本电脑而无法插电,考虑购买一个充电宝。这样,您可以在需要时为笔记本电脑供电,而不会让电池处于过充状态。这对于移动办公或旅行非常有用。

    4. 常规维护

    定期进行电池维护也是保护电池寿命的关键。这包括在电池电量低于一定百分比时充电,避免将电池完全耗尽,以及避免将电脑长时间处于高温环境中。

    专家意见和用户经验

    在讨论如何保护电池寿命时,我们可以从一些专家意见和用户经验中汲取宝贵的经验教训:

    • 一些用户认为,电池本身是一种耗材,不必过于担心其寿命,可以根据需要随时更换电池或笔记本电脑。
    • 有用户建议不要使用某些软件来限制电池充电状态,因为这可能会影响到工作的灵活性和便捷性。
    • 有用户分享了品牌特定的方法,例如联想笔记本可以在联想电脑管家中设置电池充电状态,而华硕和苹果也有类似的功能。

    结论

    长期插电使用笔记本电脑在今天的生活中变得越来越普遍,但我们需要谨慎对待电池寿命的保护。通过使用官方工具、第三方软件、充电宝以及定期维护,我们可以降低电池寿命受损的风险。

    最终,保护电池寿命需要综合考虑用户的需求和使用情境。在实际使用中,用户可以根据自己的情况来选择适当的方法,以确保电池寿命得以有效延长。

  • Flutter:全球应用数百万,AI与跨平台的未来

    Flutter:全球应用数百万,AI与跨平台的未来

    Flutter,这款由Google开发并提供支持的开源移动应用程序开发框架,正以惊人的速度蓬勃发展。全球已有超过100万款应用使用Flutter开发,它在iOS、Android等多个平台上构建高质量的原生用户界面,为开发者提供了更高效的开发工具。近日,Google Flutter高级产品经理Zoey Fan透露了有关Flutter的一些令人振奋的信息,让我们一起来了解一下Flutter的现状以及未来的发展方向。

    Flutter的全球影响力

    Flutter于2018年首次推出,经过5年的版本更新迭代,目前最新的Flutter 3.13版本已经支持在六个平台上进行应用程序开发,包括iOS、Android、Web、Windows、MacOS和Linux。这一多平台支持使得开发者可以更广泛地覆盖用户,提供更出色的用户体验。

    中国成为了Flutter全球的第二大用户群体,一些知名的大企业,如阿里巴巴、腾讯等,也积极采用Flutter进行应用程序开发。这一趋势表明,Flutter在中国市场拥有广泛的认可和应用前景。

    Flutter的未来愿景

    在谈到Flutter的未来愿景时,Zoey Fan表示,Flutter的目标是帮助开发者降低开发成本、提高生产效率,而人工智能(AI)的发展也是基于这一愿景。他们正在进行一些用户调研,以了解开发者们在日常工作中遇到的痛点,以及可以通过AI来自动化的重复性工作。

    这一举措显示了Flutter团队对不断创新和提高开发者体验的承诺。通过整合AI技术,他们希望进一步简化应用程序开发流程,使开发者能够更专注于创造出色的应用。

    Flutter与原生API的融合

    由于Flutter是一个跨平台的框架,开发者有时需要与原生API进行交互,如访问相册、使用摄像头、处理通知等。为了提供更流畅的开发体验,Flutter团队正在积极推进与原生API的融合。

    Zoey Fan指出,他们正在开发更多的封装系统,使Dart语言可以直接依赖原生API。这将使开发者能够更轻松地使用原生功能,同时仍然能够利用Flutter的跨平台优势。

    用户数据安全和隐私

    在最后,Zoey Fan强调了Flutter团队对用户隐私权的高度重视。他们采取了各种措施来确保用户数据的安全,这包括数据加密、访问控制和合规性审查等方面的工作。这一举措旨在保护用户的个人信息,让用户能够更放心地使用Flutter应用。

    总的来说,Flutter的快速发展和不断创新的努力使其成为了移动应用程序开发领域的一股强大力量。随着AI技术的融入和原生API的更紧密集成,Flutter有望进一步提高开发效率和应用程序质量。同时,用户数据安全和隐私保护也将一直是Flutter团队的关键关注点,确保用户能够享受安全的应用体验。

    在Flutter的世界中,创新与安全并重,未来的发展前景令人充满期待。

  • ReactOS项目:努力迈向与Windows二进制兼容的自由操作系统

    ReactOS项目:努力迈向与Windows二进制兼容的自由操作系统

    近日,ReactOS项目发布了最新的时事通讯,总结了过去几个月的开发进展。这个开源操作系统项目自成立以来已经存在了22年,一直致力于与Windows设备的驱动程序和用户空间软件进行二进制兼容,旨在提供一个自由软件操作系统,与Microsoft Windows的各个版本具有驱动程序和应用/游戏兼容性。

    ReactOS 0.4.15版本:期待中的重要更新

    虽然还没有确定ReactOS 0.4.15版本的正式发布日期,但项目组表示他们正在积极努力推进这一版本的开发。ReactOS最近取得了一些显著的进展,这包括:

    1. ReactOS内核调试改进

    ReactOS内核的调试得到了重大改进,这将有助于更快地解决潜在的问题,提高了系统的稳定性。

    2. 更多硬件上支持UEFI启动

    ReactOS增加了对更多硬件上的UEFI启动的支持,使其能够在更多不同类型的计算机上运行。

    3. UI / shell改进

    用户界面(UI)和shell的改进将提升用户的整体体验,使ReactOS更具吸引力。

    4. 改进Microsoft DirectX支持

    ReactOS团队还在不断努力改进对Microsoft DirectX的支持,以更好地兼容各种应用程序和游戏。

    5. 更好的NT6+应用兼容性

    ReactOS项目还为NT6+应用程序提供了更好的兼容性准备,能够更好地支持包括Windows Vista、7、8、8.1、10和11等版本的软件。

    6. 改进GUI安装过程

    ReactOS还在努力改进其图形用户界面(GUI)安装过程,使安装变得更加顺畅和用户友好。

    7. 在Steam Deck掌机上的成功启动

    ReactOS团队成功将操作系统启动在Steam Deck掌机上,这展示了ReactOS在不同硬件平台上的潜力。

    尽管取得了这些进展,ReactOS的许多开发和测试工作仍然在虚拟机上进行,但这个项目的前景仍然令人充满期待。它代表了一种自由软件的理念,致力于为用户提供一个可替代的操作系统,以满足不同需求的用户。

    自由操作系统的未来

    ReactOS项目的不断进步和发展表明,自由操作系统在现代计算领域仍然有其独特的地位。尽管市场上主流的操作系统依然是Windows、macOS和Linux,但ReactOS为那些希望追求更多选择和自由的用户提供了一个令人兴奋的选项。

    随着ReactOS 0.4.15版本的到来,我们期待着看到更多的用户能够体验到这个自由操作系统所带来的潜力和便利。同时,ReactOS项目也需要继续得到支持和发展,以便在未来成为更多用户的首选之一。

  • 微软新专利:基于云端的Windows更新回滚技术

    微软新专利:基于云端的Windows更新回滚技术

    近日,美国商标和专利局(USPTO)公布了一项备受瞩目的技术专利,由微软研发的关于Windows更新的云端回滚技术。这一技术有望彻底改变用户的升级体验,让系统升级再也不成为后顾之忧。

    升级难题

    在现代计算机操作系统中,系统更新是一项常见但必不可少的任务。通过更新,操作系统可以修复之前版本中存在的各种Bug和问题,提供更好的性能和安全性。然而,系统更新也伴随着一些挑战,其中之一是新的Bug可能会在更新后出现,这可能会影响电脑的正常使用。

    虽然目前可以利用系统还原点的功能来回滚更新,但这需要将系统还原点备份到存储设备中,仍然相对繁琐。因此,用户在面临系统更新问题时通常感到头疼和不安。

    微软的解决方案

    微软的新技术专利提供了一个全新的解决方案,旨在改善用户的升级体验。该技术允许系统在更新后出现问题时,自动将电脑恢复到之前运行正常时的状态,就像没有进行过更新一样。这意味着用户可以享受系统更新带来的好处,同时无需担心可能出现的问题。

    这项技术的亮点在于它基于云端资源配置。通过云端,系统可以快速、有效地回滚到最近的正常运行版本,而无需复杂的备份过程。此外,该技术还可以收集不同计算机的信息,从而确定Bug出现的原因,为未来的更新提供有力的参考和改进方向。

    用户反响

    对于这一技术专利,用户反响褒贬不一。一些用户对微软的创新表示欢迎,认为这将大幅改善他们的系统升级体验,减少了后顾之忧。他们期待着未来能够尽快在微软的操作系统中看到这一功能的实现。

    然而,也有一些用户对这种技术表示担忧。他们担心这可能会涉及隐私问题,因为系统需要收集和存储用户的计算机信息。微软需要在推出这项技术时充分考虑用户的隐私和数据安全,以确保用户的权益得到充分保护。

    结语

    微软的云端回滚技术专利为系统更新带来了新的可能性,有望为用户提供更加顺畅和安全的升级体验。然而,随之而来的挑战包括隐私和数据安全问题,需要得到妥善处理。我们期待着看到这一技术在未来的操作系统中的实际应用,以及微软如何平衡技术创新与用户隐私的关系。

  • Windows 11更新:告别WinRAR时代

    Windows 11更新:告别WinRAR时代

    在信息技术迅猛发展的今天,我们每个人都或多或少地与各类软件打交道。这些软件如同时代的见证者,它们的更迭也在默默诉说着技术革新的步伐。而今,微软Windows 11的最新更新,或将标志着一代压缩软件巨头——WinRAR的落幕。

    软件巨变,情怀难舍

    1995年,Windows 95的到来开启了个人电脑时代的大门,而伴随它的,则是WinRAR的诞生。从那时起,WinRAR凭借其出色的压缩技术和独特的商业模式,成为了数代人的共同记忆。尤金·罗沙尔(Eugene Roshal),这位俄罗斯的程序员,用他的才华撰写了一个时代的传奇。那个熟悉的弹窗,提醒着我们的软件“试用期”已到——一个看似无休止的40天,成为了一种文化现象。

    随着时间的推移,尽管技术层出不穷,但WinRAR始终坚守其地位,似乎没有任何软件能撼动它。然而,时代的浪潮终究是要前进的。微软在Windows 11的最新可选更新中,不仅提供了原生的压缩文件支持,更是启用了所有“Moment 4”功能,包括Copilot和任务栏解组等。

    Windows 11的原生解压缩,革新还是革命?

    • Windows 11原生支持压缩文件
    • 操作系统的易用性大幅提升
    • 第三方压缩软件的市场影响

    在这次更新中,Windows 11将原生支持多达11种压缩文件格式的解压,并计划在不久的将来加入压缩功能。这意味着用户将不再需要依赖WinRAR等第三方软件来进行文件的压缩和解压操作。这一变革无疑将大幅提升操作系统的易用性和用户体验。

    但是,这种变化也带来了关于市场格局的思考。WinRAR等软件将面临巨大的挑战。毕竟,一旦操作系统自带了同样强大的功能,用户的选择很可能就会倾向于更为方便、无需额外成本的解决方案。

    WinRAR的挑战与机遇

    • WinRAR的商业模式和市场定位
    • 面对操作系统更新的应对策略
    • 第三方软件的未来道路

    WinRAR的商业模式一直以来都是其成功的秘诀之一。尽管它允许用户在试用期结束后继续使用,但是对于大型企业,它采取了严格的授权管理。这种针对性的策略使得WinRAR在企业级市场中获得了稳定的收入。但是,Windows 11的更新将迫使WinRAR必须重新思考其市场定位和商业模式。也许,这不仅是挑战,也是WinRAR探索创新,拓展新服务领域的机遇。

    对于其他第三方软件开发商来说,Windows 11的这一变化同样是一个信号,提示他们需要不断创新,以适应不断变化的市场需求和技术环境。

    在告别了一个时代的同时,我们也在迎接新技术的曙光。不变的是人们对于更好体验的追求,变的是技术的进步和市场的演变。WinRAR的40天试用期,也许在未来将不再是必须的存在,但它所代表的那份坚持和创新的精神,将永远激励着我们向前。

  • 自动签到天翼云盘,告别繁琐的手动操作

    自动签到天翼云盘,告别繁琐的手动操作

    你是否也因为拥有电信手机的福利,而获得了10T的天翼云盘空间,但又不想每天都登录签到?别担心,我为你提供了一个自动签到脚本的解决方案,让你告别烦人的手动操作。

    感谢热心观众:felix发现的错误。

    为了方便大家使用,特此放上脚本的下载链接:

    玩命点我

    问题的开始

    想象一下,每天早上醒来,你需要打开手机,登录天翼云盘,找到签到入口,然后点击签到按钮。虽然这个过程看似简单,但如果你想要长期坚持每天签到,它可能会变得相当烦琐。而且,有时候你可能会因为忙碌或忘记而错过签到,错失了获得奖励的机会。

    这就是这个自动签到脚本诞生的原因。它可以轻松地代替你完成签到任务,让你享受到天翼云盘的优惠,同时又省去了不必要的手动操作。

    项目介绍

    这个项目是一个简单但非常实用的Python脚本,它可以自动登录你的天翼云盘账户,找到签到入口,并点击签到按钮,完成每日签到任务。它的使用方法也非常简单,只需将脚本上传到你的服务器上,然后设置一个定时任务即可。一旦配置完成,你就可以忘记签到的烦恼,脚本会每天按时为你签到。

    项目优势

    这个自动签到脚本具有以下几个显著的优势:

    1. 自动化操作

    脚本完全自动化,不需要手动干预。你只需设置一次,就可以忘记签到的烦恼,每天都能获得奖励。

    2. 节省时间

    手动签到可能会花费你宝贵的时间,而脚本只需要几秒钟就能完成任务,让你有更多时间用于其他事情。

    3. 避免错过签到

    由于自动定时任务的存在,你再也不会因为忘记签到而错失奖励,始终能够及时签到。

    4. 开放源代码

    这个脚本的源代码是开放的,你可以根据自己的需求进行修改和定制,以满足特定的需求。

    使用方法

    要使用这个自动签到脚本,只需按照以下简单的步骤操作:

    1. 将脚本上传到你的服务器上。
    2. 在服务器上创建一个定时任务,设置脚本每天自动执行的时间。
    3. 启动定时任务,让脚本开始自动签到。

    不需要任何复杂的配置或技术知识,即可轻松享受自动签到的便利。

    代码部分

    如果你也想告别繁琐的手动签到,省下更多的时间用于更重要的事情,那就赶紧尝试这个自动签到脚本吧!复制粘贴下面的代码,然后挂起来吧。

    import time
    import re
    import json
    import base64
    import hashlib
    import urllib.parse
    import hmac
    import rsa
    import requests
    import random
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    
    BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz")
    
    B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
    
    s = requests.Session()
    
    # 在下面两行的引号内贴上账号(仅支持手机号)和密码
    username = "手机号"
    password = "密码"
    
    # 用于发送通知的邮箱配置
    email_config = {
        "smtp_server": "修改成你的邮箱信息",  # SMTP服务器地址
        "smtp_port": 587,  # SMTP服务器端口号
        "email_address": "修改成你的邮箱信息",  # 发件人邮箱地址
        "email_password": "修改成你的邮箱信息",  # 发件人邮箱密码
        "recipient_email": "修改成你的邮箱信息",  # 收件人邮箱地址
    }
    
    if not email_config["email_address"] or not email_config["email_password"]:
        print("发件人邮箱地址或密码为空,无法发送邮件通知")
        exit()
    
    def int2char(a):
        return BI_RM[a]
    
    def b64tohex(a):
        d = ""
        e = 0
        c = 0
        for i in range(len(a)):
            if list(a)[i] != "=":
                v = B64MAP.index(list(a)[i])
                if e == 0:
                    e = 1
                    d += int2char(v >> 2)
                    c = 3 & v
                elif e == 1:
                    e = 2
                    d += int2char(c << 2 | v >> 4)
                    c = 15 & v
                elif e == 2:
                    e = 3
                    d += int2char(c)
                    d += int2char(v >> 2)
                    c = 3 & v
                else:
                    e = 0
                    d += int2char(c << 2 | v >> 4)
                    d += int2char(15 & v)
        if e == 1:
            d += int2char(c << 2)
        return d
    
    def rsa_encode(j_rsakey, string):
        rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----"
        pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode())
        result = b64tohex((base64.b64encode(rsa.encrypt(f'{string}'.encode(), pubkey))).decode())
        return result
    
    def calculate_md5_sign(params):
        return hashlib.md5('&'.join(sorted(params.split('&'))).encode('utf-8')).hexdigest()
    
    def login(username, password):
        url = ""
        urlToken = "https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html"
        s = requests.Session()
        r = s.get(urlToken)
        pattern = r"https?://[^\s'\"]+"  
        match = re.search(pattern, r.text)  
        if match:
            url = match.group()  
        else:
            print("没有找到url")
    
        r = s.get(url)
        pattern = r"<a id=\"j-tab-login-link\"[^>]*href=\"([^\"]+)\""
        match = re.search(pattern, r.text)
        if match:
            href = match.group(1)
        else:
            print("没有找到href链接")
    
        r = s.get(href)
        captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0]
        lt = re.findall(r'lt = "(.+?)"', r.text)[0]
        returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0]
        paramId = re.findall(r'paramId = "(.+?)"', r.text)[0]
        j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0]
        s.headers.update({"lt": lt})
    
        username = rsa_encode(j_rsakey, username)
        password = rsa_encode(j_rsakey, password)
        url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do"
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0',
            'Referer': 'https://open.e.189.cn/',
        }
        data = {
            "appKey": "cloud",
            "accountType": '01',
            "userName": f"{{RSA}}{username}",
            "password": f"{{RSA}}{password}",
            "validateCode": "",
            "captchaToken": captchaToken,
            "returnUrl": returnUrl,
            "mailSuffix": "@189.cn",
            "paramId": paramId
        }
        r = s.post(url, data=data, headers=headers, timeout=5)
        if (r.json()['result'] == 0):
            print(r.json()['msg'])
        else:
            print(r.json()['msg'])
        redirect_url = r.json()['toUrl']
        r = s.get(redirect_url)
        return s
    
    def sign_in(s):
        rand = str(round(time.time() * 1000))
        surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K'
        url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN'
        url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN'
        url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN'
        headers = {
            'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6',
            "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1",
            "Host": "m.cloud.189.cn",
            "Accept-Encoding": "gzip, deflate",
        }
        response = s.get(surl, headers=headers)
        netdiskBonus = response.json()['netdiskBonus']
        if (response.json()['isSign'] == "false"):
            print(f"未签到,签到获得{netdiskBonus}M空间")
            res1 = f"未签到,签到获得{netdiskBonus}M空间"
        else:
            print(f"已经签到过了,签到获得{netdiskBonus}M空间")
            res1 = f"已经签到过了,签到获得{netdiskBonus}M空间"
    
        def draw_prize(url, description_prefix):
            response = s.get(url, headers=headers)
            if ("errorCode" in response.text):
                print(response.text)
                return ""
            else:
                description = response.json()['description']
                print(f"{description_prefix}{description}")
                return f"{description_prefix}{description}"
    
        res2 = draw_prize(url, "抽奖获得")
        res3 = draw_prize(url2, "抽奖获得")
        res4 = draw_prize(url3, "链接3抽奖获得")
    
        return res1, res2, res3, res4
    
    def send_email_notification(res1, res2, res3, res4):
        msg = MIMEMultipart()
        msg["From"] = email_config["email_address"]
        msg["To"] = email_config["recipient_email"]
        msg["Subject"] = "签到通知"
    
        body = f"签到结果:\n{res1}\n{res2}{res3}{res4}"
        msg.attach(MIMEText(body, "plain"))
    
        try:
            server = smtplib.SMTP(email_config["smtp_server"], email_config["smtp_port"])
            server.starttls()
            server.login(email_config["email_address"], email_config["email_password"])
            server.sendmail(email_config["email_address"], email_config["recipient_email"], msg.as_string())
            server.quit()
            print("邮件通知已发送")
        except Exception as e:
            print(f"邮件通知发送失败:{str(e)}")
    
    def main():
        s = login(username, password)
        res1, res2, res3, res4 = sign_in(s)
        send_email_notification(res1, res2, res3, res4)
    
    def lambda_handler(event, context):
        main()
    
    def main_handler(event, context):
        main()
    
    def handler(event, context):
        main()
    
    if __name__ == "__main__":
        main()
    

    让自动化精神帮助你解放双手,享受更多的天翼云盘福利吧!