Key Capture Software
This page and the accompanying software were written by William Soukoreff and Scott MacKenzie.Introduction
This is the homepage for the KeyCapture software. KeyCapture is a tool for usability professionals, researchers, and teachers, that that makes it possible to observe the keystrokes and mouse actions performed by a user of the windows operating system. Ever wonder: What editing keys are really used when entering text? How much time does a typical user spend using the mouse, as opposed to entering text? Or, What applications does a user use, and for how long? KeyCapture can answer these questions.The KeyCapture software has been released under the GNU Public Licence, and is available for free download from this webpage. As such, KeyCapture will also be of interest to programmers looking for examples of windows programming using:
- Mapped shared memory files (using CreateFileMapping and MapViewOfFile).
- Critical sections (using CreateMutex and WaitForSingleObject).
- Windows system hooks (using SetWindowsHookEx, CallNextHookEx).
- Registry functions (using RegCreateKeyEx, RegOpenKeyEx, and RegDeleteKey).
The most recent version of KeyCapture is 1.3, released July 18, 2003.
Academic
The KeyCapture software was first announced in one of our publications:
R. W. Soukoreff, & I. S. MacKenzie (2003). Input-based language modelling in the design of high performance text input techniques Proceedings of Graphics Interface 2003, 89-96.The idea is that text input researchers create language models that they use to design and evaluate novel text input methods. There are lots of people involved in this area of research (see the links provided below). The problem is that researchers often limit themselves to using freely available text databases called corpora, instead of building models using data captured during the text entry task.
Although the usage of corpora is appropriate in some situations, from a text-input perspective, there are three general weaknesses with this approach. (For elaboration on these points, please see the paper mentioned above.)
- Users' language is typically quite different from that appearing in any corpus.
- Current corpora do not reflect the editing process used in their creation.
- Corpora do not capture the input modalities of text input devices.
In order to observe the text that people typically enter, and how the text is entered, we constructed the KeyCapture software. This is a collection of programs that can be used to record every keystroke and mouse movement made by somebody using a computer equipped with the windows operating system.
The Software
This software is Copyright (c) 2003, by William Soukoreff and Scott MacKenzie. This software has been released under the GNU General Public Licence.This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
The text of the GNU General Public Licence is available here.
Latest Executables (Version 1.3)
KeyCaptureExecutables.20030718.Zip
The Source Code
This source code was created using microsoft's visual C++ (version 5.0) programming environment. You'll need VC++ to compile these programs.Version 1.3 (current) KeyCapture.20030718.Zip
This version fixes a bug involving clearing the data or saving the data file, followed by disabling and enabling KeyCapture (using the checkbox in the main dialog box of KeyCapture_Config.exe). A couple of small clean-ups were made as well. (Thanks to Mark Richman for helping me to debug this issue.)Version 1.2 (old) KeyCapture.20030703.Zip
This version saw several invasive changes to the code to properly support windows XP. Most of the fixes had to do with concurrency, and the shared memory functions. A progress bar was added to the save function. The KeyCapture_Suspend program was created to address privacy concerns. The setup dialog box in the config program was improved.A really old version of the source code (Version 1.1) is available too (KeyCapture.20030623.Zip). This old version is the software that was used in the paper referenced at the top of this webpage. I do not recommend using this old software - the latest version is much improved.
Installation
Installation is easy. Just copy the programs (KeyCapture_Config.exe, KeyCapture_Suspend.exe, KeyCapture.exe, and KeyCapture.dll) into any directory. Then, run the config program. Once the config program has started, click on "Setup" and select the data you want recorded. Once KeyCapture has been configured, the config program can be removed.The KeyCapture program will introduce a couple of entries into the system registry to record the configuration settings, and to ensure that KeyCapture is started automatically when the computer is rebooted. Once the memory buffer within KeyCapture becomes full, it will create a file called "AutoSave.KC" in the same directory as the .dll program. Do not delete this file - this is your data stored in an efficient binary representation. If you want to move KeyCapture to another directory, see The Registry and Moving the Executables below.
As users use the computer, their actions will be recorded. At some point later, run the config program again to retrieve the data recorded by KeyCapture. (With the config program running, click on "Save Data" to retreive your data.)
Uninstalling and Removing
To uninstall KeyCapture from your system:A file named AutoSave.KC may be found in the same directory as the KeyCapture executables. After uninstalling KeyCapture using the instructions above, this file may be deleted. Similarly, there may be a file called c:\windows\temp\KeyCaptureEmergencySaveFile that can be deleted after uninstalling KeyCapture.
- Run KeyCapture_Config, and click on "Uninstall". This removes all of the KeyCapture keys from the windows registry. (For more information on what KeyCapture stores in the registry see The Registry, and Moving the Executables below.)
- Delete the executables (KeyCapture.exe, KeyCapture.dll, KeyCapture_Config.exe, and KeyCapture_Suspend.exe).
The Registry, and Moving the Executables
The first time that the KeyCapture_Config program is run, it adds some records to the system registry. If KeyCapture is enabled, an entry is added to the registry in:\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
This registry entry causes KeyCapture to be automatically started when the computer boots. Additionally, KeyCapture creates several entries under:
\HKEY_LOCAL_MACHINE\Software\KeyCapture
Note that there is an easy way to remove all of the KeyCapture-related keys from the registry. Simply start the config program and click on "Uninstall". You may want to do this if you want to completely remove KeyCapture from your computer, or, if you need to move KeyCapture to another directory after it has been installed. To move the KeyCapture files to another directory, you will have to change the InstalledPath entry under the registry key listed above. The easiest way to do this is to run the config program and click on the "Uninstall" button. Then move the executables, and then run the configuration program again. This will cause KeyCapture to recreate the necessary keys in the registry including the correct InstalledPath key.
How it Works
The KeyCapture software takes advantage of several low-level hooks in the windows operating system. KeyCapture connects to these hooks to receive each key press, key release, and mouse action, before the programs running in windows see them. The KeyCapture software is designed to run in the background, so the user is not disturbed by the keystroke observation process (i.e., there is no window open, and no little icon in the system tray to indicate that KeyCapture is operating).KeyCapture consists of four programs:
KeyCapture.exe and KeyCapture.dll
The real work is done by the KeyCapture.dll program. It is this library that connects to the hooks in windows and records the data. The KeyCapture.exe program is simply used to load the .dll, and to keep it resident in memory. You should never run or terminate the KeyCapture.exe program - starting and stopping this program is done via the KeyCapture_Config program described below.KeyCapture_Config.exe
KeyCapture_Config provides a friendly configuration screen. This allows the experimenter to indicate what data they are interested in, and how it should be recorded. The KeyCapture_Config program is also used to retreive your data. After KeyCapture has been running on a system for a while (so it has captured some data) run the KeyCapture_Config program and click on "Save Data". This opens a dialogue box by which you can save an ASCII file of your data. A sample data file appears below.Starting and stopping the KeyCapture.exe program is accomplished by running KeyCapture_Config, and checking or unchecking the checkbox labeled "Enable KeyCapture".
Because the KeyCapture_Config program is only used for configuration, it can be removed from the system once the other two programs (KeyCapture.dll, and KeyCapture.exe) have been configured. (It is a good thing to remove the config program when you're not using it so users can't change the configuration settings or delete the data.)
KeyCapture_Suspend.exe
The KeyCapture_Suspend program is used to temporarily disable the capturing of keystrokes and mouse actions, when the operator of the computer needs privacy. Using KeyCapture_Suspend is easy, when the suspend program is running, KeyCapture is suspended. So, just before typing a password or any confidential data, have your subjects start the suspend program; when they're finished, they should close the program.The Config Screens
Here's what the main KeyCapture_Config screens look like...
![]()
and after clicking on "Setup" the config screen appears...
![]()
The Data File
Below appears an excerpt from a sample data file. The whole data file is available here.You can see that the user changes to microsoft word (line 370), and types "This is a little text entered to demonstrate the KeyCapture program!". The data file contains a description of every event it recorded, as well as the date and time with millisecond accuracy, and any extra information (e.g. mouse location, or key-down versus key-up) that windows provides.
# KeyCapture keystroke data file # Version: 1.0 # Subject: NoSubjectName # Filename: C:\Documents and Settings\will\Desktop\KeyCapture (Latest Executables)\NoSubjectName20030609-120921-698.txt # NumberOfEvents: 760 001 GeneralMessage Version(1.1) Subject(NoSubjectName) 002 TimeMessage 20030609-120921-698 Counter(827479750370) Frequency(3579545Hz) Correction(0ms) 003 Mouse 20030609-120921-709 "LBUTTONUP" ID(0x202) x(155) y(207) 004 WindowFocusChange C:\WINDOWS\System32\BROWSEUI.dll 005 Mouse 20030609-120935-352 "MOUSEMOVE" ID(0x200) x(755) y(656) 006 Mouse 20030609-120935-457 "MOUSEMOVE" ID(0x200) x(755) y(656) ... 368 Mouse 20030609-120941-477 "MOUSEMOVE" ID(0x200) x(720) y(1186) 369 Mouse 20030609-120941-735 "MOUSEMOVE" ID(0x200) x(715) y(1074) 370 WindowFocusChange C:\Program Files\Microsoft Office\Office10\WINWORD.EXE 371 Mouse 20030609-120941-817 "MOUSEMOVE" ID(0x200) x(732) y(972) 372 Mouse 20030609-120941-818 "MOUSEMOVE" ID(0x200) x(733) y(960) ... 393 Mouse 20030609-120942-016 "MOUSEMOVE" ID(0x200) x(694) y(751) 394 Mouse 20030609-120942-026 "MOUSEMOVE" ID(0x200) x(694) y(750) 395 KeyPress 20030609-120943-774 "SHIFT" Status=(down) Key(16) Extra(0x2a) 396 KeyPress 20030609-120943-963 "T" Status=(down) Key(84) Extra(0x14) 397 KeyPress 20030609-120944-025 "T" Status=(up) Key(84) Extra(0xc014) 398 KeyPress 20030609-120944-051 "SHIFT" Status=(up) Key(16) Extra(0xc02a) 399 KeyPress 20030609-120944-210 "H" Status=(down) Key(72) Extra(0x23) 400 KeyPress 20030609-120944-294 "H" Status=(up) Key(72) Extra(0xc023) 401 KeyPress 20030609-120944-412 "I" Status=(down) Key(73) Extra(0x17) 402 KeyPress 20030609-120944-482 "I" Status=(up) Key(73) Extra(0xc017) 403 KeyPress 20030609-120944-512 "S" Status=(down) Key(83) Extra(0x1f) 404 KeyPress 20030609-120944-586 "S" Status=(up) Key(83) Extra(0xc01f) 405 KeyPress 20030609-120944-622 "SPACE" Status=(down) Key(32) Extra(0x39) 406 KeyPress 20030609-120944-714 "SPACE" Status=(up) Key(32) Extra(0xc039) 407 KeyPress 20030609-120944-826 "I" Status=(down) Key(73) Extra(0x17) 408 KeyPress 20030609-120944-894 "I" Status=(up) Key(73) Extra(0xc017) 409 KeyPress 20030609-120944-968 "S" Status=(down) Key(83) Extra(0x1f) 410 KeyPress 20030609-120945-036 "S" Status=(up) Key(83) Extra(0xc01f) 411 KeyPress 20030609-120945-086 "SPACE" Status=(down) Key(32) Extra(0x39) 412 KeyPress 20030609-120945-162 "SPACE" Status=(up) Key(32) Extra(0xc039) 413 KeyPress 20030609-120945-349 "A" Status=(down) Key(65) Extra(0x1e) 414 KeyPress 20030609-120945-409 "A" Status=(up) Key(65) Extra(0xc01e) 415 KeyPress 20030609-120945-483 "SPACE" Status=(down) Key(32) Extra(0x39) 416 KeyPress 20030609-120945-561 "SPACE" Status=(up) Key(32) Extra(0xc039) 417 KeyPress 20030609-120945-619 "L" Status=(down) Key(76) Extra(0x26) 418 KeyPress 20030609-120945-727 "I" Status=(down) Key(73) Extra(0x17) 419 KeyPress 20030609-120945-773 "L" Status=(up) Key(76) Extra(0xc026) 420 KeyPress 20030609-120945-799 "I" Status=(up) Key(73) Extra(0xc017) 421 KeyPress 20030609-120945-807 "T" Status=(down) Key(84) Extra(0x14) 422 KeyPress 20030609-120945-865 "T" Status=(up) Key(84) Extra(0xc014) 423 KeyPress 20030609-120945-971 "T" Status=(down) Key(84) Extra(0x14) 424 KeyPress 20030609-120946-033 "L" Status=(down) Key(76) Extra(0x26) 425 KeyPress 20030609-120946-039 "T" Status=(up) Key(84) Extra(0xc014) 426 KeyPress 20030609-120946-113 "L" Status=(up) Key(76) Extra(0xc026) 427 KeyPress 20030609-120946-183 "E" Status=(down) Key(69) Extra(0x12) 428 KeyPress 20030609-120946-241 "E" Status=(up) Key(69) Extra(0xc012) 429 KeyPress 20030609-120946-500 "SPACE" Status=(down) Key(32) Extra(0x39) 430 KeyPress 20030609-120946-592 "SPACE" Status=(up) Key(32) Extra(0xc039) 431 KeyPress 20030609-120946-974 "T" Status=(down) Key(84) Extra(0x14) 432 KeyPress 20030609-120947-042 "E" Status=(down) Key(69) Extra(0x12) 433 KeyPress 20030609-120947-074 "T" Status=(up) Key(84) Extra(0xc014) 434 KeyPress 20030609-120947-112 "E" Status=(up) Key(69) Extra(0xc012) 435 KeyPress 20030609-120947-134 "X" Status=(down) Key(88) Extra(0x2d) 436 KeyPress 20030609-120947-202 "X" Status=(up) Key(88) Extra(0xc02d) 437 KeyPress 20030609-120947-254 "T" Status=(down) Key(84) Extra(0x14) 438 KeyPress 20030609-120947-334 "T" Status=(up) Key(84) Extra(0xc014) 439 KeyPress 20030609-120947-581 "SPACE" Status=(down) Key(32) Extra(0x39) 440 KeyPress 20030609-120947-693 "SPACE" Status=(up) Key(32) Extra(0xc039) 441 KeyPress 20030609-120947-966 "E" Status=(down) Key(69) Extra(0x12) 442 KeyPress 20030609-120948-046 "E" Status=(up) Key(69) Extra(0xc012) 443 KeyPress 20030609-120948-100 "N" Status=(down) Key(78) Extra(0x31) 444 KeyPress 20030609-120948-182 "N" Status=(up) Key(78) Extra(0xc031) 445 KeyPress 20030609-120948-212 "T" Status=(down) Key(84) Extra(0x14) 446 KeyPress 20030609-120948-302 "T" Status=(up) Key(84) Extra(0xc014) 447 KeyPress 20030609-120948-380 "E" Status=(down) Key(69) Extra(0x12) 448 KeyPress 20030609-120948-456 "E" Status=(up) Key(69) Extra(0xc012) 449 KeyPress 20030609-120948-512 "R" Status=(down) Key(82) Extra(0x13) 450 KeyPress 20030609-120948-612 "R" Status=(up) Key(82) Extra(0xc013) 451 KeyPress 20030609-120948-621 "E" Status=(down) Key(69) Extra(0x12) 452 KeyPress 20030609-120948-701 "E" Status=(up) Key(69) Extra(0xc012) 453 KeyPress 20030609-120948-821 "D" Status=(down) Key(68) Extra(0x20) 454 KeyPress 20030609-120948-905 "D" Status=(up) Key(68) Extra(0xc020) 455 KeyPress 20030609-120948-953 "SPACE" Status=(down) Key(32) Extra(0x39) 456 KeyPress 20030609-120949-009 "SPACE" Status=(up) Key(32) Extra(0xc039) 457 KeyPress 20030609-120949-071 "T" Status=(down) Key(84) Extra(0x14) 458 KeyPress 20030609-120949-137 "T" Status=(up) Key(84) Extra(0xc014) 459 KeyPress 20030609-120949-193 "O" Status=(down) Key(79) Extra(0x18) 460 KeyPress 20030609-120949-299 "SPACE" Status=(down) Key(32) Extra(0x39) 461 KeyPress 20030609-120949-315 "O" Status=(up) Key(79) Extra(0xc018) 462 KeyPress 20030609-120949-383 "SPACE" Status=(up) Key(32) Extra(0xc039) 463 KeyPress 20030609-120949-706 "D" Status=(down) Key(68) Extra(0x20) 464 KeyPress 20030609-120949-806 "D" Status=(up) Key(68) Extra(0xc020) 465 KeyPress 20030609-120950-300 "E" Status=(down) Key(69) Extra(0x12) 466 KeyPress 20030609-120950-358 "E" Status=(up) Key(69) Extra(0xc012) 467 KeyPress 20030609-120950-482 "M" Status=(down) Key(77) Extra(0x32) 468 KeyPress 20030609-120950-560 "M" Status=(up) Key(77) Extra(0xc032) 469 KeyPress 20030609-120950-648 "O" Status=(down) Key(79) Extra(0x18) 470 KeyPress 20030609-120950-740 "O" Status=(up) Key(79) Extra(0xc018) 471 KeyPress 20030609-120950-794 "N" Status=(down) Key(78) Extra(0x31) 472 KeyPress 20030609-120950-878 "N" Status=(up) Key(78) Extra(0xc031) 473 KeyPress 20030609-120950-916 "S" Status=(down) Key(83) Extra(0x1f) 474 KeyPress 20030609-120951-010 "S" Status=(up) Key(83) Extra(0xc01f) 475 KeyPress 20030609-120951-090 "T" Status=(down) Key(84) Extra(0x14) 476 KeyPress 20030609-120951-210 "R" Status=(down) Key(82) Extra(0x13) 477 KeyPress 20030609-120951-222 "T" Status=(up) Key(84) Extra(0xc014) 478 KeyPress 20030609-120951-288 "R" Status=(up) Key(82) Extra(0xc013) 479 KeyPress 20030609-120951-408 "A" Status=(down) Key(65) Extra(0x1e) 480 KeyPress 20030609-120951-530 "A" Status=(up) Key(65) Extra(0xc01e) 481 KeyPress 20030609-120951-550 "T" Status=(down) Key(84) Extra(0x14) 482 KeyPress 20030609-120951-640 "T" Status=(up) Key(84) Extra(0xc014) 483 KeyPress 20030609-120951-702 "E" Status=(down) Key(69) Extra(0x12) 484 KeyPress 20030609-120951-778 "E" Status=(up) Key(69) Extra(0xc012) 485 KeyPress 20030609-120951-840 "SPACE" Status=(down) Key(32) Extra(0x39) 486 KeyPress 20030609-120951-922 "SPACE" Status=(up) Key(32) Extra(0xc039) 487 KeyPress 20030609-120951-950 "T" Status=(down) Key(84) Extra(0x14) 488 KeyPress 20030609-120952-012 "H" Status=(down) Key(72) Extra(0x23) 489 KeyPress 20030609-120952-032 "T" Status=(up) Key(84) Extra(0xc014) 490 KeyPress 20030609-120952-088 "H" Status=(up) Key(72) Extra(0xc023) 491 KeyPress 20030609-120952-126 "E" Status=(down) Key(69) Extra(0x12) 492 KeyPress 20030609-120952-194 "E" Status=(up) Key(69) Extra(0xc012) 493 KeyPress 20030609-120952-344 "SPACE" Status=(down) Key(32) Extra(0x39) 494 KeyPress 20030609-120952-428 "SPACE" Status=(up) Key(32) Extra(0xc039) 495 KeyPress 20030609-120952-572 "SHIFT" Status=(down) Key(16) Extra(0x2a) 496 KeyPress 20030609-120952-694 "K" Status=(down) Key(75) Extra(0x25) 497 KeyPress 20030609-120952-768 "SHIFT" Status=(up) Key(16) Extra(0xc02a) 498 KeyPress 20030609-120952-771 "K" Status=(up) Key(75) Extra(0xc025) 499 KeyPress 20030609-120953-259 "E" Status=(down) Key(69) Extra(0x12) 500 KeyPress 20030609-120953-339 "E" Status=(up) Key(69) Extra(0xc012) 501 KeyPress 20030609-120953-379 "Y" Status=(down) Key(89) Extra(0x15) 502 KeyPress 20030609-120953-463 "Y" Status=(up) Key(89) Extra(0xc015) 503 KeyPress 20030609-120953-521 "SHIFT" Status=(down) Key(16) Extra(0x2a) 504 KeyPress 20030609-120953-665 "C" Status=(down) Key(67) Extra(0x2e) 505 KeyPress 20030609-120953-715 "SHIFT" Status=(up) Key(16) Extra(0xc02a) 506 KeyPress 20030609-120953-735 "C" Status=(up) Key(67) Extra(0xc02e) 507 KeyPress 20030609-120953-901 "A" Status=(down) Key(65) Extra(0x1e) 508 KeyPress 20030609-120953-993 "A" Status=(up) Key(65) Extra(0xc01e) 509 KeyPress 20030609-120954-105 "P" Status=(down) Key(80) Extra(0x19) 510 KeyPress 20030609-120954-181 "P" Status=(up) Key(80) Extra(0xc019) 511 KeyPress 20030609-120954-305 "T" Status=(down) Key(84) Extra(0x14) 512 KeyPress 20030609-120954-375 "T" Status=(up) Key(84) Extra(0xc014) 513 KeyPress 20030609-120954-455 "U" Status=(down) Key(85) Extra(0x16) 514 KeyPress 20030609-120954-509 "U" Status=(up) Key(85) Extra(0xc016) 515 KeyPress 20030609-120954-531 "R" Status=(down) Key(82) Extra(0x13) 516 KeyPress 20030609-120954-639 "R" Status=(up) Key(82) Extra(0xc013) 517 KeyPress 20030609-120954-659 "E" Status=(down) Key(69) Extra(0x12) 518 KeyPress 20030609-120954-717 "E" Status=(up) Key(69) Extra(0xc012) 519 KeyPress 20030609-120954-879 "SPACE" Status=(down) Key(32) Extra(0x39) 520 KeyPress 20030609-120954-997 "SPACE" Status=(up) Key(32) Extra(0xc039) 521 KeyPress 20030609-120955-157 "P" Status=(down) Key(80) Extra(0x19) 522 KeyPress 20030609-120955-241 "P" Status=(up) Key(80) Extra(0xc019) 523 KeyPress 20030609-120955-273 "R" Status=(down) Key(82) Extra(0x13) 524 KeyPress 20030609-120955-355 "R" Status=(up) Key(82) Extra(0xc013) 525 KeyPress 20030609-120955-381 "O" Status=(down) Key(79) Extra(0x18) 526 KeyPress 20030609-120955-455 "O" Status=(up) Key(79) Extra(0xc018) 527 KeyPress 20030609-120955-497 "G" Status=(down) Key(71) Extra(0x22) 528 KeyPress 20030609-120955-561 "R" Status=(down) Key(82) Extra(0x13) 529 KeyPress 20030609-120955-593 "G" Status=(up) Key(71) Extra(0xc022) 530 KeyPress 20030609-120955-655 "R" Status=(up) Key(82) Extra(0xc013) 531 KeyPress 20030609-120955-771 "A" Status=(down) Key(65) Extra(0x1e) 532 KeyPress 20030609-120955-867 "A" Status=(up) Key(65) Extra(0xc01e) 533 KeyPress 20030609-120955-921 "M" Status=(down) Key(77) Extra(0x32) 534 KeyPress 20030609-120955-995 "M" Status=(up) Key(77) Extra(0xc032) 535 KeyPress 20030609-120956-562 "SHIFT" Status=(down) Key(16) Extra(0x2a) 536 KeyPress 20030609-120956-759 "1" Status=(down) Key(49) Extra(0x2) 537 KeyPress 20030609-120956-841 "SHIFT" Status=(up) Key(16) Extra(0xc02a) 538 KeyPress 20030609-120956-848 "1" Status=(up) Key(49) Extra(0xc002) 539 KeyPress 20030609-120956-986 "RETURN" Status=(down) Key(13) Extra(0x1c) 540 KeyPress 20030609-120957-066 "RETURN" Status=(up) Key(13) Extra(0xc01c) 541 KeyPress 20030609-120957-158 "RETURN" Status=(down) Key(13) Extra(0x1c) 542 KeyPress 20030609-120957-254 "RETURN" Status=(up) Key(13) Extra(0xc01c) 543 Mouse 20030609-120958-388 "MOUSEMOVE" ID(0x200) x(694) y(749) 544 Mouse 20030609-120958-397 "MOUSEMOVE" ID(0x200) x(694) y(748) ... 751 Mouse 20030609-121002-078 "MOUSEMOVE" ID(0x200) x(173) y(207) 752 Mouse 20030609-121002-094 "MOUSEMOVE" ID(0x200) x(173) y(206) 753 Mouse 20030609-121002-659 "LBUTTONDOWN" ID(0x201) x(173) y(206) 754 Mouse 20030609-121002-659 "MOUSEMOVE" ID(0x200) x(173) y(206) 755 Mouse 20030609-121002-758 "LBUTTONUP" ID(0x202) x(173) y(206) 756 Mouse 20030609-121002-758 "MOUSEMOVE" ID(0x200) x(173) y(206) 757 Mouse 20030609-121002-833 "LBUTTONDBCLK" ID(0x203) x(173) y(206) 758 Mouse 20030609-121002-839 "MOUSEMOVE" ID(0x200) x(173) y(206) 759 TimeMessage 20030609-121007-134 Counter(827642371141) Frequency(3579545Hz) Correction(165ms) 760 AutoSave # End of fileProblems
None known. (What, problems with my code? You must be kidding...)Questions?
If you've got questions, please feel free to e-mail me at:
- What operating systems does the KeyCapture software run on?
KeyCapture has been tested on Windows 98, and Windows XP. It should work on Windows 95, ME, NT, and 2000 as well. If you can try any of these other operating systems and get back to me, that would be great!
(I've received reports that KeyCapture does work on Windows 2000.)
- My subjects are concerned about their privacy.
Typically, KeyCapture records every keystroke, and hence passwords, confidential letters, and other private text. From experience, we know that it is very difficult to find people willing to be subjects (i.e. to have KeyCapture installed on their computer) because of privacy concerns. These privacy concerns inspired us to release the KeyCapture_Suspend program (new in version 1.2).
The KeyCapture_Suspend.exe program temporarily suspends KeyCapture. Subjects should be instructed to start the suspend program before entering any confidential data, and to close the suspend program when they are done.
- What format is the data file in? How do I convert it to ASCII?
You will notice that while KeyCapture is running it stores its data in a file called either AutoSave.KC or c:\windows\temp\KeyCaptureEmergencySaveFile. One of these files is used (depending upon whether KeyCapture can write to its installed directory or not) to store the data in a binary format. Please ignore these files - they do store your data, but I've provided an easy way to get your data in ASCII.
To retreive your data, run the KeyCapture_Config program and click on "Save Data". A dialogue box will appear allowing you to set the filename and directory to save your data. The file produced is in ACSII, and can be viewed with window's NotePad, or any other text editor.
- I think I've found a bug - KeyCapture does not collect any data when the KeyCapture_Config program is running!
You are correct, but it's a feature, not a bug. KeyCapture suspends data capture while the config program is running, because researchers are interested in the keystrokes and mouse actions performed by the normal users of a computer. It's important that this data not be contaminated with data of the researcher configuring the KeyCapture program.
- What does the "Clear Data" button do?
The "Clear Data" button causes KeyCapture to delete all of the data it has collected so far. If you've been running KeyCapture and for some reason want to throw-away the data collected, then click on "Clear Data". Note that there is no way to get your data back afterwards.
- Somebody moved the KeyCapture directory on me, and now KeyCapture says there is no data to save.
KeyCapture keeps track of where it is installed (the directory) using a key in the registry. Knowing where it is installed makes it easy for KeyCapture to find its parts (the .exe, the .dll, etc.). If you move KeyCapture to another directory, you must run the KeyCapture_Config program, and click on "Uninstall". Then run the config program again, and enable KeyCapture.
When KeyCapture can't write to the AutoSave.KC file, it instead writes to a file called c:\windows\temp\KeyCaptureEmergencySaveFile. To get your data from this emergency save file, do the following:
- Copy the current AutoSave.KC file (if there is one) to AutoSave.Backup.
- Run KeyCapture_Config.exe, and click on "Uninstall".
- Move the emergency file (c:\windows\temp\KeyCaptureEmergencySaveFile) to the directory that the KeyCapture programs are currently in. Rename the file: AutoSave.KC.
- Run the config program and save your data.
- If there was already a AutoSave.KC file in step 1 above, then rename it back (rename AutoSave.Backup to AutoSave.KC). Run the config program and save your data.
- I've got the data file, now what do I do?
I used a series of AWK programs to process the data files and collect the statistics I was interested in. (AWK is a text-file processing tool commonly available on most Unix operating systems - including Linux.) I don't have any windows-based analysis software, but I'll e-mail you a couple of AWK programs, if you're interested.
- I want a feature added...
I am interested in feature suggestions, however, as I've moved on to other projects I'm not likely to implement any features that aren't interesting to me. However, if you want to (a) pay me or (b) collaborate on a publication with me, then I may become more interested in your suggested features.
- How do I compile the source code?
To compile the source code you need microsoft's visual c++ product. The source code consists of four parts (one for each of the .exe, the .dll, the config program, and the suspend program). You must compile the .dll first. (This is because the other programs all depend upon a file called dll.lib created when the .dll is compiled.) You can compile the other programs in any order. The executables and .dll are all placed into the directory called Executables.
.
Links...
Corpora and other sources of text data
Project Gutenberg
Project Gutenberg (Sailor's Project)
British National Corpus
A list of several corpora
The Brown Corpus
Linguistic digram frequency tables
Phrase sets for evaluating text entry techniques the phrase set is here.
Interesting text input methods
Dasher
T9
The Fitaly Keyboard
Letter Wise, and Word Wise
Some noteworthy text input researchers
William Soukoreff (Me!)
Dr. Scott MacKenzie
Dr. Shumin Zhai