Hola, hace unos días que vengo con esta función que intenta listar los programas por defecto dedicados a una tares determinada.
Hice la función porque en algunas ocasiones cuando en gambas enviaba una orden de abrir un directorio sucedía otra cosa distinta a abrir el directorio en el gestor de archivos.
Así que les acerco la funcion por si tal vez les resulta de utilidad.
Código:
'' This function list all the .desktop applications in the directory /usr/share/applications which are asociated to al the mimetypes in the frirst argument and optionally is possible filter by category.
Static Public Function DeskApp2(aMimeType As String[], Optional aCategories As String[]) As DesktopFile[]
Dim oTemp As DesktopFile[]
Dim oDsk As New DesktopFile[]
Dim oDsk2 As New DesktopFile[]
Dim dsk As DesktopFile
Dim sDef As String
Dim ad As New String[]
Dim sMime As String
Dim sApps As String
Dim xapp As DesktopFile
Dim mk As String
Dim sKat As String
Dim sl As String
Dim sApp As String
If aMimeType.Count Then
For Each mk In aMimeType
oTemp = DesktopFile.FromMime(mk)
For Each dsk In oTemp
If aCategories.Count Then
For Each sKat In aCategories
If dsk.Categories.Exist(sKat) Then
oDsk.Add(dsk)
Break
Endif
Next
Else
Endif
Next
Next
Endif
Select Desktop.Type
Case "KDE"
sDef = User.Home &/ ".config/kde-mimeapps.list"
Case "LXQT"
sDef = User.Home &/ ".config/lxqt-mimeapps.list"
Case "GNOME", "MATE", "ENLIGHTENMENT", "WINDOWMAKER", "XFCE"
sDef = User.Home &/ ".config/mimeapps.list"
End Select
If Exist(sDef) Then
Select Stat(sDef).Type
Case gb.File, gb.Link
ad = Split(File.Load(sDef), "\n")
If ad.Count > 0 Then
For Each sl In ad
If InStr(sl, "=") > 0 Then
sMime = Split(sl, "=")[0]
sApps = Split(sl, "=")[1]
If InStr(sApps, ";") Then
For Each sApp In Split(sApps, ";")
If sApp <> "" Then
For Each xapp In oDsk
If File.Name(xapp.Path) = sApp Then
oDsk2.Add(xapp)
Endif
Next
Endif
Next
Endif
Endif
Next
Endif
End Select
For Each xapp In oDsk
If Not oDsk2.Exist(xapp) Then
oDsk2.Add(xapp)
Endif
Next
Else
oDsk2 = oDsk
Endif
Return oDsk2
End
Para llamar la función hay dos parámetros que se le deben pasar, mas bien uno solo, el segundo es opcional pero en ocasiones es necesario si se desea filtrar aplicaciones que no pintan nada en el asunto.
Por ejemplo yo tenia que abrir un directorio en el gestor de archivos y aparecía EasyTag, el programa de edición de metadatos de los mp3.
Código:
o = System.DeskApp2(["text/plain"], ["TextEditor"]) ' Con esto llamo la funcion, le paso los parametros en forma de 2 String[] y luego con la lista de objetos puedo obtener los datos
Print o[0].ProgramName
Print o[0].Name