From: Arihan Sinha Date: 2010-10-20T19:40:54+09:00 Subject: delete the browser cache of IE through ruby Dear All, I want to delete the browser cache of IE through ruby. I am using IE7.0/IE9.0 in win7 platform. I got the below code but its bit confusing . so can anyone pls guide what exactly needs to be done/ method to be called so that I can use it. Temporary IE file location is :- '/Users/'+ENV['USERNAME']+'/AppData/Local/Microsoft/Windows/Temporary Internet Files/' ################################################ #!/bin/ruby # # # # # # set TEMPIF=%USERPROFILE%\Local Settings\Temporary Internet Files # %TEMPIF%\Content.IE5\Index.DAT require 'Win32API' # # # HashMethods = a Hash that can be accessed with methods # e.g. h = MethodHash.new # h['street'] = 'Broadway' # h.street = 'Broadway' # puts h.street ===> Broadway require 'delegate' #TEMPIF = '/Users/'+ENV['USERNAME']+'/AppData/Local/Microsoft/Windows/Temporary Internet Files' # #puts Dir.glob('/Users/'+ENV['USERNAME']+'/AppData/Local/Microsoft/Windows/Temporary Internet Files/Content.IE5/*') class MethodHash < SimpleDelegator def initialize h = {} super h end def method_missing(method_name, *args) name = method_name.to_s if name.ends_with?('=') self[ name.chop ] = args[0] else self[ name ] end end end class String def ends_with?(substr) len = substr.length self.reverse() [0 .. len-1].reverse == substr end def starts_with?(substr) len = substr.length self[0 .. len-1] == substr end alias start_with? starts_with? alias begin_with? starts_with? alias begins_with? starts_with? alias end_with? ends_with? # String each() operator reads line-by-line # These functions return characters def each_char self.each_byte{|x| yield x.chr } end def collect_char r = [] self.each_byte{|x| r << x.chr } r end end def main w = get_api('wininet',FUNCS) i = 0 info,infosize = get_first_info(w) cache = w.FindFirstUrlCacheEntry.Call(nil,info,infosize) if cache != 0 begin len, source_file_ptr, local_file_ptr = info.unpack 'LLL' w.DeleteUrlCacheEntry.Call(source_file_ptr) i += 1 info,infosize = get_next_info( w, cache ) end while w.FindNextUrlCacheEntry.Call(cache, info, infosize) != 0 end w.FindCloseUrlCache.Call(cache) i end def get_first_info(api) sizenum = [0,0].pack('L*') buf = [1024,0].pack('L*').ljust(1024) r = api.FindFirstUrlCacheEntry.Call(nil,nil,sizenum) n = sizenum.unpack('L')[0] info = sizenum.ljust(n) [info,sizenum] end def get_next_info(api, handle) sizenum = [0,0].pack('L*') buf = [1024,0].pack('L*').ljust(1024) r = api.FindNextUrlCacheEntry.Call(handle,nil,sizenum) n = sizenum.unpack('L')[0] info = sizenum.ljust(n) [info,sizenum] end # # Win32 API used in this file is listed here. # Each system call can be instatiated like this # DeleteUrlCacheEntry = Win32API.new("wininet", "DeleteUrlCacheEntry", ['P'], 'V') # Instead, the functions are defined dynamically from this list: # FUNCS = { 'FindFirstUrlCacheEntry' => ['ppp','n'], 'FindNextUrlCacheEntry' => ['npp','n'], 'DeleteUrlCacheEntry' => ['n', 'n'], 'FindCloseUrlCache' => ['n', 'n'] } # # get_api returns a hash with Win32 API system calls # Usage: # api = get_api('Kernel32', {'GetLastError'=>['V', 'N'],...}) # def get_api(library, function_hash) f = MethodHash.new function_hash.each{|funcname,types| in_types = types[0].collect_char{|x| x} out_type = types[1] f[funcname] = Win32API.new(library, funcname, in_types, out_type) } f end def getLastError f = Win32API.new('Kernel32', 'GetLastError', ['V'], 'N') f.call end if __FILE__ == $0 n = main print "Deleted #{n} items\n" end ########################################### -- Posted via http://www.ruby-forum.com/.