<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Auto Key Presser Pro 2026 — Free Key Presser for Windows</title>
<meta name="description" content="Auto Key Presser Pro: free open-source automatic keyboard presser for Windows. Tap or hold any key, global hotkey, works in full-screen games & RDP.">
<meta name="keywords" content="auto key presser, auto key presser pro, automatic keyboard presser, auto keyboard clicker, auto key clicker, key holder, auto press key, hold key down app, keyboard auto presser, Roblox anti afk key presser, anti-afk, idle game key automation, keep pc awake, keep screen on, repeat key software for Windows, auto press W, minecraft afk hold W, mouse jiggler alternative, macro key presser, autoclicker for keyboard, rebindable global hotkey, SendInput scan code, free open source key presser, auto keypresser download, key presser for games, farming bot key, spam key tool">
<link rel="canonical" href="https://autokeypresserpro.com/">
<meta name="theme-color" content="#0A0D12">
<meta name="robots" content="index, follow">
<meta property="og:title" content="Auto Key Presser Pro 2026 — Free Key Presser for Windows">
<meta property="og:description" content="Free, open-source automatic keyboard presser for Windows. Tap or hold any key at a custom interval, toggle with a global hotkey, works in full-screen games & RDP.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://autokeypresserpro.com/">
<meta property="og:image" content="https://autokeypresserpro.com/assets/banner.png">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Auto Key Presser Pro 2026 — Free Key Presser for Windows">
<meta name="twitter:description" content="Free, open-source automatic keyboard presser for Windows. Tap or hold any key at a custom interval, toggle with a global hotkey, works in full-screen games & RDP.">
<meta name="twitter:image" content="https://autokeypresserpro.com/assets/banner.png">
<link rel="icon" href="assets/logo.png">
<link rel="apple-touch-icon" href="assets/logo.png">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@500;700;900&family=Rajdhani:wght@500;600;700&family=Share+Tech+Mono&family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Auto Key Presser Pro",
  "operatingSystem": "Windows 10, Windows 11",
  "applicationCategory": "UtilitiesApplication",
  "softwareVersion": "2.0",
  "url": "https://autokeypresserpro.com/",
  "downloadUrl": "https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip",
  "description": "Free, open-source automatic keyboard presser for Windows. Auto-tap or hold any key at a custom interval, toggled from any window with a global hotkey. Works in full-screen games and RDP/VNC via SendInput and hardware scan codes.",
  "license": "https://opensource.org/licenses/MIT",
  "offers": {
    "@type": "Offer",
    "price": "0",
    "priceCurrency": "USD"
  }
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Is Auto Key Presser Pro free?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes. Auto Key Presser Pro is 100% free and open-source under the MIT license. There are no ads, no telemetry, no upsells and no paid tiers. Download the zip, unzip and run." }
    },
    {
      "@type": "Question",
      "name": "Is it safe, and why might antivirus warn about it?",
      "acceptedAnswer": { "@type": "Answer", "text": "The tool is safe and fully open source. Because any auto keyboard presser injects keystrokes via SendInput, some antivirus engines flag key-injection utilities with a heuristic warning. You can read the source on GitHub, verify the published SHA-256 hash, check the VirusTotal report, or build the exe yourself." }
    },
    {
      "@type": "Question",
      "name": "Does it work in games and full-screen (Roblox, Minecraft)?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes. The engine uses SendInput with hardware scan codes, so presses land in full-screen games, Roblox, Minecraft and even RDP/VNC sessions where simpler key presser software fails." }
    },
    {
      "@type": "Question",
      "name": "Can it hold a key down (hold W)?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes. Enable Hold mode to keep a key held down continuously — perfect for minecraft AFK hold W, auto press W to walk, or keeping a skill key pressed. Leave it off for rapid tap/spam mode at your chosen interval." }
    },
    {
      "@type": "Question",
      "name": "Does it need installation?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes — a lightweight Windows MSI installer (~15 MB). Download the zip, unzip and run the MSI. Standard Windows install to Program Files; uninstall via Programs & Features." }
    },
    {
      "@type": "Question",
      "name": "Which Windows versions are supported?",
      "acceptedAnswer": { "@type": "Answer", "text": "Windows 10 and Windows 11 (64-bit). It runs on the .NET Framework already included with modern Windows." }
    },
    {
      "@type": "Question",
      "name": "Is it open source?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes. The full source is on GitHub under the MIT license. You can inspect it, fork it, verify the build, or compile it yourself." }
    },
    {
      "@type": "Question",
      "name": "Can I rebind the global hotkey?",
      "acceptedAnswer": { "@type": "Answer", "text": "Yes. The rebindable global hotkey defaults to F6 and can be set to any key F1–F12. Start and stop the auto key clicker from any window without alt-tabbing out of your game." }
    },
    {
      "@type": "Question",
      "name": "Will it get me banned in online games?",
      "acceptedAnswer": { "@type": "Answer", "text": "Use it responsibly. Auto Key Presser Pro is built for single-player, idle/AFK, testing/QA and accessibility use. It makes no attempt to be undetectable. Competitive titles with kernel anti-cheat such as Vanguard, EAC or BattlEye prohibit input automation — do not use it there. You are responsible for following each game's terms of service." }
    }
  ]
}
</script>
<style>
:root{
  --bg:#0A0D12; --bg2:#0D1016; --panel:#12161D; --panel2:#151A22;
  --border:#232A34; --green:#39FF88; --green2:#4DFF9A; --cyan:#29D3FF;
  --white:#F4F7FB; --grey:#A8B2C0; --muted:#6B7686; --red:#FF5A5A;
  --clip:14px;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth; background:#05070A}
body{
  margin:0; background:transparent; color:var(--grey);
  font-family:'Inter',system-ui,sans-serif; line-height:1.6;
  overflow-x:hidden; -webkit-font-smoothing:antialiased;
}
/* full-page darkened "gamer at his PC" cover behind the whole site */
/* static cover replaced by animated bgfx engine */
.site-scrim{position:fixed; inset:0; z-index:-1; pointer-events:none;
  background:
    linear-gradient(180deg, rgba(6,9,13,.06) 0%, rgba(6,9,13,.28) 42%, rgba(6,9,13,.40) 78%, rgba(5,7,10,.50) 100%),
    radial-gradient(130% 100% at 50% 30%, transparent 30%, rgba(5,7,10,.18) 100%);}
body::before{
  content:""; position:fixed; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(1100px 700px at 82% -8%, rgba(41,211,255,.09), transparent 60%),
    radial-gradient(900px 640px at 12% 8%, rgba(57,255,136,.07), transparent 60%);
}
/* faint scanlines overlay */
body::after{
  content:""; position:fixed; inset:0; z-index:1; pointer-events:none; opacity:.35;
  background:repeating-linear-gradient(to bottom, rgba(255,255,255,.014) 0 1px, transparent 1px 3px);
  mix-blend-mode:overlay;
}
.wrap{max-width:1180px; margin:0 auto; padding:0 22px; position:relative; z-index:2}
a{color:var(--cyan); text-decoration:none}
img{max-width:100%; display:block}
h1,h2,h3{color:var(--white); margin:0; line-height:1.12; font-family:'Rajdhani',sans-serif; font-weight:700}
.display{font-family:'Orbitron',sans-serif}
.mono{font-family:'Share Tech Mono',monospace}
:focus-visible{outline:2px solid var(--cyan); outline-offset:3px}

/* micro label */
.micro{
  font-family:'Share Tech Mono',monospace; font-size:.72rem; letter-spacing:.24em;
  text-transform:uppercase; color:var(--green); display:inline-flex; align-items:center; gap:8px;
}
.micro .dot{width:7px; height:7px; border-radius:50%; background:var(--green); box-shadow:0 0 10px var(--green); animation:blink 2.4s ease-in-out infinite}
.micro.cy{color:var(--cyan)} .micro.cy .dot{background:var(--cyan); box-shadow:0 0 10px var(--cyan)}
@keyframes blink{0%,100%{opacity:1}50%{opacity:.28}}

/* clipped HUD surfaces */
.clip{clip-path:polygon(var(--clip) 0,100% 0,100% calc(100% - var(--clip)),calc(100% - var(--clip)) 100%,0 100%,0 var(--clip))}

/* corner-bracket frame — brackets sit on the two SQUARE corners (top-right + bottom-left),
   complementing the two angular clipped corners (top-left + bottom-right) so they are never sliced by clip-path. */
.frame{position:relative; background:var(--panel); border:1px solid var(--border)}
.frame::before,.frame::after{
  content:""; position:absolute; width:17px; height:17px; pointer-events:none;
}
.frame::before{top:-1px; right:-1px; border:2px solid var(--green); border-left:0; border-bottom:0; opacity:.92; box-shadow:0 0 9px rgba(57,255,136,.4)}
.frame::after{bottom:-1px; left:-1px; border:2px solid var(--cyan); border-right:0; border-top:0; opacity:.8}

/* buttons */
.btn{
  --clip:11px; display:inline-flex; align-items:center; justify-content:center; gap:10px;
  font-family:'Rajdhani',sans-serif; font-weight:700; font-size:1.02rem; letter-spacing:.04em;
  padding:15px 26px; cursor:pointer; border:1px solid transparent; text-align:center;
  transition:transform .15s ease, box-shadow .25s ease, background .2s ease;
  clip-path:polygon(var(--clip) 0,100% 0,100% calc(100% - var(--clip)),calc(100% - var(--clip)) 100%,0 100%,0 var(--clip));
}
.btn:hover{transform:translateY(-2px)}
.btn:active{transform:translateY(0)}
.btn-primary{
  background:linear-gradient(135deg,var(--green),var(--green2)); color:#04160c;
  box-shadow:0 0 0 1px rgba(57,255,136,.4), 0 10px 34px rgba(57,255,136,.28);
  animation:pulse 3.2s ease-in-out infinite;
}
.btn-primary:hover{box-shadow:0 0 0 1px rgba(57,255,136,.6), 0 14px 44px rgba(57,255,136,.45)}
@keyframes pulse{0%,100%{box-shadow:0 0 0 1px rgba(57,255,136,.4),0 10px 30px rgba(57,255,136,.22)}50%{box-shadow:0 0 0 1px rgba(57,255,136,.6),0 12px 40px rgba(57,255,136,.42)}}
.btn-ghost{background:rgba(41,211,255,.05); color:var(--cyan); border:1px solid rgba(41,211,255,.4)}
.btn-ghost:hover{background:rgba(41,211,255,.1); box-shadow:0 8px 26px rgba(41,211,255,.2)}

/* NAV */
header.nav{position:sticky; top:0; z-index:50; backdrop-filter:blur(12px);
  background:rgba(10,13,18,.82); border-bottom:1px solid var(--border)}
.nav-in{display:flex; align-items:center; gap:20px; height:64px}
.brand{display:flex; align-items:center; gap:11px; margin-right:auto}
.brand img{width:34px; height:34px; filter:drop-shadow(0 0 8px rgba(57,255,136,.5))}
.brand b{font-family:'Orbitron',sans-serif; color:var(--white); font-size:1.02rem; letter-spacing:.02em; font-weight:700}
.brand b span{color:var(--cyan)}
.nav-links{display:flex; gap:26px}
.nav-links a{color:var(--grey); font-family:'Rajdhani',sans-serif; font-weight:600; font-size:1rem; letter-spacing:.03em; transition:color .2s}
.nav-links a:hover{color:var(--green)}
.nav-cta{display:flex; align-items:center; gap:14px}
.nav-cta .gh{color:var(--grey); font-family:'Rajdhani',sans-serif; font-weight:600; display:inline-flex; align-items:center; gap:7px}
.nav-cta .gh:hover{color:var(--white)}
.nav-tg{color:var(--cyan); border:1px solid rgba(41,211,255,.45); border-radius:7px;
  padding:7px 13px; background:rgba(41,211,255,.07); display:inline-flex; align-items:center; gap:7px;
  font-family:'Rajdhani',sans-serif; font-weight:700; font-size:.92rem; letter-spacing:.02em;
  transition:background .2s, box-shadow .2s}
.nav-tg:hover{background:rgba(41,211,255,.14); box-shadow:0 0 16px rgba(41,211,255,.28)}
.nav .btn{padding:9px 18px; font-size:.92rem}
.burger{display:none; background:none; border:1px solid var(--border); color:var(--white); width:42px; height:40px; border-radius:6px; cursor:pointer; font-size:1.2rem}

/* SECTIONS */
section{position:relative; padding:84px 0}
.sec-head{max-width:720px; margin:0 auto 46px; text-align:center}
.sec-head h2{font-size:clamp(1.7rem,4vw,2.5rem); text-transform:uppercase; letter-spacing:.02em; margin:14px 0 12px}
.sec-head p{color:var(--grey); font-size:1.05rem}
.accent{color:var(--green)} .accent-cy{color:var(--cyan)}

/* HERO */
.hero{padding:64px 0 74px; overflow:hidden}
/* readability scrim so the headline stays crisp over the gamer cover */
.hero::before{content:""; position:absolute; inset:0; z-index:1; pointer-events:none;
  background:
    linear-gradient(90deg, rgba(6,9,13,.28) 0%, rgba(6,9,13,.03) 46%, transparent 82%),
    linear-gradient(0deg, rgba(6,9,13,.18), transparent 34%);}
/* energy rings glow over the gamer via screen blend (black drops out) */
.hero-bg{position:absolute; inset:0; z-index:0; opacity:.85; mix-blend-mode:screen;
   background:url('assets/hero_oai.png') right center/cover no-repeat;}
.hero-grid{position:relative; z-index:2; display:grid; grid-template-columns:1.05fr .95fr; gap:48px; align-items:center}
.hero h1{font-size:clamp(2.1rem,5.4vw,3.7rem); text-transform:uppercase; letter-spacing:.01em; margin:18px 0}
.hero h1 .g{color:var(--green); text-shadow:0 0 26px rgba(57,255,136,.45)}
.hero h1 .c{color:var(--cyan)}
.hero .sub{font-size:1.12rem; color:var(--grey); max-width:560px}
.hero .sub b{color:var(--white); font-weight:600}
.hero-actions{display:flex; flex-wrap:wrap; gap:14px; margin:28px 0 22px}
.chips{display:flex; flex-wrap:wrap; gap:9px; margin-top:6px}
.chip{font-family:'Share Tech Mono',monospace; font-size:.72rem; letter-spacing:.06em; color:var(--grey);
  border:1px solid var(--border); background:var(--panel); padding:6px 11px; border-radius:5px}
.chip b{color:var(--green); font-weight:400}
.chip.cy b{color:var(--cyan)}

/* hero visual */
.hero-visual{position:relative}
.mock{position:relative; padding:20px; background:linear-gradient(180deg,var(--panel2),var(--bg2)); border:1px solid var(--border)}
.mock-bar{display:flex; align-items:center; gap:7px; margin-bottom:14px; font-family:'Share Tech Mono',monospace; font-size:.68rem; color:var(--muted); letter-spacing:.1em}
.mock-bar i{width:9px; height:9px; border-radius:50%; display:inline-block}
.mock-bar i:nth-child(1){background:#FF5A5A}.mock-bar i:nth-child(2){background:#39FF88}.mock-bar i:nth-child(3){background:#29D3FF}
.mock-bar span{margin-left:auto}
.mock img{width:100%; border:1px solid var(--border)}
.keycaps-float{position:absolute; right:-26px; bottom:-34px; width:190px; filter:drop-shadow(0 20px 40px rgba(0,0,0,.6));
  animation:float 6s ease-in-out infinite}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
.readout{position:absolute; left:-14px; top:-18px; z-index:3}

/* STAT STRIP */
.stats{border-top:1px solid var(--border); border-bottom:1px solid var(--border); background:var(--bg2); padding:0}
.stats .wrap{display:grid; grid-template-columns:repeat(5,1fr); gap:0}
.stat{padding:26px 18px; text-align:center; border-right:1px solid var(--border)}
.stat:last-child{border-right:none}
.stat .n{font-family:'Orbitron',sans-serif; font-weight:700; font-size:1.5rem; color:var(--green); text-shadow:0 0 18px rgba(57,255,136,.35)}
.stat .n.cy{color:var(--cyan); text-shadow:0 0 18px rgba(41,211,255,.35)}
.stat .l{font-family:'Share Tech Mono',monospace; font-size:.7rem; letter-spacing:.1em; text-transform:uppercase; color:var(--muted); margin-top:6px}

/* FEATURES */
.grid3{display:grid; grid-template-columns:repeat(3,1fr); gap:20px}
.card{--clip:16px; padding:26px; position:relative; transition:transform .2s ease, border-color .2s ease, box-shadow .25s ease}
.card:hover{transform:translateY(-4px); border-color:rgba(57,255,136,.35); box-shadow:0 14px 40px rgba(0,0,0,.4)}
.card .k{font-family:'Share Tech Mono',monospace; font-size:.68rem; color:var(--muted); letter-spacing:.16em}
.card h3{font-size:1.28rem; margin:12px 0 9px; text-transform:uppercase; letter-spacing:.01em}
.card p{font-size:.96rem; margin:0}
.card .ico{width:46px; height:46px; display:grid; place-items:center; border:1px solid rgba(57,255,136,.35);
  background:rgba(57,255,136,.06); color:var(--green); border-radius:9px; font-size:1.4rem}
.card:nth-child(3n-1) .ico{border-color:rgba(41,211,255,.35); background:rgba(41,211,255,.06); color:var(--cyan)}

/* USE CASES */
.usewrap{position:relative}
.usewrap .tex{position:absolute; inset:0; z-index:0; background:url('assets/hero_grok.png') center/cover; opacity:.16}
.usewrap .tex::after{content:""; position:absolute; inset:0; background:linear-gradient(180deg,var(--bg),rgba(10,13,18,.6),var(--bg))}
.grid2{display:grid; grid-template-columns:repeat(2,1fr); gap:20px; position:relative; z-index:2}
.uc{--clip:16px; padding:28px; transition:transform .2s ease, border-color .2s ease, box-shadow .25s ease}
.uc:hover{transform:translateY(-4px); border-color:rgba(41,211,255,.35); box-shadow:0 14px 40px rgba(0,0,0,.4)}
.uc .tag{font-family:'Share Tech Mono',monospace; font-size:.7rem; letter-spacing:.14em; color:var(--green); text-transform:uppercase}
.uc h3{font-size:1.32rem; margin:12px 0 10px; text-transform:uppercase}
.uc p{font-size:.98rem}
.uc .kw{margin-top:14px; display:flex; flex-wrap:wrap; gap:7px}
.uc .kw span{font-family:'Share Tech Mono',monospace; font-size:.66rem; color:var(--cyan); border:1px solid rgba(41,211,255,.28); padding:4px 9px; border-radius:4px; letter-spacing:.04em}
.uc.g2 .tag{color:var(--cyan)} .uc.g2 .kw span{color:var(--green); border-color:rgba(57,255,136,.28)}

/* SCREENSHOTS */
.shots{display:grid; grid-template-columns:repeat(3,1fr); gap:22px}
.shot{--clip:14px; padding:16px; text-align:center}
.shot .win{border:1px solid var(--border); background:var(--bg2); padding:8px}
.shot .wb{display:flex; gap:6px; padding:0 2px 8px; align-items:center}
.shot .wb i{width:8px;height:8px;border-radius:50%}
.shot .wb i:nth-child(1){background:#FF5A5A}.shot .wb i:nth-child(2){background:#39FF88}.shot .wb i:nth-child(3){background:#29D3FF}
.shot .wb span{margin-left:auto; font-family:'Share Tech Mono',monospace; font-size:.6rem; color:var(--muted); letter-spacing:.1em}
.shot img{margin:0 auto; image-rendering:auto; width:100%; max-width:360px; height:auto}
.shot p{font-size:.9rem; margin:14px 0 4px; color:var(--grey)}
.shot .cap{font-family:'Share Tech Mono',monospace; font-size:.66rem; color:var(--green); letter-spacing:.1em; text-transform:uppercase}

/* HOW */
.steps{display:grid; grid-template-columns:repeat(4,1fr); gap:20px}
.step{--clip:14px; padding:26px}
.step .num{font-family:'Orbitron',sans-serif; font-weight:900; font-size:2.1rem; color:transparent;
  -webkit-text-stroke:1.5px var(--green); line-height:1}
.step:nth-child(2) .num{-webkit-text-stroke-color:var(--cyan)}
.step:nth-child(4) .num{-webkit-text-stroke-color:var(--cyan)}
.step h3{font-size:1.14rem; margin:12px 0 8px; text-transform:uppercase}
.step p{font-size:.93rem; margin:0}

/* DOWNLOAD */
.dl{position:relative; overflow:hidden}
.dl .tex{position:absolute; inset:0; z-index:0; background:url('assets/hero_grok.png') center/cover; opacity:.2}
.dl .tex::after{content:""; position:absolute; inset:0; background:radial-gradient(900px 500px at 50% 40%, rgba(57,255,136,.1), transparent 60%), linear-gradient(180deg,var(--bg),rgba(10,13,18,.7),var(--bg))}
.dlbox{--clip:22px; position:relative; z-index:2; max-width:860px; margin:0 auto; padding:44px 40px; text-align:center; background:linear-gradient(180deg,var(--panel2),var(--bg2))}
.dlbox h2{font-size:clamp(1.8rem,4vw,2.6rem); text-transform:uppercase; margin:16px 0 10px}
.dlbox .lead{font-size:1.06rem; max-width:560px; margin:0 auto 26px}
.dl-actions{display:flex; flex-wrap:wrap; gap:14px; justify-content:center; margin-bottom:26px}
.dl-actions .btn{font-size:1.08rem; padding:17px 30px}
.verify{--clip:12px; text-align:left; background:var(--bg); border:1px solid var(--border); padding:20px 22px; margin:6px auto 0; max-width:640px}
.verify .vh{font-family:'Share Tech Mono',monospace; font-size:.72rem; letter-spacing:.14em; color:var(--cyan); text-transform:uppercase; margin-bottom:9px; display:flex; align-items:center; gap:8px}
.verify p{font-size:.88rem; margin:0 0 8px}
.verify code{font-family:'Share Tech Mono',monospace; color:var(--green); font-size:.8rem; word-break:break-all; background:rgba(57,255,136,.06); padding:2px 6px; border-radius:4px}
.reqrow{display:flex; flex-wrap:wrap; gap:9px; justify-content:center; margin-top:22px}

/* FAQ */
.faq{max-width:820px; margin:0 auto; display:flex; flex-direction:column; gap:12px}
.qa{--clip:12px; border:1px solid var(--border); background:var(--panel); transition:border-color .2s ease}
.qa[open]{border-color:rgba(57,255,136,.3)}
.qa summary{list-style:none; cursor:pointer; padding:20px 22px; display:flex; align-items:center; gap:14px;
  font-family:'Rajdhani',sans-serif; font-weight:700; font-size:1.12rem; color:var(--white)}
.qa summary::-webkit-details-marker{display:none}
.qa summary .qmk{font-family:'Share Tech Mono',monospace; color:var(--green); font-size:.9rem; flex-shrink:0}
.qa summary .arw{margin-left:auto; color:var(--cyan); transition:transform .25s; font-size:1.1rem; flex-shrink:0}
.qa[open] summary .arw{transform:rotate(45deg)}
.qa .a{padding:0 22px 22px 56px; font-size:.98rem; color:var(--grey)}
.qa .a b{color:var(--white)}

/* FOOTER */
footer{border-top:1px solid var(--border); background:var(--bg2); padding:52px 0 30px; position:relative; z-index:2}
.foot-top{display:grid; grid-template-columns:1.4fr 1fr 1fr; gap:32px; margin-bottom:30px}
.foot-brand .brand{margin-bottom:14px}
.foot-brand p{font-size:.9rem; max-width:360px}
.foot-col h4{font-family:'Share Tech Mono',monospace; font-size:.72rem; letter-spacing:.14em; color:var(--green); text-transform:uppercase; margin:0 0 14px}
.foot-col a{display:block; color:var(--grey); font-size:.94rem; margin-bottom:10px; font-family:'Rajdhani',sans-serif; font-weight:600}
.foot-col a:hover{color:var(--cyan)}
.kwline{font-size:.82rem; color:var(--muted); border-top:1px solid var(--border); padding-top:22px; line-height:1.7}
.copy{display:flex; flex-wrap:wrap; gap:12px 20px; justify-content:space-between; margin-top:18px; font-family:'Share Tech Mono',monospace; font-size:.72rem; letter-spacing:.06em; color:var(--muted)}

/* reveal */
.reveal{opacity:0; transform:translateY(26px); transition:opacity .6s ease, transform .6s ease}
.reveal.in{opacity:1; transform:none}

@media (max-width:900px){
  .hero-grid{grid-template-columns:1fr; gap:56px}
  .hero-bg{opacity:.4}
  .keycaps-float{width:150px; right:0; bottom:-24px}
  .grid3,.grid2,.shots,.steps{grid-template-columns:1fr 1fr}
  .stats .wrap{grid-template-columns:repeat(2,1fr)}
  .stat:nth-child(2n){border-right:none}
  .stat{border-bottom:1px solid var(--border)}
  .foot-top{grid-template-columns:1fr 1fr}
  .foot-brand{grid-column:1/-1}
}
@media (max-width:640px){
  .nav-links,.nav-cta .gh{display:none}
  .nav-tg .tgt{display:none} .nav-tg{padding:7px 11px}
  .brand b{display:none}
  .nav .btn{padding:8px 14px; font-size:.86rem}
  .nav-in{gap:12px}
  .burger{display:block}
  .nav.open .nav-links{display:flex; position:absolute; top:64px; left:0; right:0; flex-direction:column; gap:0;
    background:var(--bg2); border-bottom:1px solid var(--border); padding:8px 0}
  .nav.open .nav-links a{padding:14px 22px; border-top:1px solid var(--border)}
  section{padding:60px 0}
  .grid3,.grid2,.shots,.steps{grid-template-columns:1fr}
  .stats .wrap{grid-template-columns:1fr 1fr}
  .stat:nth-child(2n){border-right:none}
  .dlbox{padding:34px 20px}
  .qa .a{padding-left:22px}
  .hero h1{margin:14px 0}
}
@media (prefers-reduced-motion:reduce){
  *{animation:none !important; transition:none !important; scroll-behavior:auto !important}
  .reveal{opacity:1; transform:none}
}

/* ===== bgfx animated background ===== */
/* ===== bgfx — CUBE FLIP 3D animated background ===== */
#bgfx-root{
  position:fixed; inset:0; z-index:-2;
  pointer-events:none; overflow:hidden;
  background:#05070A;               /* solid base so tile gaps never flash white */
}

/* --- desktop tile mosaic --- */
.bgfx-grid{
  position:absolute; inset:0;
  display:grid;
  perspective:900px;                /* real depth for the card flips */
  perspective-origin:50% 44%;
}

.bgfx-tile{
  position:relative;
  transform-style:preserve-3d;
  transform:rotate3d(var(--bgfx-ax,0),var(--bgfx-ay,1),0,var(--bgfx-deg,0deg));
  transition:transform 1s cubic-bezier(.62,.04,.28,1);
  transition-delay:var(--bgfx-d,0ms);   /* per-column stagger => left->right wave */
  will-change:transform;
}

.bgfx-face{
  position:absolute; inset:0;
  backface-visibility:hidden;
  -webkit-backface-visibility:hidden;
  background-repeat:no-repeat;
  box-shadow:inset 0 0 20px rgba(0,0,0,.26);  /* subtle edge depth on each cube face */
}
/* back face is pre-rotated 180deg about the tile's own axis */
.bgfx-back{ transform:rotate3d(var(--bgfx-ax,0),var(--bgfx-ay,1),0,180deg); }

/* --- mobile / reduced-motion whole-screen crossfade --- */
.bgfx-cross{ position:absolute; inset:0; display:none; }
.bgfx-cf-a,.bgfx-cf-b{
  position:absolute; inset:0;
  background-position:center; background-size:cover; background-repeat:no-repeat;
  opacity:0;
  transition:opacity 1.2s ease;
  will-change:opacity;
}

/* very light vignette (scrim at z-index:-1 does the real dimming) */
#bgfx-root::after{
  content:""; position:absolute; inset:0; pointer-events:none;
  background:radial-gradient(125% 125% at 50% 40%, transparent 62%, rgba(0,0,0,.20) 100%);
}

@media (prefers-reduced-motion: reduce){
  .bgfx-tile,.bgfx-cf-a,.bgfx-cf-b{ transition:none !important; }
}
</style>
</head>
<body>
<div id="bgfx-root" aria-hidden="true">
  <div class="bgfx-grid"></div>
  <div class="bgfx-cross">
    <div class="bgfx-cf-a"></div>
    <div class="bgfx-cf-b"></div>
  </div>
</div>
<div class="site-scrim" aria-hidden="true"></div>

<!-- NAV -->
<header class="nav" id="nav">
  <div class="wrap nav-in">
    <a class="brand" href="#top" aria-label="Auto Key Presser Pro home">
      <img src="assets/logo.png" alt="Auto Key Presser Pro logo — glowing green WASD keycap app icon">
      <b>AUTO KEY PRESSER <span>PRO</span></b>
    </a>
    <nav class="nav-links" aria-label="Primary">
      <a href="#features">Features</a>
      <a href="#usecases">Use cases</a>
      <a href="#download">Download</a>
      <a href="#faq">FAQ</a>
    </nav>
    <div class="nav-cta">
      <a class="nav-tg" href="https://t.me/windows_free_software" target="_blank" rel="noopener" aria-label="Join our Telegram — more free Windows software"><span class="tgi">💬</span><span class="tgt">Telegram</span></a>
      <a class="gh" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">GitHub ↗</a>
      <a class="btn btn-primary" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">Download</a>
    </div>
    <button class="burger" id="burger" aria-label="Toggle menu" aria-expanded="false">≡</button>
  </div>
</header>

<main id="top">

<!-- HERO -->
<section class="hero" id="hero">
  <div class="hero-bg" aria-hidden="true"></div>
  <div class="wrap hero-grid">
    <div class="hero-copy reveal in">
      <span class="micro"><span class="dot"></span>System online // v2.1 // AUTO_KEY_PRESSER.MSI</span>
      <h1 class="display">Auto Key Presser <span class="c">Pro</span> <span class="g">for Windows</span></h1>
      <p class="sub">The free, open-source <b>automatic keyboard presser</b> that auto-taps or <b>holds any key</b> at a custom interval — toggled from any window with a global hotkey. Built for <b>Roblox anti-AFK</b>, idle-game farming, keeping your PC awake and QA testing. <b>SendInput + scan codes</b> land presses in full-screen games &amp; RDP.</p>
      <div class="hero-actions">
        <a class="btn btn-primary" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">⬇ Download for Windows — Free</a>
        <a class="btn btn-ghost" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">View on GitHub</a>
      </div>
      <div class="chips">
        <span class="chip"><b>✓</b> Free</span>
        <span class="chip"><b>✓</b> Open-source (MIT)</span>
        <span class="chip cy"><b>✓</b> MSI installer</span>
        <span class="chip"><b>✓</b> ~15 MB</span>
        <span class="chip cy"><b>✓</b> No ads / telemetry</span>
        <span class="chip"><b>✓</b> Windows 10/11</span>
        <span class="chip cy"><b>✓</b> SHA-256 + VirusTotal</span>
      </div>
    </div>
    <div class="hero-visual reveal in">
      <div class="frame clip readout" style="padding:8px 12px"><span class="micro cy"><span class="dot"></span>STATUS: READY</span></div>
      <div class="mock clip">
        <div class="mock-bar"><i></i><i></i><i></i><span>AKP // MAIN PANEL</span></div>
        <img src="assets/screenshot_1.png" alt="Auto Key Presser Pro app window showing Key Space, interval 100 ms, Hold key down option, global hotkey F6 and a green START button" width="400" height="344">
      </div>
      <img class="keycaps-float" src="assets/keycaps.png" alt="Glowing green WASD keycaps — the key presser for games brand mark" width="190" height="153">
    </div>
  </div>
</section>

<!-- STAT STRIP -->
<section class="stats" style="padding:0" aria-label="At a glance">
  <div class="wrap">
    <div class="stat"><div class="n">100%</div><div class="l">Free forever</div></div>
    <div class="stat"><div class="n cy">MIT</div><div class="l">Open source</div></div>
    <div class="stat"><div class="n">~15 MB</div><div class="l">Windows installer</div></div>
    <div class="stat"><div class="n cy">0 / 0</div><div class="l">Ads / telemetry</div></div>
    <div class="stat"><div class="n">RDP ✓</div><div class="l">Games &amp; VNC</div></div>
  </div>
</section>

<!-- FEATURES -->
<section id="features">
  <div class="wrap">
    <div class="sec-head reveal">
      <span class="micro"><span class="dot"></span>Module 01 // Capabilities</span>
      <h2 class="display">Everything a <span class="accent">key presser</span> should do</h2>
      <p>A focused <b style="color:var(--white)">keyboard auto presser</b> with the controls that matter — nothing bloated, nothing hidden.</p>
    </div>
    <div class="grid3">
      <article class="card frame clip reveal">
        <div class="ico">⌨</div><div class="k" style="margin-top:12px">FN.01</div>
        <h3>Any key</h3>
        <p>Auto-press any keyboard key — letters, numbers, Space, Enter, F-keys, arrows. Set your key in one click with the <b style="color:var(--grey)">auto press key</b> picker.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">⏱</div><div class="k" style="margin-top:12px">FN.02</div>
        <h3>Custom interval</h3>
        <p>Dial the repeat rate from a blistering 5 ms up to 10 minutes. Perfect as a fast <b style="color:var(--grey)">auto keyboard clicker</b> or a slow anti-idle tick.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">⬇</div><div class="k" style="margin-top:12px">FN.03</div>
        <h3>Tap or Hold mode</h3>
        <p>Rapid-tap a key, or flip on <b style="color:var(--grey)">Hold</b> to keep a key held down continuously — a true <b style="color:var(--grey)">hold key down app</b> and key holder.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">🎲</div><div class="k" style="margin-top:12px">FN.04</div>
        <h3>Randomized ± timing</h3>
        <p>Add a random ± jitter to every interval so presses aren't robotically uniform — a more natural cadence for idle automation.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">⚡</div><div class="k" style="margin-top:12px">FN.05</div>
        <h3>Global hotkey (F6)</h3>
        <p>Start/stop from any window with a <b style="color:var(--grey)">rebindable global hotkey</b>, F1–F12, default F6 — no alt-tab out of your game.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">🎮</div><div class="k" style="margin-top:12px">FN.06</div>
        <h3>Works in games &amp; RDP</h3>
        <p>Built on <b style="color:var(--grey)">SendInput + hardware scan codes</b>, so presses register in full-screen games and RDP/VNC where other tools silently fail.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">🌑</div><div class="k" style="margin-top:12px">FN.07</div>
        <h3>Modern dark UI</h3>
        <p>A clean, neon dark interface with everything on one panel. No menus to hunt through, no clutter — just the auto key presser controls.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">📦</div><div class="k" style="margin-top:12px">FN.08</div>
        <h3>Standard installer</h3>
        <p>Lightweight Windows MSI installer (~15 MB). Uses only the .NET Framework already on Windows 10/11 — no extra dependencies to chase for <b style="color:var(--grey)">keyboard auto presser</b>.</p>
      </article>
      <article class="card frame clip reveal">
        <div class="ico">🔓</div><div class="k" style="margin-top:12px">FN.09</div>
        <h3>Free &amp; open-source</h3>
        <p>MIT licensed and fully auditable on GitHub. A <b style="color:var(--grey)">free open source key presser</b> with zero ads and zero telemetry.</p>
      </article>
    </div>
  </div>
</section>

<!-- USE CASES -->
<section id="usecases" class="usewrap">
  <div class="tex" aria-hidden="true"></div>
  <div class="wrap">
    <div class="sec-head reveal">
      <span class="micro cy"><span class="dot"></span>Module 02 // Deployment profiles</span>
      <h2 class="display">Built for the way <span class="accent-cy">you</span> play &amp; work</h2>
      <p>One <b style="color:var(--white)">automatic keyboard presser</b>, four missions.</p>
    </div>
    <div class="grid2">
      <article class="uc frame clip reveal">
        <div class="tag">▸ Profile 01 // Gaming &amp; AFK</div>
        <h3>Gamers, AFK &amp; idle farming</h3>
        <p>Stay active without babysitting your keyboard. Run a <b style="color:var(--white)">Roblox anti-AFK key presser</b> to beat the idle-kick, <b style="color:var(--white)">hold W to walk</b> in Minecraft, farm an MMO or incremental game by auto-pressing a skill or attack key, and dodge anti-idle timers. Example: set Key = <em>W</em>, enable Hold, press F6 — done.</p>
        <div class="kw"><span>anti-afk</span><span>auto press W</span><span>minecraft afk hold W</span><span>idle game key automation</span><span>farming bot key</span><span>key presser for games</span></div>
      </article>
      <article class="uc frame clip reveal g2">
        <div class="tag">▸ Profile 02 // Office &amp; presence</div>
        <h3>Keep your PC awake</h3>
        <p>Stop sleep, screensavers and away-status. A <b style="color:var(--white)">mouse jiggler alternative</b> that taps a harmless key on an interval to <b style="color:var(--white)">keep PC awake</b> and <b style="color:var(--white)">keep screen on</b>, so you stay "online / green" on Teams, Slack and Discord. Example: set Key = <em>Shift</em>, interval 60&nbsp;s, Start.</p>
        <div class="kw"><span>keep pc awake</span><span>keep screen on</span><span>mouse jiggler alternative</span><span>stay online teams</span></div>
      </article>
      <article class="uc frame clip reveal">
        <div class="tag">▸ Profile 03 // QA &amp; developers</div>
        <h3>Testing, QA &amp; keep-alive</h3>
        <p>Automate repeated keystrokes for UI and stress testing, hammer an input to reproduce bugs, or keep a session alive during long builds. A dependable <b style="color:var(--white)">repeat key software for Windows</b> that also runs over RDP/VNC. Example: set Key = <em>Enter</em>, interval 200&nbsp;ms, add ± randomize.</p>
        <div class="kw"><span>autoclicker for keyboard</span><span>repeat key software for Windows</span><span>SendInput scan code</span><span>keep-alive</span></div>
      </article>
      <article class="uc frame clip reveal g2">
        <div class="tag">▸ Profile 04 // Productivity</div>
        <h3>Repetitive data entry</h3>
        <p>Offload the boring stuff. Repeat a key through long forms, spreadsheets or batch chores where the same keystroke fires over and over. A simple <b style="color:var(--white)">macro key presser</b> / <b style="color:var(--white)">spam key tool</b> that just works. Example: set Key = <em>Tab</em>, tune the interval, Start.</p>
        <div class="kw"><span>macro key presser</span><span>spam key tool</span><span>auto keyboard button presser</span><span>auto key clicker</span></div>
      </article>
    </div>
  </div>
</section>

<!-- SCREENSHOTS -->
<section id="screenshots">
  <div class="wrap">
    <div class="sec-head reveal">
      <span class="micro"><span class="dot"></span>Module 03 // Interface</span>
      <h2 class="display">A clean HUD for your <span class="accent">key presser</span></h2>
      <p>Everything on one panel — no digging through menus.</p>
    </div>
    <div class="shots">
      <figure class="shot frame clip reveal">
        <div class="win"><div class="wb"><i></i><i></i><i></i><span>AKP.MSI</span></div>
          <img src="assets/screenshot_1.png" alt="Auto key presser app window: Key Space, interval 100 ms, hold key down option, global hotkey F6, green START button, Stopped state" width="400" height="344"></div>
        <p>Set the key, interval and hotkey, then hit START.</p>
        <span class="cap">// Idle · Stopped</span>
      </figure>
      <figure class="shot frame clip reveal">
        <div class="win"><div class="wb"><i></i><i></i><i></i><span>AKP.MSI</span></div>
          <img src="assets/screenshot_2.png" alt="Automatic keyboard presser window in a running configuration with custom interval and randomize timing" width="400" height="344"></div>
        <p>Randomize ± timing for a natural, non-uniform cadence.</p>
        <span class="cap">// Config · Randomize</span>
      </figure>
      <figure class="shot frame clip reveal">
        <div class="win"><div class="wb"><i></i><i></i><i></i><span>AKP.MSI</span></div>
          <img src="assets/screenshot_3.png" alt="Auto keyboard clicker window showing hold key down mode enabled for hold W style automation" width="400" height="344"></div>
        <p>Flip on Hold mode to keep a key held down.</p>
        <span class="cap">// Active · Hold</span>
      </figure>
    </div>
  </div>
</section>

<!-- HOW IT WORKS -->
<section id="how">
  <div class="wrap">
    <div class="sec-head reveal">
      <span class="micro cy"><span class="dot"></span>Module 04 // Boot sequence</span>
      <h2 class="display">Running in <span class="accent-cy">under a minute</span></h2>
      <p>Lightweight install, no config files, no learning curve.</p>
    </div>
    <div class="steps">
      <article class="step frame clip reveal">
        <div class="num">01</div><h3>Download &amp; unzip</h3>
        <p>Download the zip, unzip and run the MSI installer. Standard Windows install to Program Files.</p>
      </article>
      <article class="step frame clip reveal">
        <div class="num">02</div><h3>Set your key</h3>
        <p>Click <b style="color:var(--grey)">Set Key</b> and pick the key to auto-press — W, Space, Enter, a skill key, anything.</p>
      </article>
      <article class="step frame clip reveal">
        <div class="num">03</div><h3>Interval or Hold</h3>
        <p>Dial the interval (5 ms–10 min), add ± randomize, or tick <b style="color:var(--grey)">Hold key down</b> for continuous hold.</p>
      </article>
      <article class="step frame clip reveal">
        <div class="num">04</div><h3>Start (or press F6)</h3>
        <p>Hit START — or trigger the <b style="color:var(--grey)">global hotkey F6</b> from inside any game or window.</p>
      </article>
    </div>
  </div>
</section>

<!-- DOWNLOAD -->
<section id="download" class="dl">
  <div class="tex" aria-hidden="true"></div>
  <div class="wrap">
    <div class="dlbox frame clip reveal">
      <span class="micro"><span class="dot"></span>Module 05 // Acquire binary</span>
      <h2 class="display">Download <span class="accent">Auto Key Presser Pro</span></h2>
      <p class="lead">Free forever, open-source, lightweight MSI installer. Just <b style="color:var(--white)">download &amp; install</b> — standard Windows install/uninstall.</p>
      <div class="dl-actions">
        <a class="btn btn-primary" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">⬇ Download .zip — v2.1 (~15 MB MSI)</a>
        <a class="btn btn-ghost" href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">All releases</a>
      </div>
      <div class="verify">
        <div class="vh">◆ Verify your download</div>
        <p>Every release ships with a published <b style="color:var(--white)">SHA-256</b> hash and a <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">VirusTotal report</a>. Compare the hash of your zip against the one on the <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">releases page</a>:</p>
        <p><code>certutil -hashfile AutoKeyPresser.zip SHA256</code></p>
        <p style="margin-top:12px"><b style="color:var(--white)">Heads-up on antivirus:</b> because any key presser injects keystrokes (SendInput), some engines show a heuristic warning for input-automation tools. This one is fully open source — read the <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">source</a>, verify the hash, or build the exe yourself.</p>
      </div>
      <div class="reqrow">
        <span class="chip"><b>OS</b> Windows 10 / 11 (64-bit)</span>
        <span class="chip cy"><b>SRC</b> <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener" style="color:var(--grey)">GitHub · MIT</a></span>
        <span class="chip"><b>SIZE</b> ~15 MB installer</span>
      </div>
    </div>
  </div>
</section>

<!-- FAQ -->
<section id="faq">
  <div class="wrap">
    <div class="sec-head reveal">
      <span class="micro"><span class="dot"></span>Module 06 // Knowledge base</span>
      <h2 class="display">Frequently asked <span class="accent">questions</span></h2>
      <p>Everything about the <b style="color:var(--white)">auto keypresser download</b>, safety and game use.</p>
    </div>
    <div class="faq">
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Is it free?<span class="arw">+</span></summary>
        <div class="a">Yes — <b>Auto Key Presser Pro is 100% free</b> and open-source under the MIT license. No ads, no telemetry, no upsells, no paid tiers. Download the zip, unzip and run.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Is it safe, and why might antivirus warn?<span class="arw">+</span></summary>
        <div class="a">It's safe and fully open source. Because every <b>auto keyboard presser</b> injects keystrokes via SendInput, some antivirus engines flag key-injection utilities with a heuristic (not a real detection). You can read the source on GitHub, verify the published <b>SHA-256</b> hash, check the VirusTotal report, or compile it yourself.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Does it work in games &amp; full-screen (Roblox, Minecraft)?<span class="arw">+</span></summary>
        <div class="a">Yes. The engine uses <b>SendInput with hardware scan codes</b>, so presses land in full-screen games including Roblox and Minecraft — and even in RDP/VNC sessions where simpler <b>key presser software</b> fails.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Can it hold a key down (hold W)?<span class="arw">+</span></summary>
        <div class="a">Absolutely. Enable <b>Hold mode</b> to keep a key held down continuously — ideal for <b>minecraft AFK hold W</b>, auto press W to walk, or holding a skill key. Turn it off for rapid tap/spam mode at your chosen interval.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Does it need installation?<span class="arw">+</span></summary>
        <div class="a">Yes — a lightweight Windows MSI installer (~15 MB). Download the zip, unzip and run the MSI. Standard Windows install to Program Files; uninstall via Programs &amp; Features.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Which Windows versions are supported?<span class="arw">+</span></summary>
        <div class="a"><b>Windows 10 and Windows 11</b> (64-bit). It runs on the .NET Framework already bundled with modern Windows.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Is it open source?<span class="arw">+</span></summary>
        <div class="a">Yes — the full source is on <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">GitHub</a> under the MIT license. Inspect it, fork it, verify the build, or compile it yourself. It's a genuine <b>free open source key presser</b>.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Can I rebind the global hotkey?<span class="arw">+</span></summary>
        <div class="a">Yes. The <b>rebindable global hotkey</b> defaults to F6 and can be any key F1–F12. Start and stop the <b>auto key clicker</b> from any window without alt-tabbing out of your game.</div>
      </details>
      <details class="qa reveal"><summary><span class="qmk">Q:</span> Will it get me banned in online games?<span class="arw">+</span></summary>
        <div class="a">Use it responsibly. Auto Key Presser Pro is built for <b>single-player, idle/AFK, testing/QA and accessibility</b> use, and it makes no attempt to be undetectable. Competitive titles with kernel-level anti-cheat such as <b>Vanguard, EAC or BattlEye</b> prohibit input automation — don't use it there. You are responsible for following each game's terms of service.</div>
      </details>
    </div>
  </div>
</section>

</main>

<!-- FOOTER -->
<footer>
  <div class="wrap">
    <div class="foot-top">
      <div class="foot-brand">
        <a class="brand" href="#top" aria-label="Auto Key Presser Pro home">
          <img src="assets/logo.png" alt="Auto Key Presser Pro app icon — neon green WASD keycaps">
          <b>AUTO KEY PRESSER <span style="color:var(--cyan)">PRO</span></b>
        </a>
        <p>The free, open-source <b style="color:var(--grey)">automatic keyboard presser</b> for Windows 10/11. Tap or hold any key, rebind the global hotkey, and run it in full-screen games or RDP.</p>
        <p class="micro" style="margin-top:14px"><span class="dot"></span>System online · v2.1 · MIT</p>
      </div>
      <div class="foot-col">
        <h4>// Navigate</h4>
        <a href="#features">Features</a>
        <a href="#usecases">Use cases</a>
        <a href="#screenshots">Screenshots</a>
        <a href="#how">How it works</a>
        <a href="#faq">FAQ</a>
      </div>
      <div class="foot-col">
        <h4>// Project</h4>
        <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">Download .zip</a>
        <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">All releases</a>
        <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">Source on GitHub</a>
        <a href="https://t.me/windows_free_software" target="_blank" rel="noopener">Telegram · @windows_free_software</a>
        <a href="https://github.com/fittingpati/auto-key-presser-2026/releases/download/v2.1/AutoKeyPresser-v2.1.zip" target="_blank" rel="noopener">Verify (SHA-256 / VirusTotal)</a>
        <a href="https://opensource.org/licenses/MIT" target="_blank" rel="noopener">MIT License</a>
      </div>
    </div>
    <p class="kwline">Auto Key Presser Pro is a free auto key presser and automatic keyboard presser for Windows — an auto keyboard clicker, auto key clicker and key holder that can auto press key or hold key down. Popular as a Roblox anti-afk key presser, for minecraft afk hold W, idle game key automation and farming bot key setups, plus a mouse jiggler alternative to keep PC awake and keep screen on. This keyboard auto presser doubles as a macro key presser, autoclicker for keyboard and spam key tool with a rebindable global hotkey, SendInput scan code engine and repeat key software for Windows — a genuinely free open source key presser and auto keypresser download.</p>
    <div class="copy">
      <span>© 2026 autokeypresserpro.com · MIT Licensed</span>
      <span>AUTO_KEY_PRESSER_PRO // BUILD v2.1 // WIN 10·11</span>
    </div>
  </div>
</footer>

<script>
// mobile menu
(function(){
  var b=document.getElementById('burger'), n=document.getElementById('nav');
  if(b){b.addEventListener('click',function(){
    var open=n.classList.toggle('open');
    b.setAttribute('aria-expanded',open?'true':'false');
  });
  n.querySelectorAll('.nav-links a').forEach(function(a){a.addEventListener('click',function(){n.classList.remove('open');b.setAttribute('aria-expanded','false');});});}
})();
// scroll reveal
(function(){
  var els=document.querySelectorAll('.reveal');
  if(!('IntersectionObserver' in window)){els.forEach(function(e){e.classList.add('in');});return;}
  var io=new IntersectionObserver(function(en){en.forEach(function(e){if(e.isIntersecting){e.target.classList.add('in');io.unobserve(e.target);}});},{threshold:.12,rootMargin:'0px 0px -40px 0px'});
  els.forEach(function(e){io.observe(e);});
})();
</script>
<script>
/* bgfx engine */
(function(){
(function(){
  var IMAGES=['assets/bg1.webp','assets/bg2.webp','assets/bg3.webp','assets/bg4.webp'];
  var COLS=8, ROWS=5;
  var STEP=3000, MOBILE_STEP=4000;
  var COL_STAGGER=70;              // ms between columns (left -> right wave)
  var FLIP_MS=1000;               // per-tile flip duration (matches CSS)

  var root=document.getElementById('bgfx-root');
  if(!root) return;
  var grid=root.querySelector('.bgfx-grid');
  var cross=root.querySelector('.bgfx-cross');
  var cfA=cross.querySelector('.bgfx-cf-a');
  var cfB=cross.querySelector('.bgfx-cf-b');

  // Preload all four so faces never pop in.
  var _pre=IMAGES.map(function(src){var im=new Image();im.src=src;return im;});

  var mqMobile=window.matchMedia('(max-width:640px)');
  var mqReduce=window.matchMedia('(prefers-reduced-motion: reduce)');

  var tiles=[];      // {tile, front, back}
  var cur=0;         // index (0-based) of the currently shown image in the cycle
  var timer=null;
  var mode=null;

  function clearTimer(){ if(timer){ clearInterval(timer); timer=null; } }

  function sliceStyle(el,c,r){
    el.style.backgroundSize=(COLS*100)+'% '+(ROWS*100)+'%';
    el.style.backgroundPosition=(COLS>1?(c/(COLS-1)*100):0)+'% '+(ROWS>1?(r/(ROWS-1)*100):0)+'%';
    el.style.backgroundRepeat='no-repeat';
  }

  function buildTiles(){
    grid.innerHTML='';
    tiles=[];
    grid.style.gridTemplateColumns='repeat('+COLS+',1fr)';
    grid.style.gridTemplateRows='repeat('+ROWS+',1fr)';
    for(var r=0;r<ROWS;r++){
      for(var c=0;c<COLS;c++){
        var tile=document.createElement('div');
        tile.className='bgfx-tile';
        var yAxis=(r%2===0);                 // even rows flip on Y, odd rows on X
        tile.style.setProperty('--bgfx-ax', yAxis?'0':'1');
        tile.style.setProperty('--bgfx-ay', yAxis?'1':'0');
        tile.style.setProperty('--bgfx-deg','0deg');
        tile.style.setProperty('--bgfx-d',(c*COL_STAGGER)+'ms');

        var front=document.createElement('div');
        front.className='bgfx-face bgfx-front';
        var back=document.createElement('div');
        back.className='bgfx-face bgfx-back';
        sliceStyle(front,c,r); sliceStyle(back,c,r);
        front.style.backgroundImage='url('+IMAGES[0]+')';  // current
        back.style.backgroundImage='url('+IMAGES[1]+')';   // next
        tile.appendChild(front); tile.appendChild(back);
        grid.appendChild(tile);
        tiles.push({tile:tile, front:front, back:back});
      }
    }
    cur=0;
  }

  function stepTiles(){
    var k=cur+1;                 // advancing to show image k
    var imgIndex=k%4;
    var evenK=(k%2===0);
    var deg=(k*180)+'deg';
    // The face that will face the viewer after this flip:
    tiles.forEach(function(t){
      var vis=evenK?t.front:t.back;      // prepped last cycle; set again defensively
      vis.style.backgroundImage='url('+IMAGES[imgIndex]+')';
      t.tile.style.setProperty('--bgfx-deg',deg);
    });
    // Once the whole wave has passed, prep the now-hidden face with the upcoming image.
    var nextIndex=(k+1)%4;
    setTimeout(function(){
      tiles.forEach(function(t){
        var hidden=evenK?t.back:t.front;
        hidden.style.backgroundImage='url('+IMAGES[nextIndex]+')';
      });
    }, FLIP_MS + COLS*COL_STAGGER + 80);
    cur=k;
  }

  function buildCross(){
    cfA.style.backgroundImage='url('+IMAGES[0]+')';
    cfB.style.backgroundImage='url('+IMAGES[1]+')';
    cfA.style.opacity='1'; cfB.style.opacity='0';
    cross._idx=0; cross._top='a';
  }
  function stepCross(){
    var idx=(cross._idx+1)%4;
    var showEl, hideEl;
    if(cross._top==='a'){ showEl=cfB; hideEl=cfA; cross._top='b'; }
    else { showEl=cfA; hideEl=cfB; cross._top='a'; }
    showEl.style.backgroundImage='url('+IMAGES[idx]+')';
    showEl.style.opacity='1'; hideEl.style.opacity='0';
    cross._idx=idx;
  }

  function start(){
    clearTimer();
    if(mode==='tiles') timer=setInterval(stepTiles,STEP);
    else if(mode==='cross') timer=setInterval(stepCross,MOBILE_STEP);
    // 'static' has no cycle: bg1 stays put.
  }

  function apply(){
    clearTimer();
    var newMode = mqReduce.matches ? 'static' : (mqMobile.matches ? 'cross' : 'tiles');
    mode=newMode;
    if(newMode==='tiles'){
      cross.style.display='none';
      grid.style.display='grid';
      buildTiles();
    } else {
      grid.style.display='none';
      grid.innerHTML=''; tiles=[];
      cross.style.display='block';
      buildCross();
    }
    if(!document.hidden) start();
  }

  document.addEventListener('visibilitychange',function(){
    if(document.hidden) clearTimer(); else start();
  });

  function onMq(){ apply(); }
  if(mqMobile.addEventListener){ mqMobile.addEventListener('change',onMq); mqReduce.addEventListener('change',onMq); }
  else if(mqMobile.addListener){ mqMobile.addListener(onMq); mqReduce.addListener(onMq); }

  apply();
})();
})();
</script>
</body>
</html>