原文:【C#】获取"我的电脑"的名字,如This PC、这台计算机

版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

注意:这里获取的【我的电脑】的名字,不是机器的名字。如图所示:

要获取的是This PC这个字符串。

-------------------------------------------------------------------

机器的名字可以通过系统属性查看,叫做Computer Name,如下图:

我的就是cn-c-w-725,如果想获取这个字符串直接调用Environment.MachineName就行了。

1.定义ShellAPI类

  1. public static class ShellAPI
  2. {
  3. public const int MAX_PATH = 260;
  4. public const uint CMD_FIRST = 1;
  5. public const uint CMD_LAST = 30000;
  6. public const int S_OK = 0, S_FALSE = 1;
  7. public const int DRAGDROP_S_DROP = 0x00040100;
  8. public const int DRAGDROP_S_CANCEL = 0x00040101;
  9. public const int DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102;
  10. public static int cbFileInfo = Marshal.SizeOf(typeof(SHFILEINFO));
  11. // Retrieves information about an object in the file system,
  12. // such as a file, a folder, a directory, or a drive root.
  13. [DllImport("shell32",
  14. EntryPoint = "SHGetFileInfo",
  15. ExactSpelling = false,
  16. CharSet = CharSet.Auto,
  17. SetLastError = true)]
  18. public static extern IntPtr SHGetFileInfo(
  19. IntPtr ppidl,
  20. FILE_ATTRIBUTE dwFileAttributes,
  21. ref SHFILEINFO sfi,
  22. int cbFileInfo,
  23. SHGFI uFlags);
  24. [DllImport("Shell32",
  25. EntryPoint = "SHGetSpecialFolderLocation",
  26. ExactSpelling = true,
  27. CharSet = CharSet.Ansi,
  28. SetLastError = true)]
  29. public static extern Int32 SHGetSpecialFolderLocation(
  30. IntPtr hwndOwner,
  31. CSIDL nFolder,
  32. out IntPtr ppidl);
  33. // This function takes the fully-qualified pointer to an item
  34. // identifier list (PIDL) of a namespace object, and returns a specified
  35. // interface pointer on the parent object.
  36. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  37. public struct SHFILEINFO
  38. {
  39. public IntPtr hIcon;
  40. public int iIcon;
  41. public SFGAO dwAttributes;
  42. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_PATH)]
  43. public string szDisplayName;
  44. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
  45. public string szTypeName;
  46. }
  47. // Flags that specify the file information to retrieve with SHGetFileInfo
  48. [Flags]
  49. public enum FILE_ATTRIBUTE
  50. {
  51. READONLY = 0x00000001,
  52. HIDDEN = 0x00000002,
  53. SYSTEM = 0x00000004,
  54. DIRECTORY = 0x00000010,
  55. ARCHIVE = 0x00000020,
  56. DEVICE = 0x00000040,
  57. NORMAL = 0x00000080,
  58. TEMPORARY = 0x00000100,
  59. SPARSE_FILE = 0x00000200,
  60. REPARSE_POINT = 0x00000400,
  61. COMPRESSED = 0x00000800,
  62. OFFLINE = 0x00001000,
  63. NOT_CONTENT_INDEXED = 0x00002000,
  64. ENCRYPTED = 0x00004000
  65. }
  66. // The attributes that the caller is requesting, when calling IShellFolder::GetAttributesOf
  67. [Flags]
  68. public enum SFGAO : uint
  69. {
  70. BROWSABLE = 0x8000000,
  71. CANCOPY = 1,
  72. CANDELETE = 0x20,
  73. CANLINK = 4,
  74. CANMONIKER = 0x400000,
  75. CANMOVE = 2,
  76. CANRENAME = 0x10,
  77. CAPABILITYMASK = 0x177,
  78. COMPRESSED = 0x4000000,
  79. CONTENTSMASK = 0x80000000,
  80. DISPLAYATTRMASK = 0xfc000,
  81. DROPTARGET = 0x100,
  82. ENCRYPTED = 0x2000,
  83. FILESYSANCESTOR = 0x10000000,
  84. FILESYSTEM = 0x40000000,
  85. FOLDER = 0x20000000,
  86. GHOSTED = 0x8000,
  87. HASPROPSHEET = 0x40,
  88. HASSTORAGE = 0x400000,
  89. HASSUBFOLDER = 0x80000000,
  90. HIDDEN = 0x80000,
  91. ISSLOW = 0x4000,
  92. LINK = 0x10000,
  93. NEWCONTENT = 0x200000,
  94. NONENUMERATED = 0x100000,
  95. READONLY = 0x40000,
  96. REMOVABLE = 0x2000000,
  97. SHARE = 0x20000,
  98. STORAGE = 8,
  99. STORAGEANCESTOR = 0x800000,
  100. STORAGECAPMASK = 0x70c50008,
  101. STREAM = 0x400000,
  102. VALIDATE = 0x1000000
  103. }
  104. // Used to retrieve directory paths to system special folders
  105. public enum CSIDL
  106. {
  107. ADMINTOOLS = 0x30,
  108. ALTSTARTUP = 0x1d,
  109. APPDATA = 0x1a,
  110. BITBUCKET = 10,
  111. CDBURN_AREA = 0x3b,
  112. COMMON_ADMINTOOLS = 0x2f,
  113. COMMON_ALTSTARTUP = 30,
  114. COMMON_APPDATA = 0x23,
  115. COMMON_DESKTOPDIRECTORY = 0x19,
  116. COMMON_DOCUMENTS = 0x2e,
  117. COMMON_FAVORITES = 0x1f,
  118. COMMON_MUSIC = 0x35,
  119. COMMON_PICTURES = 0x36,
  120. COMMON_PROGRAMS = 0x17,
  121. COMMON_STARTMENU = 0x16,
  122. COMMON_STARTUP = 0x18,
  123. COMMON_TEMPLATES = 0x2d,
  124. COMMON_VIDEO = 0x37,
  125. CONTROLS = 3,
  126. COOKIES = 0x21,
  127. DESKTOP = 0,
  128. DESKTOPDIRECTORY = 0x10,
  129. DRIVES = 0x11,
  130. FAVORITES = 6,
  131. FLAG_CREATE = 0x8000,
  132. FONTS = 20,
  133. HISTORY = 0x22,
  134. INTERNET = 1,
  135. INTERNET_CACHE = 0x20,
  136. LOCAL_APPDATA = 0x1c,
  137. MYDOCUMENTS = 12,
  138. MYMUSIC = 13,
  139. MYPICTURES = 0x27,
  140. MYVIDEO = 14,
  141. NETHOOD = 0x13,
  142. NETWORK = 0x12,
  143. PERSONAL = 5,
  144. PRINTERS = 4,
  145. PRINTHOOD = 0x1b,
  146. PROFILE = 40,
  147. PROFILES = 0x3e,
  148. PROGRAM_FILES = 0x26,
  149. PROGRAM_FILES_COMMON = 0x2b,
  150. PROGRAMS = 2,
  151. RECENT = 8,
  152. SENDTO = 9,
  153. STARTMENU = 11,
  154. STARTUP = 7,
  155. SYSTEM = 0x25,
  156. TEMPLATES = 0x15,
  157. WINDOWS = 0x24
  158. }
  159. // Defines the values used with the IShellFolder::GetDisplayNameOf and IShellFolder::SetNameOf
  160. // methods to specify the type of file or folder names used by those methods
  161. // Flags that specify the file information to retrieve with SHGetFileInfo
  162. [Flags]
  163. public enum SHGFI : uint
  164. {
  165. ADDOVERLAYS = 0x20,
  166. ATTR_SPECIFIED = 0x20000,
  167. ATTRIBUTES = 0x800,
  168. DISPLAYNAME = 0x200,
  169. EXETYPE = 0x2000,
  170. ICON = 0x100,
  171. ICONLOCATION = 0x1000,
  172. LARGEICON = 0,
  173. LINKOVERLAY = 0x8000,
  174. OPENICON = 2,
  175. OVERLAYINDEX = 0x40,
  176. PIDL = 8,
  177. SELECTED = 0x10000,
  178. SHELLICONSIZE = 4,
  179. SMALLICON = 1,
  180. SYSICONINDEX = 0x4000,
  181. TYPENAME = 0x400,
  182. USEFILEATTRIBUTES = 0x10
  183. }
  184. }

