robust_excel_ole 1.38 → 1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2639b34c270ac16732d4de9ff06be54e2ba33cf5c1cf9d7842ed7a639044b4c
4
- data.tar.gz: 3533deb112141e2221b00479d6f4207891b7977c0ac1cf6ff37b40ade580fea1
3
+ metadata.gz: c389760bffba5b9c56ece3cd94874141095f4ea9d4d372bce263025f827087c6
4
+ data.tar.gz: 3f25cc955cf6d63a9d9ba07cb0dc8f20ce9c0fee2175e35ca4d654665c683b39
5
5
  SHA512:
6
- metadata.gz: 19071fbe4d293f73f02081c9cb23f706d2102a97d3a038324551e912a6b17929282e0fff738b98f30a2377bf7f2f48b9fb5eaa699a4439b989f2e174a1ff9a63
7
- data.tar.gz: 8da4acac7393db1c62b352842aa6b8944b0ecb1fc410077b62d9b0f618a82e07df69612afb0077c0fedfedb824d1962e97c90041a762e4cbadd6691534f1d3f7
6
+ metadata.gz: f8fe1021c9e2579bb77241b629e1cf8144a5c578607a0f879dc7336b27691d8efd5638d7de89f7427519d038cdaf4e04330e03f2842072551d23e41be0f69c38
7
+ data.tar.gz: 0d879c95b01f6803f1fd8c204ff095b601a0f40b0541b88561a4d0e5b4db0f25111f0bf242195005c060988b71248e03427fe30a0bf44192c7e8ceda7fb6a532
data/Changelog CHANGED
@@ -1,6 +1,14 @@
1
1
  # Change Log
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [1.41] 2022-07-04
5
+
6
+ ## [1.40] 2022-31-03
7
+
8
+ ## [1.39] 2022-29-03
9
+
10
+ ## [1.38] 2022-28-03
11
+
4
12
  ## [1.37] 2021-30-11
5
13
 
6
14
  ### Added
@@ -1,6 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
- LOG_TO_STDOUT = false unless Object.const_defined?(:LOG_TO_STDOUT)
3
+ LOG_TO_STDOUT = true unless Object.const_defined?(:LOG_TO_STDOUT)
4
4
  REO_LOG_DIR = ''.freeze unless Object.const_defined?(:REO_LOG_DIR)
5
5
  REO_LOG_FILE = 'reo.log'.freeze unless Object.const_defined?(:REO_LOG_FILE)
6
6
 
@@ -47,7 +47,7 @@ module RobustExcelOle
47
47
 
48
48
  # @private
49
49
  def cygpath(options, path)
50
- Open3.popen3("cygpath #{options} #{path}") { |stdin, stdout, stderr| stdout.read }[0..-2]
50
+ Open3.popen3("cygpath #{options} #{path}") { |stdin, stdout, stderr| stdout.read }[0..-2].gsub("\n", " ")
51
51
  end
52
52
 
53
53
  module_function :cygpath
@@ -10,52 +10,60 @@ end
10
10
  module User32
11
11
  # Extend this module to an importer
12
12
  extend Fiddle::Importer
13
- # Load 'user32' dynamic library into this importer
14
- dlload 'user32'
15
- # Set C aliases to this importer for further understanding of function signatures
16
- typealias 'HWND', 'HANDLE'
17
- typealias 'HANDLE', 'void*'
18
- typealias 'LPCSTR', 'const char*'
19
- typealias 'LPCWSTR', 'const wchar_t*'
20
- typealias 'UINT', 'unsigned int'
21
- typealias 'ppvObject', 'void**'
22
- typealias 'DWORD', 'unsigned long'
23
- typealias 'LPDWORD', 'DWORD*'
24
- typealias 'PDWORD_PTR', 'DWORD**'
25
- typealias 'WPARAM', 'UINT*'
26
- typealias 'LPARAM', 'INT*'
27
- typealias 'LRESULT', 'DWORD'
28
- # Import C functions from loaded libraries and set them as module functions
29
- extern 'DWORD GetWindowThreadProcessId(HWND, LPDWORD)'
30
- extern 'HWND FindWindowExA(HWND, HWND, LPCSTR, LPCSTR)'
31
- extern 'DWORD SetForegroundWindow(HWND)'
32
- extern 'LRESULT SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR)'
13
+ begin
14
+ # Load 'user32' dynamic library into this importer
15
+ dlload 'user32'
16
+ # Set C aliases to this importer for further understanding of function signatures
17
+ typealias 'HWND', 'HANDLE'
18
+ typealias 'HANDLE', 'void*'
19
+ typealias 'LPCSTR', 'const char*'
20
+ typealias 'LPCWSTR', 'const wchar_t*'
21
+ typealias 'UINT', 'unsigned int'
22
+ typealias 'ppvObject', 'void**'
23
+ typealias 'DWORD', 'unsigned long'
24
+ typealias 'LPDWORD', 'DWORD*'
25
+ typealias 'PDWORD_PTR', 'DWORD**'
26
+ typealias 'WPARAM', 'UINT*'
27
+ typealias 'LPARAM', 'INT*'
28
+ typealias 'LRESULT', 'DWORD'
29
+ # Import C functions from loaded libraries and set them as module functions
30
+ extern 'DWORD GetWindowThreadProcessId(HWND, LPDWORD)'
31
+ extern 'HWND FindWindowExA(HWND, HWND, LPCSTR, LPCSTR)'
32
+ extern 'DWORD SetForegroundWindow(HWND)'
33
+ extern 'LRESULT SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR)'
34
+ rescue Fiddle::DLError => e
35
+ trace "warning: user32.dll not found: #{e}"
36
+ end
33
37
  end
