rdp-rautomation 0.6.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. data/.document +5 -0
  2. data/.rspec +2 -0
  3. data/.yardopts +6 -0
  4. data/History.rdoc +103 -0
  5. data/LICENSE +20 -0
  6. data/README.rdoc +114 -0
  7. data/Rakefile +43 -0
  8. data/VERSION +1 -0
  9. data/ext/AutoItX/AutoItX.chm +0 -0
  10. data/ext/AutoItX/AutoItX3.dll +0 -0
  11. data/ext/IAccessibleDLL/IAccessibleDLL.sln +20 -0
  12. data/ext/IAccessibleDLL/IAccessibleDLL.suo +0 -0
  13. data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.cpp +30 -0
  14. data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj +102 -0
  15. data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj.filters +42 -0
  16. data/ext/IAccessibleDLL/IAccessibleDLL/IAccessibleDLL.vcxproj.user +3 -0
  17. data/ext/IAccessibleDLL/IAccessibleDLL/ReadMe.txt +48 -0
  18. data/ext/IAccessibleDLL/IAccessibleDLL/dllmain.cpp +19 -0
  19. data/ext/IAccessibleDLL/IAccessibleDLL/stdafx.cpp +8 -0
  20. data/ext/IAccessibleDLL/IAccessibleDLL/stdafx.h +22 -0
  21. data/ext/IAccessibleDLL/IAccessibleDLL/table_support.cpp +282 -0
  22. data/ext/IAccessibleDLL/IAccessibleDLL/targetver.h +8 -0
  23. data/ext/IAccessibleDLL/Release/IAccessibleDLL.dll +0 -0
  24. data/ext/ListViewExplorer/ListViewExplorer.sln +20 -0
  25. data/ext/ListViewExplorer/ListViewExplorer.suo +0 -0
  26. data/ext/ListViewExplorer/ListViewExplorer/ListViewExplorer.cpp +174 -0
  27. data/ext/ListViewExplorer/ListViewExplorer/ListViewExplorer.vcxproj +95 -0
  28. data/ext/ListViewExplorer/ListViewExplorer/ListViewExplorer.vcxproj.filters +42 -0
  29. data/ext/ListViewExplorer/ListViewExplorer/ListViewExplorer.vcxproj.user +3 -0
  30. data/ext/ListViewExplorer/ListViewExplorer/ReadMe.txt +40 -0
  31. data/ext/ListViewExplorer/ListViewExplorer/stdafx.cpp +8 -0
  32. data/ext/ListViewExplorer/ListViewExplorer/stdafx.h +17 -0
  33. data/ext/ListViewExplorer/ListViewExplorer/table_support.cpp +250 -0
  34. data/ext/ListViewExplorer/ListViewExplorer/table_support.h +2 -0
  35. data/ext/ListViewExplorer/ListViewExplorer/targetver.h +8 -0
  36. data/ext/UiaDll/Release/UiaDll.dll +0 -0
  37. data/ext/UiaDll/UiaDll.sln +20 -0
  38. data/ext/UiaDll/UiaDll.suo +0 -0
  39. data/ext/UiaDll/UiaDll/ReadMe.txt +48 -0
  40. data/ext/UiaDll/UiaDll/UiaDll.cpp +205 -0
  41. data/ext/UiaDll/UiaDll/UiaDll.vcxproj +104 -0
  42. data/ext/UiaDll/UiaDll/UiaDll.vcxproj.filters +42 -0
  43. data/ext/UiaDll/UiaDll/dllmain.cpp +39 -0
  44. data/ext/UiaDll/UiaDll/globals.h +3 -0
  45. data/ext/UiaDll/UiaDll/stdafx.cpp +8 -0
  46. data/ext/UiaDll/UiaDll/stdafx.h +19 -0
  47. data/ext/UiaDll/UiaDll/targetver.h +8 -0
  48. data/ext/WindowsForms/bin/WindowsForms.exe +0 -0
  49. data/ext/WindowsForms/src/WindowsForms/WindowsForms.sln +20 -0
  50. data/ext/WindowsForms/src/WindowsForms/WindowsForms.suo +0 -0
  51. data/ext/WindowsForms/src/WindowsForms/WindowsForms/AboutBox.Designer.cs +80 -0
  52. data/ext/WindowsForms/src/WindowsForms/WindowsForms/AboutBox.cs +103 -0
  53. data/ext/WindowsForms/src/WindowsForms/WindowsForms/AboutBox.resx +120 -0
  54. data/ext/WindowsForms/src/WindowsForms/WindowsForms/DataEntryForm.Designer.cs +187 -0
  55. data/ext/WindowsForms/src/WindowsForms/WindowsForms/DataEntryForm.cs +46 -0
  56. data/ext/WindowsForms/src/WindowsForms/WindowsForms/DataEntryForm.resx +120 -0
  57. data/ext/WindowsForms/src/WindowsForms/WindowsForms/MainFormWindow.Designer.cs +377 -0
  58. data/ext/WindowsForms/src/WindowsForms/WindowsForms/MainFormWindow.cs +78 -0
  59. data/ext/WindowsForms/src/WindowsForms/WindowsForms/MainFormWindow.resx +120 -0
  60. data/ext/WindowsForms/src/WindowsForms/WindowsForms/PersonForm.Designer.cs +119 -0
  61. data/ext/WindowsForms/src/WindowsForms/WindowsForms/PersonForm.cs +34 -0
  62. data/ext/WindowsForms/src/WindowsForms/WindowsForms/PersonForm.resx +120 -0
  63. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Program.cs +21 -0
  64. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Properties/AssemblyInfo.cs +36 -0
  65. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Properties/Resources.Designer.cs +71 -0
  66. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Properties/Resources.resx +117 -0
  67. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Properties/Settings.Designer.cs +30 -0
  68. data/ext/WindowsForms/src/WindowsForms/WindowsForms/Properties/Settings.settings +7 -0
  69. data/ext/WindowsForms/src/WindowsForms/WindowsForms/SimpleElementsForm.Designer.cs +93 -0
  70. data/ext/WindowsForms/src/WindowsForms/WindowsForms/SimpleElementsForm.cs +19 -0
  71. data/ext/WindowsForms/src/WindowsForms/WindowsForms/SimpleElementsForm.resx +120 -0
  72. data/ext/WindowsForms/src/WindowsForms/WindowsForms/WindowsForms.csproj +123 -0
  73. data/ext/WindowsForms/src/WindowsForms/WindowsForms/bin/Release/WindowsForms.exe +0 -0
  74. data/lib/rautomation.rb +6 -0
  75. data/lib/rautomation/adapter/autoit.rb +5 -0
  76. data/lib/rautomation/adapter/autoit/button.rb +59 -0
  77. data/lib/rautomation/adapter/autoit/locators.rb +22 -0
  78. data/lib/rautomation/adapter/autoit/text_field.rb +61 -0
  79. data/lib/rautomation/adapter/autoit/window.rb +184 -0
  80. data/lib/rautomation/adapter/helper.rb +20 -0
  81. data/lib/rautomation/adapter/win_ffi.rb +21 -0
  82. data/lib/rautomation/adapter/win_ffi/button.rb +25 -0
  83. data/lib/rautomation/adapter/win_ffi/button_helper.rb +24 -0
  84. data/lib/rautomation/adapter/win_ffi/checkbox.rb +19 -0
  85. data/lib/rautomation/adapter/win_ffi/constants.rb +94 -0
  86. data/lib/rautomation/adapter/win_ffi/control.rb +79 -0
  87. data/lib/rautomation/adapter/win_ffi/functions.rb +333 -0
  88. data/lib/rautomation/adapter/win_ffi/keystroke_converter.rb +67 -0
  89. data/lib/rautomation/adapter/win_ffi/label.rb +21 -0
  90. data/lib/rautomation/adapter/win_ffi/list_box.rb +60 -0
  91. data/lib/rautomation/adapter/win_ffi/locators.rb +22 -0
  92. data/lib/rautomation/adapter/win_ffi/ms_uia/uia_dll.rb +36 -0
  93. data/lib/rautomation/adapter/win_ffi/radio.rb +19 -0
  94. data/lib/rautomation/adapter/win_ffi/select_list.rb +87 -0
  95. data/lib/rautomation/adapter/win_ffi/table.rb +57 -0
  96. data/lib/rautomation/adapter/win_ffi/text_field.rb +52 -0
  97. data/lib/rautomation/adapter/win_ffi/window.rb +226 -0
  98. data/lib/rautomation/button.rb +55 -0
  99. data/lib/rautomation/element_collections.rb +47 -0
  100. data/lib/rautomation/text_field.rb +60 -0
  101. data/lib/rautomation/wait_helper.rb +23 -0
  102. data/lib/rautomation/window.rb +234 -0
  103. data/spec/adapter/win_ffi/button_spec.rb +41 -0
  104. data/spec/adapter/win_ffi/checkbox_spec.rb +48 -0
  105. data/spec/adapter/win_ffi/keystroke_converter_spec.rb +47 -0
  106. data/spec/adapter/win_ffi/label_spec.rb +21 -0
  107. data/spec/adapter/win_ffi/listbox_spec.rb +52 -0
  108. data/spec/adapter/win_ffi/radio_spec.rb +37 -0
  109. data/spec/adapter/win_ffi/select_list_spec.rb +66 -0
  110. data/spec/adapter/win_ffi/table_spec.rb +39 -0
  111. data/spec/adapter/win_ffi/text_field_spec.rb +23 -0
  112. data/spec/adapter/win_ffi/window_spec.rb +43 -0
  113. data/spec/button_spec.rb +68 -0
  114. data/spec/buttons_spec.rb +21 -0
  115. data/spec/spec_helper.rb +96 -0
  116. data/spec/text_field_spec.rb +65 -0
  117. data/spec/text_fields_spec.rb +22 -0
  118. data/spec/window_spec.rb +122 -0
  119. data/spec/windows_spec.rb +55 -0
  120. metadata +207 -0
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
@@ -0,0 +1,6 @@
1
+ --readme README.rdoc
2
+ --no-private
3
+ --hide-void-return
4
+ --title "RAutomation"
5
+ --files History.rdoc,LICENSE
6
+ --default-return ""
@@ -0,0 +1,103 @@
1
+ == Version 0.6.3 / 2011-07-16
2
+
3
+ * use current window's handle (hwnd) in WinFfi::Window#child method
4
+
5
+
6
+ == Version 0.6.2 / 2011-07-07
7
+
8
+ === WinFFI adapter
9
+
10
+ * loading lazily oleacc.dll
11
+ * loading lazily uia_dll.rb due to problems on certain Windows XP machines
12
+
13
+
14
+ == Version 0.6.1 / 2011-07-05
15
+
16
+ === WinFFI adapter
17
+
18
+ * Fixed it for Ruby 1.9.2.
19
+
20
+
21
+ == Version 0.6.0 / 2011-07-03
22
+
23
+ === WinFFI adapter
24
+
25
+ * Window#send_keys now accepts only String argument similar to AutoIt's Send function.
26
+ * added Table#strings, #select, #selected? methods.
27
+ * added Label element support with #value method.
28
+ * added #has_focus? and #set_focus methods to controls.
29
+ * added possibility to search controls by automation id as :id.
30
+ * added #enabled? and #disabled? methods for controls.
31
+ * added Window#control and #controls methods for accessing controls generally.
32
+ * added SelectList#option method.
33
+ * added ListBox element support with #count, #items, #exist?, #selected? and #select methods.
34
+
35
+
36
+ == Version 0.5.1 / 2011-01-30
37
+
38
+ === All adapters
39
+
40
+ * added Window.windows, #windows, #buttons and #text_fields methods to retrieve collection of elements and use them with Enumerable/Array methods.
41
+
42
+ === WinFFI adapter
43
+
44
+ * added Window#child method for searching child windows and popups
45
+ * added initial support for Radio, Checkbox, SelectList and Table
46
+
47
+ === AutoIt adapter
48
+
49
+ * allow to search windows by PID
50
+
51
+
52
+ == Version 0.4.0 / 2010-12-23
53
+
54
+ * allow to search windows without text (like empty Notepad window for example).
55
+ * added possibility to use block for #click to specify successful clicking condition.
56
+ * renamed :ffi adapter to :win_ffi because FFI may be used on other platforms too.
57
+
58
+
59
+ == Version 0.3.0 / 2010-12-18
60
+
61
+ * added Ffi adapter specific method Window#child which searches for child windows and popups
62
+
63
+
64
+ == Version 0.2.1 / 2010-12-17
65
+
66
+ * added yard options for documentation
67
+
68
+
69
+ == Version 0.2.0 / 2010-12-17
70
+
71
+ * added Window#pid method
72
+
73
+
74
+ == Version 0.1.0 / 2010-12-14
75
+
76
+ * added new default adapter for Windows: FFI
77
+ * changes for AutoIt adapter:
78
+ - added 0-based :index locator for window locators to search for windows with the same criteria.
79
+ - renamed text_field and button locator :instance to :index instead.
80
+ - :class_name locator is not allowed anymore. Use :class and :index together instead.
81
+ - use :value for button locator instead of :text
82
+
83
+
84
+ == Version 0.0.4 / 2010-10-27
85
+
86
+ * most Window, Button and TextField methods wait until the object exists.
87
+ Use RAutomation::Window.wait_timeout= to set timeout before failing. Default is 60 seconds.
88
+
89
+
90
+ == Version 0.0.3 / 2010-10-15
91
+
92
+ * RAutomation didn't load AutoIt correctly if it wasn't installed before
93
+
94
+
95
+ == Version 0.0.2 / 2010-10-14
96
+
97
+ * using :value locator for buttons instead of :text
98
+ * searching only visible windows with some text on them
99
+
100
+
101
+ == Version 0.0.1 / 2010-10-13
102
+
103
+ * Initial release
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010-2011 Jarmo Pertman
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,114 @@
1
+ = RAutomation
2
+
3
+ * Web: http://www.github.com/jarmo/RAutomation
4
+ * Author: Jarmo Pertman (mailto:jarmo.p[at]gmail.com)
5
+
6
+ == DESCRIPTION
7
+
8
+ RAutomation is a small and easy to use library for helping out to automate windows and their controls
9
+ for automated testing.
10
+
11
+ RAutomation provides:
12
+ * Easy to use and user-friendly API (inspired by Watir http://www.watir.com)
13
+ * Cross-platform compatibility
14
+ * Easy extensibility - with small scripting effort it's possible to add support for not yet
15
+ supported platforms or technologies
16
+
17
+ == USAGE
18
+
19
+ require "rautomation"
20
+
21
+ window = RAutomation::Window.new(:title => /part of the title/i)
22
+ window.exists? # => true
23
+
24
+ window.title # => "blah blah part Of the title blah"
25
+ window.text # => "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultricies..."
26
+
27
+ window.text_field(:class => "Edit", :index => 0).set "hello, world!"
28
+ button = window.button(:value => "&Save")
29
+ button.exists? # => true
30
+ button.click
31
+
32
+ all_windows = RAutomation::Window.windows
33
+ all_windows.each {|window| puts window.hwnd}
34
+
35
+ window = RAutomation::Window.new(:title => /part of the title/i)
36
+ windows = window.windows
37
+ puts windows.size # => 2
38
+ windows.map {|window| window.title } # => ["part of the title 1", "part of the title 2"]
39
+
40
+ window.windows(:title => /part of other title/i) # => all windows with matching specified title
41
+
42
+ window.buttons.each {|button| puts button.value}
43
+ window.buttons(:value => /some value/i).each {|button| puts button.value}
44
+
45
+ window2 = RAutomation::Window.new(:title => "Other Title", :adapter => :autoit) # use AutoIt adapter
46
+ # use adapter's (in this case AutoIt's) internal methods not part of the public API directly
47
+ window2.WinClose("[TITLE:Other Title]")
48
+
49
+ Check out the documentation for other possible usages!
50
+
51
+ == INSTALL
52
+
53
+ === Windows
54
+
55
+ 1. gem install rautomation
56
+ 2. create script and run it
57
+
58
+ Available adapters:
59
+ * :ffi - uses Windows API directly with FFI (default)
60
+ * :autoit - uses AutoIt for automation
61
+
62
+ When using AutoIt adapter:
63
+ You might need administrative privileges if running for the first time and you haven't installed AutoIt before!
64
+
65
+ === Linux
66
+
67
+ Feel yourself at home on Linux and know how to automate windows and their controls? I would be happy if you'd contact me
68
+ about that matter - or even better, follow the instructions at "How to create a new adapter?"
69
+
70
+ === OS X
71
+
72
+ Feel yourself at home on OS X and know how to automate windows and their controls? I would be happy if you'd contact me
73
+ about that matter - or even better, follow the instructions at "How to create a new adapter?"
74
+
75
+ === Others
76
+
77
+ Feel yourself at home on some operating system not listed in here and know how to automate windows and their controls?
78
+ Does Ruby also work on that operating system? I would be happy if you'd contact me
79
+ about that matter - or even better, follow the instructions at "How to create a new adapter?"
80
+
81
+ == How to create a new adapter?
82
+
83
+ 1. Fork the project.
84
+ 2. Create entry point file to lib/rautomation/adapter which should load all adapter specific files.
85
+ 3. Add `autoload` statement into lib/rautomation/adapter/helper.rb for that file.
86
+ 4. Create a directory for your adapter's specific code into lib/rautomation/adapter
87
+ 5. Copy button.rb, text_field.rb and window.rb from some of the existing adapter's directory.
88
+ 6. Add spec data for your adapter into spec/spec_helper DATA constant.
89
+ 7. Use environment variable __RAUTOMATION_ADAPTER__ to point to that adapter.
90
+ 8. Start coding and spec-ing until as much of possible of the public API is satisfied.
91
+ 9. Make me a pull request.
92
+
93
+ Don't forget to fix the documentation for that adapter also!
94
+
95
+ In case of any problems, feel free to contact me.
96
+
97
+ == Contributors
98
+
99
+ * Stephan Schwab to WinFfi adapter - http://github.com/snscaimito
100
+
101
+ == Note on Patches/Pull Requests
102
+
103
+ * Fork the project.
104
+ * Make your feature addition or bug fix.
105
+ * Add tests for it. This is important so I don't break it in a
106
+ future version unintentionally.
107
+ * Commit, do not mess with rakefile, version, or history.
108
+
109
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
110
+ * Send me a pull request. Bonus points for topic branches.
111
+
112
+ == Copyright
113
+
114
+ Copyright (c) 2010-2011 Jarmo Pertman. See LICENSE for details.
@@ -0,0 +1,43 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "rdp-rautomation"
8
+ gem.summary = %Q{Automate windows and their controls through user-friendly API with Ruby}
9
+ gem.description = %Q{RAutomation is a small and easy to use library for helping out to automate windows and their controls
10
+ for automated testing.
11
+
12
+ RAutomation provides:
13
+ * Easy to use and user-friendly API (inspired by Watir http://www.watir.com)
14
+ * Cross-platform compatibility
15
+ * Easy extensibility - with small scripting effort it's possible to add support for not yet
16
+ supported platforms or technologies}
17
+ gem.email = "jarmo.p@gmail.com"
18
+ gem.homepage = "http://github.com/jarmo/RAutomation"
19
+ gem.authors = ["Jarmo Pertman"]
20
+ gem.add_development_dependency "rspec", "~>2.3"
21
+
22
+ ignored_files = []
23
+ ignored_files << ".gitignore" << ".gemspec" << "features" << "IAccessibleDLL.sdf"
24
+ gem.files = `git ls-files`.strip.split($/).delete_if {|f| f =~ Regexp.union(*ignored_files)}
25
+ end
26
+ Jeweler::GemcutterTasks.new
27
+ rescue LoadError
28
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
29
+ end
30
+
31
+ require 'rspec/core/rake_task'
32
+ RSpec::Core::RakeTask.new(:spec)
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.rcov = true
36
+ end
37
+
38
+ task :spec => :check_dependencies
39
+
40
+ task :default => :spec
41
+
42
+ require 'yard'
43
+ YARD::Rake::YardocTask.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.6.3.1
Binary file
Binary file
@@ -0,0 +1,20 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 11.00
3
+ # Visual Studio 2010
4
+ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IAccessibleDLL", "IAccessibleDLL\IAccessibleDLL.vcxproj", "{CCE6C620-932C-4B59-A2DA-E11E279F4D9A}"
5
+ EndProject
6
+ Global
7
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
8
+ Debug|Win32 = Debug|Win32
9
+ Release|Win32 = Release|Win32
10
+ EndGlobalSection
11
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
12
+ {CCE6C620-932C-4B59-A2DA-E11E279F4D9A}.Debug|Win32.ActiveCfg = Debug|Win32
13
+ {CCE6C620-932C-4B59-A2DA-E11E279F4D9A}.Debug|Win32.Build.0 = Debug|Win32
14
+ {CCE6C620-932C-4B59-A2DA-E11E279F4D9A}.Release|Win32.ActiveCfg = Release|Win32
15
+ {CCE6C620-932C-4B59-A2DA-E11E279F4D9A}.Release|Win32.Build.0 = Release|Win32
16
+ EndGlobalSection
17
+ GlobalSection(SolutionProperties) = preSolution
18
+ HideSolutionNode = FALSE
19
+ EndGlobalSection
20
+ EndGlobal
@@ -0,0 +1,30 @@
1
+ // IAccessibleDLL.cpp : Defines the exported functions for the DLL application.
2
+ //
3
+
4
+ #include "stdafx.h"
5
+
6
+ extern "C"
7
+ __declspec( dllexport ) long get_button_state(HWND buttonHwnd) {
8
+ IAccessible *pIAccessible ;
9
+ VARIANT varState;
10
+ VARIANT varChildId;
11
+ BOOL checked = FALSE ;
12
+ HRESULT hr ;
13
+ HMODULE hModule ;
14
+ LPFNACCESSIBLEOBJECTFROMWINDOW lpfnAccessibleObjectFromWindow ;
15
+
16
+ hModule = LoadLibraryA("oleacc.dll");
17
+ lpfnAccessibleObjectFromWindow = (LPFNACCESSIBLEOBJECTFROMWINDOW)GetProcAddress(hModule, "AccessibleObjectFromWindow");
18
+
19
+ hr = lpfnAccessibleObjectFromWindow(buttonHwnd, OBJID_CLIENT, IID_IAccessible, (void**)&pIAccessible) ;
20
+
21
+ VariantInit(&varChildId);
22
+ varChildId.vt = VT_I4;
23
+ varChildId.lVal = CHILDID_SELF ;
24
+
25
+ pIAccessible->get_accState(varChildId, &varState);
26
+
27
+ return varState.lVal ;
28
+ }
29
+
30
+
@@ -0,0 +1,102 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <ItemGroup Label="ProjectConfigurations">
4
+ <ProjectConfiguration Include="Debug|Win32">
5
+ <Configuration>Debug</Configuration>
6
+ <Platform>Win32</Platform>
7
+ </ProjectConfiguration>
8
+ <ProjectConfiguration Include="Release|Win32">
9
+ <Configuration>Release</Configuration>
10
+ <Platform>Win32</Platform>
11
+ </ProjectConfiguration>
12
+ </ItemGroup>
13
+ <PropertyGroup Label="Globals">
14
+ <ProjectGuid>{CCE6C620-932C-4B59-A2DA-E11E279F4D9A}</ProjectGuid>
15
+ <Keyword>Win32Proj</Keyword>
16
+ <RootNamespace>IAccessibleDLL</RootNamespace>
17
+ </PropertyGroup>
18
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
19
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
20
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
21
+ <UseDebugLibraries>true</UseDebugLibraries>
22
+ <CharacterSet>Unicode</CharacterSet>
23
+ </PropertyGroup>
24
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
25
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
26
+ <UseDebugLibraries>false</UseDebugLibraries>
27
+ <WholeProgramOptimization>true</WholeProgramOptimization>
28
+ <CharacterSet>Unicode</CharacterSet>
29
+ </PropertyGroup>
30
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
31
+ <ImportGroup Label="ExtensionSettings">
32
+ </ImportGroup>
33
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
34
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
35
+ </ImportGroup>
36
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
37
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
38
+ </ImportGroup>
39
+ <PropertyGroup Label="UserMacros" />
40
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
41
+ <LinkIncremental>true</LinkIncremental>
42
+ </PropertyGroup>
43
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
44
+ <LinkIncremental>false</LinkIncremental>
45
+ </PropertyGroup>
46
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
47
+ <ClCompile>
48
+ <PrecompiledHeader>Use</PrecompiledHeader>
49
+ <WarningLevel>Level3</WarningLevel>
50
+ <Optimization>Disabled</Optimization>
51
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;IACCESSIBLEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
52
+ </ClCompile>
53
+ <Link>
54
+ <SubSystem>Windows</SubSystem>
55
+ <GenerateDebugInformation>true</GenerateDebugInformation>
56
+ </Link>
57
+ </ItemDefinitionGroup>
58
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
59
+ <ClCompile>
60
+ <WarningLevel>Level3</WarningLevel>
61
+ <PrecompiledHeader>Use</PrecompiledHeader>
62
+ <Optimization>MaxSpeed</Optimization>
63
+ <FunctionLevelLinking>true</FunctionLevelLinking>
64
+ <IntrinsicFunctions>true</IntrinsicFunctions>
65
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;IACCESSIBLEDLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
66
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
67
+ </ClCompile>
68
+ <Link>
69
+ <SubSystem>Windows</SubSystem>
70
+ <GenerateDebugInformation>true</GenerateDebugInformation>
71
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
72
+ <OptimizeReferences>true</OptimizeReferences>
73
+ <AdditionalDependencies>oleacc.lib;comsuppw.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
74
+ </Link>
75
+ </ItemDefinitionGroup>
76
+ <ItemGroup>
77
+ <None Include="ReadMe.txt" />
78
+ </ItemGroup>
79
+ <ItemGroup>
80
+ <ClInclude Include="stdafx.h" />
81
+ <ClInclude Include="targetver.h" />
82
+ </ItemGroup>
83
+ <ItemGroup>
84
+ <ClCompile Include="dllmain.cpp">
85
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
86
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
87
+ </PrecompiledHeader>
88
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
89
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
90
+ </PrecompiledHeader>
91
+ </ClCompile>
92
+ <ClCompile Include="IAccessibleDLL.cpp" />
93
+ <ClCompile Include="stdafx.cpp">
94
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
95
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
96
+ </ClCompile>
97
+ <ClCompile Include="table_support.cpp" />
98
+ </ItemGroup>
99
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
100
+ <ImportGroup Label="ExtensionTargets">
101
+ </ImportGroup>
102
+ </Project>