/wrappers/shlobj.go

https://github.com/winlabs/gowin32 · Go · 136 lines · 112 code · 9 blank · 15 comment · 0 complexity · 73ff942c9a4b8a0e7ed4fd8b25d09c95 MD5 · raw file

  1. /*
  2. * Copyright (c) 2014-2017 MongoDB, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the license is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package wrappers
  17. import (
  18. "syscall"
  19. "unsafe"
  20. )
  21. const (
  22. CSIDL_DESKTOP = 0x0000
  23. CSIDL_INTERNET = 0x0001
  24. CSIDL_PROGRAMS = 0x0002
  25. CSIDL_CONTROLS = 0x0003
  26. CSIDL_PRINTERS = 0x0004
  27. CSIDL_PERSONAL = 0x0005
  28. CSIDL_FAVORITES = 0x0006
  29. CSIDL_STARTUP = 0x0007
  30. CSIDL_RECENT = 0x0008
  31. CSIDL_SENDTO = 0x0009
  32. CSIDL_BITBUCKET = 0x000a
  33. CSIDL_STARTMENU = 0x000b
  34. CSIDL_MYDOCUMENTS = CSIDL_PERSONAL
  35. CSIDL_MYMUSIC = 0x000d
  36. CSIDL_MYVIDEO = 0x000e
  37. CSIDL_DESKTOPDIRECTORY = 0x0010
  38. CSIDL_DRIVES = 0x0011
  39. CSIDL_NETWORK = 0x0012
  40. CSIDL_NETHOOD = 0x0013
  41. CSIDL_FONTS = 0x0014
  42. CSIDL_TEMPLATES = 0x0015
  43. CSIDL_COMMON_STARTMENU = 0x0016
  44. CSIDL_COMMON_PROGRAMS = 0x0017
  45. CSIDL_COMMON_STARTUP = 0x0018
  46. CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019
  47. CSIDL_APPDATA = 0x001a
  48. CSIDL_PRINTHOOD = 0x001b
  49. CSIDL_LOCAL_APPDATA = 0x001c
  50. CSIDL_ALTSTARTUP = 0x001d
  51. CSIDL_COMMON_ALTSTARTUP = 0x001e
  52. CSIDL_COMMON_FAVORITES = 0x001f
  53. CSIDL_INTERNET_CACHE = 0x0020
  54. CSIDL_COOKIES = 0x0021
  55. CSIDL_HISTORY = 0x0022
  56. CSIDL_COMMON_APPDATA = 0x0023
  57. CSIDL_WINDOWS = 0x0024
  58. CSIDL_SYSTEM = 0x0025
  59. CSIDL_PROGRAM_FILES = 0x0026
  60. CSIDL_MYPICTURES = 0x0027
  61. CSIDL_PROFILE = 0x0028
  62. CSIDL_SYSTEMX86 = 0x0029
  63. CSIDL_PROGRAM_FILESX86 = 0x002a
  64. CSIDL_PROGRAM_FILES_COMMON = 0x002b
  65. CSIDL_PROGRAM_FILES_COMMONX86 = 0x002c
  66. CSIDL_COMMON_TEMPLATES = 0x002d
  67. CSIDL_COMMON_DOCUMENTS = 0x002e
  68. CSIDL_COMMON_ADMINTOOLS = 0x002f
  69. CSIDL_ADMINTOOLS = 0x0030
  70. CSIDL_CONNECTIONS = 0x0031
  71. CSIDL_COMMON_MUSIC = 0x0035
  72. CSIDL_COMMON_PICTURES = 0x0036
  73. CSIDL_COMMON_VIDEO = 0x0037
  74. CSIDL_RESOURCES = 0x0038
  75. CSIDL_RESOURCES_LOCALIZED = 0x0039
  76. CSIDL_COMMON_OEM_LINKS = 0x003a
  77. CSIDL_CDBURN_AREA = 0x003b
  78. CSIDL_COMPUTERSNEARME = 0x003d
  79. CSIDL_FLAG_CREATE = 0x8000
  80. CSIDL_FLAG_DONT_VERIFY = 0x4000
  81. CSIDL_FLAG_UNEXPAND = 0x2000
  82. CSIDL_FLAG_NO_ALIAS = 0x1000
  83. CSIDL_FLAG_PER_USER_INIT = 0x0800
  84. )
  85. const (
  86. SHGFP_TYPE_CURRENT = 0
  87. SHGFP_TYPE_DEFAULT = 1
  88. )
  89. const (
  90. KF_FLAG_CREATE = 0x00008000
  91. KF_FLAG_DONT_VERIFY = 0x00004000
  92. KF_FLAG_DONT_UNEXPAND = 0x00002000
  93. KF_FLAG_NO_ALIAS = 0x00001000
  94. KF_FLAG_INIT = 0x00000800
  95. KF_FLAG_DEFAULT_PATH = 0x00000400
  96. KF_FLAG_NOT_PARENT_RELATIVE = 0x00000200
  97. KF_FLAG_SIMPLE_IDLIST = 0x00000100
  98. KF_FLAG_ALIAS_ONLY = 0x80000000
  99. )
  100. var (
  101. procSHGetFolderPathW = modshell32.NewProc("SHGetFolderPathW")
  102. procSHGetKnownFolderPath = modshell32.NewProc("SHGetKnownFolderPath")
  103. )
  104. func SHGetFolderPath(owner syscall.Handle, folder uint32, token syscall.Handle, flags uint32, path *uint16) uint32 {
  105. r1, _, _ := syscall.Syscall6(
  106. procSHGetFolderPathW.Addr(),
  107. 5,
  108. uintptr(owner),
  109. uintptr(folder),
  110. uintptr(token),
  111. uintptr(flags),
  112. uintptr(unsafe.Pointer(path)),
  113. 0)
  114. return uint32(r1)
  115. }
  116. func SHGetKnownFolderPath(fid *GUID, flags uint32, token syscall.Handle, path **uint16) uint32 {
  117. r1, _, _ := syscall.Syscall6(
  118. procSHGetKnownFolderPath.Addr(),
  119. 4,
  120. uintptr(unsafe.Pointer(fid)),
  121. uintptr(flags),
  122. uintptr(token),
  123. uintptr(unsafe.Pointer(path)),
  124. 0,
  125. 0)
  126. return uint32(r1)
  127. }