34
38
 
35
39
  module Oleacc
36
40
  # Extend this module to an importer
37
41
  extend Fiddle::Importer
38
- # Load 'oleacc' dynamic library into this importer
39
- dlload 'oleacc'
40
- # Set C aliases to this importer for further understanding of function signatures
41
- typealias 'HWND', 'HANDLE'
42
- typealias 'HANDLE', 'void*'
43
- typealias 'ppvObject', 'void**'
44
- typealias 'DWORD', 'unsigned long'
45
- typealias 'HRESULT', 'long'
46
- Guid = struct [
47
- 'unsigned long data1',
48
- 'unsigned short data2',
49
- 'unsigned short data3',
50
- 'unsigned char data4[8]'
51
- ]
52
- # Import C functions from loaded libraries and set them as module functions
53
- extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct guid*, ppvObject)'
54
- #typealias 'REFIID', 'struct guid*'
55
- #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, REFIID, ppvObject)'
56
- #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct GUID*, ppvObject)'
57
- #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, void*, ppvObject)'
58
- #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct GUID*, ppvObject)'
42
+ begin
43
+ # Load 'oleacc' dynamic library into this importer
44
+ dlload 'oleacc'
45
+ # Set C aliases to this importer for further understanding of function signatures
46
+ typealias 'HWND', 'HANDLE'
47
+ typealias 'HANDLE', 'void*'
48
+ typealias 'ppvObject', 'void**'
49
+ typealias 'DWORD', 'unsigned long'
50
+ typealias 'HRESULT', 'long'
51
+ Guid = struct [
52
+ 'unsigned long data1',
53
+ 'unsigned short data2',
54
+ 'unsigned short data3',
55
+ 'unsigned char data4[8]'
56
+ ]
57
+ # Import C functions from loaded libraries and set them as module functions
58
+ extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct guid*, ppvObject)'
59
+ #typealias 'REFIID', 'struct guid*'
60
+ #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, REFIID, ppvObject)'
61
+ #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct GUID*, ppvObject)'
62
+ #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, void*, ppvObject)'
63
+ #extern 'HRESULT AccessibleObjectFromWindow(HWND, DWORD, struct GUID*, ppvObject)'
64
+ rescue Fiddle::DLError => e
65
+ trace "warning: oleacc.dll not found: #{e}"
66
+ end
59
67
  end
60
68
 
61
69
  module RobustExcelOle
@@ -348,10 +356,14 @@ module RobustExcelOle
348
356
  sleep 0.1
349
357
  if finishing_living_excel
350
358
  if hwnd
351
- pid_puffer = ' ' * 32
352
- User32::GetWindowThreadProcessId(hwnd, pid_puffer)
353
- pid = pid_puffer.unpack('L')[0]
354
- Process.kill('KILL', pid) rescue nil
359
+ begin
360
+ pid_puffer = ' ' * 32
361
+ User32::GetWindowThreadProcessId(hwnd, pid_puffer)
362
+ pid = pid_puffer.unpack('L')[0]
363
+ Process.kill('KILL', pid) rescue nil
364
+ rescue NoMethodError => e
365
+ # trace "#{e}"
366
+ end
355
367
  end
356
368
  @@hwnd2excel.delete(hwnd)
357
369
  weak_xl.ole_free if weak_xl.weakref_alive?
