lib/delphivm/ide_services.rb in delphivm-0.7.4 vs lib/delphivm/ide_services.rb in delphivm-0.7.7

- old
+ new

@@ -1,8 +1,16 @@ # encoding: UTF-8 -SendMessageTimeout = Win32API.new('user32', 'SendMessageTimeout', 'LLLPLLP', 'L') +require 'fiddle' +require 'fiddle/import' + +module User32 + extend Fiddle::Importer + dlload 'user32' + extern 'long SendMessageTimeout(long, long, long, void*, long, long, void*)' +end + HWND_BROADCAST = 0xffff WM_SETTINGCHANGE = 0x001A SMTO_ABORTIFHUNG = 2 class Delphivm @@ -133,20 +141,21 @@ self.class.say(msg) end def self.ide_paths(idetag=nil) result = [] - @reg = Win32::Registry::HKEY_CURRENT_USER - IDEInfos.each { |key, data| - @reg.open(data[:regkey]) {|r| result << 'RootDir' } if idetag.nil? || idetag.to_s == key - } + IDEInfos.each { |key, info| + Win32::Registry::HKEY_CURRENT_USER.open(info[:regkey]){|r| + result << r['RootDir'] if (idetag.nil? || idetag.to_s == key) + } rescue true + } result end def self.winpath=(path) Win32::Registry::HKEY_CURRENT_USER.open('Environment', Win32::Registry::KEY_WRITE) do |r| r['PATH'] = path end - SendMessageTimeout.call(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', SMTO_ABORTIFHUNG, 5000, 0) + User32.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 'Environment', SMTO_ABORTIFHUNG, 5000, 0) end end end \ No newline at end of file