2.调用输出显示

  1. static void Main(string[] args)
  2. {
  3. IntPtr tempPidl;
  4. ShellAPI.SHFILEINFO info;
  5. //My Computer
  6. info = new ShellAPI.SHFILEINFO();
  7. tempPidl = IntPtr.Zero;
  8. ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, ShellAPI.CSIDL.DRIVES, out tempPidl);
  9. ShellAPI.SHGetFileInfo(tempPidl, 0, ref info, ShellAPI.cbFileInfo,
  10. ShellAPI.SHGFI.PIDL | ShellAPI.SHGFI.DISPLAYNAME | ShellAPI.SHGFI.TYPENAME);
  11. string sysfolderName = info.szTypeName;
  12. string mycompName = info.szDisplayName;
  13. Console.WriteLine(sysfolderName + "------" + mycompName);
  14. Console.WriteLine(Environment.MachineName);
  15. Console.Read();
  16. }

mycompName就是我们想要的值.

3.再介绍一个用winform编写的功能很强大的文件管理器。与自带的差不多,调用了系统的Shell api,可以获取到特殊路径的名称,对于没有权限操作的文件会进行动态请求。如图:

CodeProject地址

如果打不开,请去csdn下载

进阶-参考另外一篇文章《【C#】WindowsAPICodePack-Shell使用教程》,地址:http://blog.csdn.net/catshitone/article/details/72723927

