filecxx_activation_code

自用,用于拷贝指定时间的激活码到剪切板

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         filecxx_activation_code
// @namespace    npm/vite-plugin-monkey
// @version      0.1.0
// @description  自用,用于拷贝指定时间的激活码到剪切板
// @icon         https://vitejs.dev/logo.svg
// @match        https://filecxx.com/en_US/activation_code.html
// @match        https://filecxx.com/zh_CN/activation_code.html
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.global.prod.js
// @grant        GM_addStyle
// @run-at       document-idle
// ==/UserScript==

(function (vue) {
  'use strict';

  const d=new Set;const importCSS = async e=>{d.has(e)||(d.add(e),(t=>{typeof GM_addStyle=="function"?GM_addStyle(t):document.head.appendChild(document.createElement("style")).append(t);})(e));};

  importCSS(" .container[data-v-1c5b843e]{display:flex;justify-content:center;align-items:center;min-height:100vh;padding:20px;background:linear-gradient(135deg,#667eea,#764ba2)}.card[data-v-1c5b843e]{background:#fff;border-radius:16px;padding:32px;box-shadow:0 20px 60px #0000004d;max-width:600px;width:100%}h2[data-v-1c5b843e]{margin:0 0 24px;color:#333;text-align:center;font-size:24px}.copy-button[data-v-1c5b843e]{width:100%;padding:14px 24px;font-size:16px;font-weight:600;color:#fff;background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 15px #667eea66}.copy-button[data-v-1c5b843e]:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 20px #667eea99}.copy-button[data-v-1c5b843e]:active:not(:disabled){transform:translateY(0)}.copy-button[data-v-1c5b843e]:disabled{opacity:.6;cursor:not-allowed}.message[data-v-1c5b843e]{margin-top:16px;padding:12px 16px;border-radius:8px;text-align:center;font-weight:500;background:#f0f9ff;color:#0369a1;border:1px solid #bae6fd}.result-section[data-v-1c5b843e]{margin-top:24px;padding-top:24px;border-top:2px solid #f1f5f9}.result-item[data-v-1c5b843e]{margin-bottom:16px;display:flex;flex-direction:column;gap:6px}.result-item[data-v-1c5b843e]:last-child{margin-bottom:0}.result-item label[data-v-1c5b843e]{font-weight:600;color:#64748b;font-size:14px;text-transform:uppercase;letter-spacing:.5px}.result-item span[data-v-1c5b843e]{color:#334155;font-size:16px}.activation-code[data-v-1c5b843e]{background:#f8fafc;border:2px solid #e2e8f0;border-radius:6px;padding:12px;font-family:Courier New,monospace;font-size:14px;word-break:break-all;color:#0f172a;display:block}@media (max-width: 640px){.card[data-v-1c5b843e]{padding:24px}h2[data-v-1c5b843e]{font-size:20px}} ");

  const styleCss = ":root{font-family:Inter,Avenir,Helvetica,Arial,sans-serif;font-size:16px;line-height:24px;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.card{padding:2em}#app{max-width:1280px;margin:0 auto;padding:2rem;text-align:center}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}";
  importCSS(styleCss);
  const _hoisted_1 = { class: "container" };
  const _hoisted_2 = { class: "card" };
  const _hoisted_3 = ["disabled"];
  const _hoisted_4 = {
    key: 0,
    class: "message"
  };
  const _hoisted_5 = {
    key: 1,
    class: "result-section"
  };
  const _hoisted_6 = { class: "result-item" };
  const _hoisted_7 = { class: "result-item" };
  const _hoisted_8 = { class: "result-item" };
  const _hoisted_9 = { class: "activation-code" };
  const _sfc_main = vue.defineComponent({
    __name: "App",
    setup(__props) {
      function getCurrentActivationCode() {
        const now = new Date();
        const codesElement = document.getElementById("codes");
        if (!codesElement) {
          return {
            code: "错误:找不到 ID 为 'codes' 的元素。",
            timeRange: null,
            currentTime: now.toLocaleString()
          };
        }
        const rawText = codesElement.textContent?.trim() || "";
        const codeBlocks = rawText.split(/\n{2,}/g).filter((block) => block.trim().length > 0);
        let activeCode = "未找到有效的激活码。当前时间不匹配任何时间段。";
        let matchedRange = null;
        for (const block of codeBlocks) {
          const lines = block.trim().split("\n");
          if (lines.length >= 2) {
            const timeRangeStr = lines[0].trim();
            const code = lines[1].trim();
            const times = timeRangeStr.split(" - ");
            if (times.length === 2) {
              const startTime = new Date(times[0]);
              const endTime = new Date(times[1]);
              if (now >= startTime && now < endTime) {
                activeCode = code;
                matchedRange = timeRangeStr;
                return {
                  code: activeCode,
                  timeRange: matchedRange,
                  currentTime: now.toLocaleString()
                };
              }
            }
          }
        }
        return {
          code: activeCode,
          timeRange: matchedRange,
          currentTime: now.toLocaleString()
        };
      }
      function copyToClipboard(textToCopy) {
        if (navigator.clipboard && window.isSecureContext) {
          navigator.clipboard.writeText(textToCopy).then(() => {
            console.log("成功复制到剪贴板:", textToCopy);
          }).catch((err) => {
            console.error("无法复制到剪贴板:", err);
          });
        } else {
          console.log("不安全的方法");
        }
      }
      const isLoading = vue.ref(false);
      const message = vue.ref("");
      const resultCode = vue.ref("");
      const resultTimeRange = vue.ref("");
      const resultCurrentTime = vue.ref("");
      const handleCopyCode = () => {
        isLoading.value = true;
        message.value = "";
        try {
          const result = getCurrentActivationCode();
          console.log("--- TS 查找结果 ---");
          console.log(`当前时间 (本地): ${result.currentTime}`);
          console.log(`匹配的时间段: ${result.timeRange || "N/A"}`);
          console.log(`${result.code}`);
          resultCode.value = result.code;
          resultTimeRange.value = result.timeRange || "无";
          resultCurrentTime.value = result.currentTime;
          copyToClipboard(result.code);
          if (result.timeRange) {
            message.value = "✅ 激活码已复制到剪贴板!";
          } else {
            message.value = "⚠️ 未找到有效激活码";
          }
        } catch (error) {
          console.error("执行失败:", error);
          message.value = "❌ 获取激活码失败:" + error.message;
        } finally {
          isLoading.value = false;
        }
      };
      return (_ctx, _cache) => {
        return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
          vue.createElementVNode("div", _hoisted_2, [
            _cache[3] || (_cache[3] = vue.createElementVNode("h2", null, "🔑 激活码获取工具", -1)),
            vue.createElementVNode("button", {
              onClick: handleCopyCode,
              disabled: isLoading.value,
              class: "copy-button"
            }, vue.toDisplayString(isLoading.value ? "处理中..." : "获取并复制激活码"), 9, _hoisted_3),
            message.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, vue.toDisplayString(message.value), 1)) : vue.createCommentVNode("", true),
            resultCode.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
              vue.createElementVNode("div", _hoisted_6, [
                _cache[0] || (_cache[0] = vue.createElementVNode("label", null, "当前时间:", -1)),
                vue.createElementVNode("span", null, vue.toDisplayString(resultCurrentTime.value), 1)
              ]),
              vue.createElementVNode("div", _hoisted_7, [
                _cache[1] || (_cache[1] = vue.createElementVNode("label", null, "匹配时间段:", -1)),
                vue.createElementVNode("span", null, vue.toDisplayString(resultTimeRange.value), 1)
              ]),
              vue.createElementVNode("div", _hoisted_8, [
                _cache[2] || (_cache[2] = vue.createElementVNode("label", null, "激活码:", -1)),
                vue.createElementVNode("code", _hoisted_9, vue.toDisplayString(resultCode.value), 1)
              ])
            ])) : vue.createCommentVNode("", true)
          ])
        ]);
      };
    }
  });
  const _export_sfc = (sfc, props) => {
    const target = sfc.__vccOpts || sfc;
    for (const [key, val] of props) {
      target[key] = val;
    }
    return target;
  };
  const App = _export_sfc(_sfc_main, [["__scopeId", "data-v-1c5b843e"]]);
  vue.createApp(App).mount(
    (() => {
      const app = document.createElement("div");
      document.body.append(app);
      return app;
    })()
  );

})(Vue);