title: Protection against automation
body: <p>One of our next projects is supposed to be a MS Windows based game (written in C#, with a winform GUI and an integrated DirectX display-control) for a customer who wants to give away prizes to the best players. This project is meant to run for a couple of years, with championships, ladders, tournaments, player vs. player-action and so on.</p>
  
  <p>One of the main concerns here is cheating, as a player would benefit dramatically if he was able to - for instance - let a custom made bot play the game for him (more in terms of strategy-decisions than in terms of playing many hours).</p>
  
  <p>So my question is: what technical possibilites do we have to detect bot activity? We can of course track the number of hours played, analyze strategies to detect anomalies and so on, but as far as this question is concerned, I would be more interested in knowing details like</p>
  
  <ul>
  <li>how to detect if another application makes periodical screenshots?</li>
  <li>how to detect if another application scans our process memory?</li>
  <li>what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated?</li>
  <li>is it possible to detect if another application requests informations about controls in our application (position of controls etc)?</li>
  <li>what other ways exist in which a cheater could gather informations about the current game state, feed those to a bot and send the determined actions back to the client?</li>
  </ul>
  
  <p>Your feedback is highly appreciated!</p>