robust_excel_ole 1.38 → 1.41

Sign up to get free protection for your applications and to get access to all the features.
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