【C#】获取"我的电脑"的名字,如This PC、这台计算机的更多相关文章

  1. 【C#】获取"我的电脑"的名字,如This PC、这台计算机

    原文:[C#]获取"我的电脑"的名字,如This PC.这台计算机 注意:这里获取的[我的电脑]的名字,不是机器的名字.如图所示: 要获取的是This PC这个字符串. ----- ...

  2. linux,shell脚本中获取脚本的名字,使用脚本的名字。

    需求描述: 写shell脚本的过程中,有时会需要获取脚本的名字,比如,有的时候,脚本 中会有usage()这种函数,可能就会用到脚本的名字. 实现方法: shell脚本中,通过使用$0就可以获取到脚本 ...

  3. js获取本机mac地址,IP地址,计算机名

    <!DOCTYPE HTML> <html> <head> <title>js获取本机mac地址,IP地址,计算机名</title> < ...

  4. 如何获取ios 设备名字 model

    由于需要获取设备名字,在网上找了一些方法,发现能够解决问题,但是需要做一个匹配,然后设备年年都会出新款,而且设备的种类又很多,所以在获取设备信息后我又做了一个操作,--->我在google上找到 ...

  5. Android编程实例-获取当前进程名字

    下面代码是根据进程id获取进程名字: /** * 根据Pid获取当前进程的名字,一般就是当前app的包名 * * @param context 上下文 * @param pid 进程的id * @re ...

  6. 获取网页是手机端还是PC端访问

    C#方式: /// <summary> /// 是否手机访问 /// </summary> /// <returns></returns> public ...

  7. 配置idea中类头注释中的 ${user} 自动获取电脑的名字,怎么去修改名字

    在idea安装路径下找到 idea\IntelliJ IDEA 2018.3.2\bin下面有一个文件叫:idea64.exe.vmoptions 编辑此文件就能修改主时钟自动获取的名称: 例如:添加 ...

  8. Python 获取一个对象的名字

    Note: 这里的对象是广义的,一个列表也算 有name的不在讨论之列, 因为可以直接输出 没有name的,可以参考如下代码,使用到的是globals() except_word是用于过滤掉那些不想要 ...

  9. java获取中问名字的首字母

    public class FirstLetterUtil { private static int BEGIN = 45217; private static int END = 63486; // ...

随机推荐

  1. UNIX标准C - socket套接字

    一.计算机网络 1.计算机网络的功能 a.数据通信 b.资源共享 c.提高系统的可靠性 d.分布式网络处理和负载均匀. 2.计算机网络的组成 1.通信子网:由网卡.线缆.集线器.中继器.交换器.路由器 ...

  2. Python稀疏矩阵运算

    import numpy as np import scipy import time import scipy.sparse as sparse t = [1]+[0]*4999 a = scipy ...

  3. 设置获取data-*属性值

    html代码如下: <div id="getId" data-id="122" data-vice-id="11">获取id&l ...

  4. Sublime Text3的Package Control安装教程,及报错解决There Are No Packages Available For Installation

    一.Package Control的安装 Sublime 有很多插件,这些插件为我们写python代码提供了非常强大的功能,这些插件需要单独安装.而安装这些插件最方便的方法就是通过Package Co ...

  5. SpringBoot项目的几种创建方式,启动、和访问

    最常用的4种方式,但除了这些以外,还有其他方式: ①在线创建 ②STS构建 ③Intell  Idea内置构建工具 ④Maven创建 STS官网:https://start.spring.io  .S ...

  6. React Native商城项目实战04 - 封装TabNavigator.Item的创建

    1.Main.js /** * 主页面 */ import React, { Component } from 'react'; import { StyleSheet, Text, View, Im ...

  7. python2与3自由切换

    Ubuntu-.04Python2与Python3自由切换 阅读目录(Content) 一.配置ssh链接 二.安装Python3及pip3 三.将Python3设置为默认 python2切换pyth ...

  8. 【洛谷T89359 扫雷】

    题目链接 这个题有一个十分简单的做法 我们可以考虑位运算 按位异或(^) 异或,英文为exclusive OR,缩写成xor 异或(xor)是一个数学运算符.它应用于逻辑运算.异或的数学符号为“⊕”, ...

  9. Visual Studio Code - 同步代码时使用 rebase

    打开设置 设置"git.rebaseWhenSync": true

  10. CSS3—— 2D转换 3D转换 过渡 动画

    2D转换 对元素进行移动.缩放.转动.拉长或拉伸 ————>  ————>   移动 顺时针旋转 扩大/缩小 倾斜 2D变换合并  3D转换 绕x轴 绕y轴 过渡 从一种样式逐渐改变为另一 ...