@@ -414,6 +426,7 @@ module RobustExcelOle
414
426
  # returns running Excel instances
415
427
  # !!! This is work in progress
416
428
  # the approach is currently restricted to visible Excel instances with at least one workbook
429
+ =begin
417
430
  def self.running_excel_instances
418
431
  win32ole_excel_instances = []
419
432
  hwnd = 0
@@ -478,6 +491,8 @@ module RobustExcelOle
478
491
  alias known_excel_instances known_running_instances # :deprecated: #
479
492
  end
480
493
 
494
+ =end
495
+
481
496
  private
482
497
 
483
498
  # returns a Win32OLE object that represents a Excel instance to which Excel connects
@@ -554,15 +569,26 @@ module RobustExcelOle
554
569
 
555
570
  # returns true, if the Excel instances responds to VBA methods, false otherwise
556
571
  def alive?
557
- msg = 0x2008
558
- wparam = 0
559
- lparam = 0
560
- flags = 0x0000 # 0x0002
561
- duration = 5000
562
- lpdw_result_puffer = ' ' * 32
563
- status = User32::SendMessageTimeoutA(hwnd, msg, wparam, lparam, flags, duration, lpdw_result_puffer)
564
- result = lpdw_result_puffer.unpack('L')[0]
565
- status != 0
572
+ begin
573
+ msg = 0x2008
574
+ wparam = 0
575
+ lparam = 0
576
+ flags = 0x0000 # 0x0002
577
+ duration = 5000
578
+ lpdw_result_puffer = ' ' * 32
579
+ status = User32::SendMessageTimeoutA(hwnd, msg, wparam, lparam, flags, duration, lpdw_result_puffer)
580
+ result = lpdw_result_puffer.unpack('L')[0]
581
+ status != 0
582
+ rescue NoMethodError => e
583
+ #trace "#{e}"
584
+ begin
585
+ @ole_excel.Name
586
+ true
587
+ rescue
588
+ # trace $!.message
589
+ false
590
+ end
591
+ end
566
592
  end
567
593
 
568
594
  # returns unsaved workbooks in known (not opened by user) Excel instances
@@ -726,8 +752,12 @@ module RobustExcelOle
726
752
 
727
753
  def focus
728
754
  self.visible = true
729
- status = User32::SetForegroundWindow(@ole_excel.Hwnd)
730
- raise ExcelREOError, "could not set Excel window as foreground" if status == 0
755
+ begin
756
+ status = User32::SetForegroundWindow(@ole_excel.Hwnd)
757
+ raise ExcelREOError, "could not set Excel window as foreground" if status == 0
758
+ rescue NoMethodError => e
759
+ raise ExcelREOError, "could not set Excel window as foreground because user32.dll not found"
760
+ end
731
761
  end
732
762
 
733
763
  # @private
@@ -1,3 +1,3 @@
1
1
  module RobustExcelOle
2
- VERSION = "1.38"
2
+ VERSION = "1.41"
3
3
  end
data/spec/cygwin_spec.rb CHANGED
@@ -10,6 +10,11 @@ include General
10
10
  describe "on cygwin", :if => RUBY_PLATFORM =~ /cygwin/ do
11
11
  describe ".cygpath" do
12
12
  context "cygwin path is '/cygdrive/c/Users'" do
13
+
14
+ context "with white spaces" do
15
+ it { RobustExcelOle::Cygwin.cygpath('-w', '/cygdrive/c/Users of all').should eq 'C:\\Users of all' }
16
+ end
17
+
13
18
  context "with '-w' options" do
14
19
  it { RobustExcelOle::Cygwin.cygpath('-w', '/cygdrive/c/Users').should eq 'C:\\Users' }
15
20
  end
Binary file
Binary file
data/spec/excel_spec.rb CHANGED
@@ -1922,6 +1922,7 @@ module RobustExcelOle
1922
1922
 
1923
1923
  end
1924
1924
 
1925
+ =begin
1925
1926
  describe "known_running_instances" do
1926
1927
 
1927
1928
  it "should return empty list" do
@@ -1952,7 +1953,7 @@ module RobustExcelOle
1952
1953
  end
1953
1954
 
1954
1955
  end
1955
-
1956
+ =end
1956
1957
  context "with hwnd and hwnd2excel" do
1957
1958
 
1958
1959
  before do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: robust_excel_ole
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.38'
4
+ version: '1.41'
5
5
  platform: ruby
6
6
  authors:
7
7
  - traths
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-29 00:00:00.000000000 Z
11
+ date: 2022-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry