Friday 9 September 2016

Circumventing timed nag screens using AutoIT


Nag Window Problem


I frequently use a small utility for my 3D scanning projects called Points2Polys. It's an older free utility from Paraform that's really useful for viewing and skinning point clouds. Unfortunately being free software Paraform decided to place two annoying nag windows in the program which appear ever time the utility is used. The first nag window displays a branded image for 3 seconds and a second nag window is displayed for a further 10 seconds. The second window can only be removed by clicking on the newly enabled close button (close button is disabled during the 10 seconds wait).

Since these nags slow down productivity I had wondered about removing or altering the timing values in the executable program code and removing the nag screens using hacking techniques. I did eventually try various cracking methods but ultimately I wasn't skilled enough to find the important code blocks and remove the problem.


AutoIT


After further thought I realised that I could alter the window elements using AutoIT. I previously used AutoIT to write CrossBro. AutoIt is a very powerful scripting language used to automate everything in the Windows environment. Using its built in functions I could close windows, send simulated key presses and manipulate associated Windows GUI elements automatically.

Further research and a few prototypes later proved that Points2Polys was using standard Windows GUI API elements that could easily be manipulated in the way I wanted. I still wasn't able to change the timer values but did noticed that once I had enabled the Close button the nag window could be closed immediately. 

Using AutoIT I manged to script a series of simple actions to complete the task.

1) The script runs Points2Polys.exe
2) It closes the front nag window by sending a simulated right mouse button click
3) It selects the second nag window using its window title name
4) The Close button is enabled with one simple command
5) A virtual keypress is sent to the Close button which closes the nag window fully

I also added a final command to resize the application window to fit my screen size.


Solution


This script finally enabled me to use Points2Polys the way I want. I still see the nag windows briefly after startup but they both disappear shortly afterwards leaving the interface clutter free and ready for use.

Download: Points2Polys

AutoIT Script


;AutoIt script
;https://www.autoitscript.com/site/autoit/

;Points2Polys loader without nag screens by Colin Ord, 7th Sept 2016

;Script purpose
;To automatically circumvent the two timer driven nag screens

;Solution
;- script opens points2polys.exe
;- script closes the initial nag screen by sending a simulated mouse press to the application
;- script then 'enables' the disabled close button
;- script sends a Left mouse click to the newly enabled close button control closing the second nag screen
;- script also resizes the window dimensions to fit the screen

#include <MsgBoxConstants.au3>

;#include <GUIConstantsEx.au3>
;#include <StaticConstants.au3>

loader()
Exit

Func loader()
    ;run Points2Polys
    Run("D:\Program Files (x86)\Paraform\Points2Polys\Points2Polys.exe")

    ; Wait 10 seconds for the Points2Polys window to appear
    Local $hWnd = WinWait("Paraform Points2Polys", "")

   ;close the 1st nag window - automated mouse click
   MouseClick("Right")
   Local $hWnd = WinWait("Paraform Points2Polys", "") ;

   ;enable the disabled (greyed) out close button
   ControlEnable($hWnd, "", "[CLASS:Button;INSTANCE:1]")
   ;close 2nd nag window - click the enabled close button
   ControlClick("Paraform Points2Polys", "", "[CLASS:Button;INSTANCE:1]")
   ;resize window to fit screen
   WinMove("Untitled - Points2Polys", "", 480,140,960,700)

EndFunc   ;==>Example


Thursday 21 January 2016

DIY 3D Digitizing Arm



*This text is a work in progress and will be updated regularly*

3D Digitizing Arm Project

For many years I dreamt of creating a 3D digitizing arm similar to the great Microscribe3D or FaroArm products. I've dabbled in various data gathering projects before e.g. building a 3D laser scanner, 2D computer vision for extracting data measurements and 2D motion capture for animation purposes but to this date the unique mechanism of these digitizers has always intruiged me.

As usual my inquisitive nature got the better of me and I was pretty sure I had the skills to build my own 3D arm based digitizer. I gathered as much technical detail and knowledge as I could find relating to how this device functioned and set about the project with eager interest. This article follows and details the project to completion with photos of the prototype arm, the serial connection utility and the Blitz3D virtual interface.



Approach

Without access to a real Microscribe I had to research it's characteristics by watching product videos, reading patents documents, manuals and product reviews. I gained invaluable knowledge into its mechanical inner workings, its precision digital encoders, and how it applied complex trigonometry in hardware to work out the location and orientation of its digitizing tip. These findings were crucial to help formulate a solid idea in my mind of how to simplify the whole project, keep costs to a minimum, yet still create a fun 3D arm digitizer that was reasonably accurate and robust.

Project Kit Requirements

  • Arduino Uno
  • Four potentiometers
  • Micro switch 
  • Wooden doweling 
  • Jump wires
  • Screws
  • Tie wraps
  • Blitz3D
  • VB6

Building The Prototype


Prototyping the initial idea using potentiometers and cardboard lengths.

Testing realtime data capture using my custom Arduino serial driver and Blitz3D.


Testing complete! Building a sturdier arm using wooden dowel.

Arm complete and used to digitize a small statue.

  Digitizing complete. Point cloud viewed on Points2Polys.

Digitizing a 2D illustration

Digitizing an object (slipper)

Real time point cloud visualisation in Blitz3D

3D object point cloud