Class: Win32::WindowManager

Inherits:
Object
  • Object
show all
Defined in:
lib/Win32/WindowManager.rb

Defined Under Namespace

Classes: Window

Constant Summary collapse

TRUE =
1

Instance Method Summary collapse

Constructor Details

#initializeWindowManager

Returns a new instance of WindowManager.



77
78
79
80
81
82
83
84
85
86
87
# File 'lib/Win32/WindowManager.rb', line 77

def initialize
  get_task_bar_window

  @buff = " " * 16
  @windows = {}

  @enum_windows_proc = DL.callback('ILL') do |hwnd,lparam|
    @window_handles.push(hwnd)
     TRUE
  end
end

Instance Method Details

#get_all_windows(get_not_visible_windows = false, test = false) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/Win32/WindowManager.rb', line 117

def get_all_windows(get_not_visible_windows=false,test=false)

  #if !@enum_windows_proc then

  #end

  @buff = " " * 16
  @windows = {}
  @window_handles = []
  @test = test
  @get_not_visible_windows = get_not_visible_windows
  
  r,rs = EnumWindows.call(@enum_windows_proc, 0)

  process_window_handles(@window_handles, test) #if !test

  return @windows
end

#get_top_window(windows) ⇒ Object



133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/Win32/WindowManager.rb', line 133

def get_top_window(windows)
  get_all_windows.each_key do |hwnd|
    top_window = hwnd
    sub_windows = []
    #puts "#{top_window}: "

    while true
      hwnd, rs = GetWindow.call(hwnd, GW_HWNDPREV)
      break if hwnd == NULL
      #puts "   #{hwnd}"

      sub_windows.push(hwnd) if windows.has_key?(hwnd)
    end
    #puts "#{top_window}: " + sub_windows.join(",")

    return top_window if sub_windows == []
  end
  return 0
end

#hide_window(window_handle) ⇒ Object



150
151
152
153
154
155
156
157
158
# File 'lib/Win32/WindowManager.rb', line 150

def hide_window(window_handle)
  $TRACE.debug 5, "@hwnd_task_list = #{@hwnd_task_list}"
  $TRACE.debug 5, "@shell_hook_message = #{@shell_hook_message}"
  $TRACE.debug 5, "window_handle = #{window_handle}"
  
  SendMessage.call(@hwnd_task_list, @shell_hook_message, 2, window_handle)
#   ShowWindow.call(window_handle, SW_SHOWMINNOACTIVE)

  ShowWindow.call(window_handle, SW_HIDE)
end

#iconic?(window_handle) ⇒ Boolean

Returns:

  • (Boolean)


170
171
172
173
# File 'lib/Win32/WindowManager.rb', line 170

def iconic?(window_handle)
  r, rs = IsIconic.call(window_handle)
  r == TRUE
end

#process_window_handles(window_handles, test) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/Win32/WindowManager.rb', line 89

def process_window_handles(window_handles, test)
  window_handles.each do |hwnd|
    #style, rs = GetWindowLong.call(hwnd, GWL_STYLE)

    #ex_style, rs = GetWindowLong.call(hwnd, GWL_EXSTYLE)

    #owner, rs = GetWindow.call(hwnd, GW_OWNER)

    style = GetWindowLong_2.call(hwnd, GWL_STYLE)
    ex_style = GetWindowLong_2.call(hwnd, GWL_EXSTYLE)
    owner = GetWindow_2.call(hwnd, GW_OWNER)

    # if the window is visible AND

    #    its NOT a tool window with no parent

    #r,rs = GetClassName.call(hwnd, @buff, @buff.size)

    #class_name = rs[1]

    GetClassName_2.call(hwnd, @buff, @buff.size)
    class_name = @buff.dup
    if !(((ex_style & WS_EX_TOOLWINDOW) != 0) && (owner == NULL)) then
      if ((style & WS_VISIBLE) != 0) || @get_not_visible_windows then
        # ignore Kapsules main window

        next if (/WindowsForms10/.match(class_name))
        
        @windows[hwnd] = Window.create(hwnd, style, ex_style, class_name, owner, self)
        $TRACE.debug 7, sprintf("%d, rs[1] = '%s', style = %8.8x, ex_style = %8.8x, owner = %d\n",
                      hwnd, class_name, style, ex_style, owner)
      end
    end
  end
end

#show_window(window_handle, is_iconic) ⇒ Object



160
161
162
163
164
165
166
167
168
# File 'lib/Win32/WindowManager.rb', line 160

def show_window(window_handle, is_iconic)
  SendMessage.call(@hwnd_task_list, @shell_hook_message, 1, window_handle)
  if is_iconic then
    ShowWindow.call(window_handle, SW_SHOWMINNOACTIVE)
  else
    ShowWindow.call(window_handle, SW_SHOWNOACTIVATE)
  end
#   ShowWindow.call(window_handle, SW_SHOW)

end