- サマリ: Shell でファイルを環境に応じたプログラムで開く
- 環境: Basic
- 状態: 解決
- 投稿者: はにゃ??
- 投稿日: 2008-05-27 (Tue) 23:44:08
質問 
ある拡張機能の機能で要望をいただいたのですが、無理そうと思っていたところ環境変数を取得すればなんとかなりそうというわけで、試して見たところディストリビューション依存性が強いらしいことが分かりました。
いろんな種類のファイルを 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
|
環境 | コマンド |
Win | rundll32.exe url.dll,FileProtocolHandler |
gnome | gnome-open |
kde | kfmclient exec |
kde4 | kioclient exec |
xfce | exo-open |
-- | xdg-open |
Mac OS X | open |
回答 
- 最終的に上記のように変更。自動で選択するには限界がありすぎるので、ウィザードで環境を選択させることに。選択されていない場合のみ調べるように。ディストリビューションによって違いすぎるので、完。-- はにゃ? &new([nodate]){date}: Invalid date string;
感想,コメント,メモ 