Pastey AssocQueryString

include std/dll.e
include std/machine.e 
include std/console.e 
 
constant   
  ASSOCF_NONE                  = #00000, 
  ASSOCF_INIT_NOREMAPCLSID     = #00001, 
  ASSOCF_INIT_BYEXENAME        = #00002, 
  ASSOCF_OPEN_BYEXENAME        = #00002, 
  ASSOCF_INIT_DEFAULTTOSTAR    = #00004, 
  ASSOCF_INIT_DEFAULTTOFOLDER  = #00008, 
  ASSOCF_NOUSERSETTINGS        = #00010, 
  ASSOCF_NOTRUNCATE            = #00020, 
  ASSOCF_VERIFY                = #00040, 
  ASSOCF_REMAPRUNDLL           = #00080, 
  ASSOCF_NOFIXUPS              = #00100, 
  ASSOCF_IGNOREBASECLASS       = #00200, 
  ASSOCF_INIT_IGNOREUNKNOWN    = #00400, 
  ASSOCF_INIT_FIXED_PROGID     = #00800, 
  ASSOCF_IS_PROTOCOL           = #01000, 
  ASSOCF_INIT_FOR_FILE         = #02000 
  
enum   
  ASSOCSTR_COMMAND = 1, 
  ASSOCSTR_EXECUTABLE, 
  ASSOCSTR_FRIENDLYDOCNAME, 
  ASSOCSTR_FRIENDLYAPPNAME, 
  ASSOCSTR_NOOPEN, 
  ASSOCSTR_SHELLNEWVALUE, 
  ASSOCSTR_DDECOMMAND, 
  ASSOCSTR_DDEIFEXEC, 
  ASSOCSTR_DDEAPPLICATION, 
  ASSOCSTR_DDETOPIC, 
  ASSOCSTR_INFOTIP, 
  ASSOCSTR_QUICKTIP, 
  ASSOCSTR_TILEINFO, 
  ASSOCSTR_CONTENTTYPE, 
  ASSOCSTR_DEFAULTICON, 
  ASSOCSTR_SHELLEXTENSION, 
  ASSOCSTR_DROPTARGET, 
  ASSOCSTR_DELEGATEEXECUTE, 
  ASSOCSTR_SUPPORTED_URI_PROTOCOLS, 
  ASSOCSTR_MAX 
   
   
 
atom shwl=open_dll("shlwapi.dll") 
if shwl<0  then 
	puts(1,"shlwapi.dll not found!\n") 
	any_key() 
	abort(1) 
end if 
 
atom getassoc=define_c_func(shwl,"AssocQueryStringA",{C_INT,C_INT,C_POINTER,C_POINTER,C_POINTER,C_POINTER},C_POINTER) 
if getassoc<0  then 
	puts(1,"AssocQueryStringA no found!\n") 
	any_key() 
	abort(1) 
end if 
 
function GetAssoc(atom flag1,atom flag,sequence assoc,sequence extra) 
atom pzbuffer,pbuffer_size 
sequence result 
atom text=allocate_string(assoc) 
atom addon=allocate_string(extra) 
 
	pzbuffer=allocate(260) 
	pbuffer_size=allocate(4) 
	poke4(pbuffer_size,260) 
	poke4(pzbuffer,0) 
		c_func(getassoc,{flag1,flag,text,addon,pzbuffer,pbuffer_size}) 
	result = peek_string(pzbuffer) 
	free(pzbuffer) 
	free(pbuffer_size) 
	free(text) 
	free(addon) 
	return result 
 
end function 
 
puts(1,GetAssoc(ASSOCF_NONE,ASSOCSTR_EXECUTABLE,".png","open")&"\n") 
any_key() 

1. Comment by andi49 Sep 20, 2015

Found this here: http://blogs.msdn.com/b/oldnewthing/archive/2015/09/14/10641381.aspx

Quick'n dirty solution for OE.

Andreas