Top > OOobbs2 > 107

OOobbs2/107 Edit

  • サマリ: Shell でファイルを環境に応じたプログラムで開く
  • 環境: Basic
  • 状態: 解決
  • 投稿者: はにゃ??
  • 投稿日: 2008-05-27 (Tue) 23:44:08

質問 Edit

ある拡張機能の機能で要望をいただいたのですが、無理そうと思っていたところ環境変数を取得すればなんとかなりそうというわけで、試して見たところディストリビューション依存性が強いらしいことが分かりました。

いろんな種類のファイルを Shell ランタイム関数を利用して、環境に応じたアプリケーションで開こうと目論んでいます。

とりあえず、手持ちの環境で次のようにしてみました。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
Sub ShellOpenFile( sOpenFile As String, Optional sOpenClient As String )
  
  If IsMissing( sOpenClient ) OR sOpenClient = "" Then
    sOpenClient = GetOpenClient()
  End If
  
  Shell(sOpenClient,0,sOpenFile)
End Sub
 
 
Function GetOpenClient()
  
  Select Case GetPathSeparator()
  Case chr(&H5C) ' win env
    GetOpenClient = "rundll32.exe url.dll,FileProtocolHandler "
    Exit Function
    
  Case "/" ' 
    
    Dim sDesktopType As String
    
    sDesktopType = Environ("KDE_FULL_SESSION")
    If LCase(sDesktopType) = "true" Then
      ' kde
      GetOpenClient = "kfmclient exec"
      Exit Function
    End If
    
    sDesktopType = Environ("GNOME_DESKTOP_SESSION_ID")
    If sDesktopType <> "" Then
      ' gnome
      GetOpenClient = "gnome-open"
      Exit Function
    End If
    
    sDesktopType = Environ("DESKTOP_SESSION")
    If LCase(Left(sDesktopType,4)) = "xfce" Then
      ' xfce
      GetOpenClient = "exo-open"
      Exit Function
    End If
    
    If sDesktopType = "" Then
      sDesktopType = Environ("GDMSESSION")
      
      If sDesktopType <> "" Then
        GetOpenClient = GetOpenClient()
        Exit Function
      End If
    End If
    
    If LCase(sDesktopType) = "default" Then
      sDesktopType = "xdg-open"
    End If
    
    If sDesktopType = "" Then
      ' 
      GetOpenClient = "open"
      Exit Function
    Else
     ' xdg-open
      GetOpenClient = "xdg-open"
      Exit Function
    End If
  End Select
End Function
環境コマンド
Winrundll32.exe url.dll,FileProtocolHandler
gnomegnome-open
kdekfmclient exec
kde4kioclient exec
xfceexo-open
--xdg-open
Mac OS Xopen

回答 Edit

  • 最終的に上記のように変更。自動で選択するには限界がありすぎるので、ウィザードで環境を選択させることに。選択されていない場合のみ調べるように。ディストリビューションによって違いすぎるので、完。-- はにゃ? &new([nodate]){date}: Invalid date string;

感想,コメント,メモ Edit



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes