Решена Способы запуска приложений с использованием CLSID

Тема в разделе "Реестр Microsoft Windows", создана пользователем Dragokas, 15 дек 2013.

  1. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Давайте дополним статью: http://safezone.cc/threads/nemnogo-o-clsid.20444/
    и немного здесь: http://safezone.cc/threads/izuchaem-skrytye-vozmozhnosti-windows-7.5422/
    и здесь http://safezone.cc/threads/sekrety-windows-7-kak-rabotaet-rasshirennaja-panel-upravlenija.11460/

    Информации очень мало.
    Мои дополнения:
    (честно говоря сильно не вдавался в чтение). Только пощупал реестр и справочники и Google.

    Способы использования CLSID (GUID)

    1) создание новой папки с именем Любое Имя.{GUID}
    2) через ПУСК -> Выполнить
    Код (DOS):
    explorer ::{GUID}
    explorer Shell:::{GUID}
    3) через ПУСК -> набрать в строке поиска:
    Код (Text):
    shell:::{GUID}
    (обратите внимание на разное кол-во знаков : )
    3.1.) используя псевдоним:
    Код (Text):
    shell:псевдоним
    4) Используя AppUserModelID.
    Код (Text):
    explorer.exe shell:Путь\[App.UserModel.ID]
    например:
    Код (Text):
    explorer.exe shell:AppsFolder\Microsoft.Windows.Spartan_cw5n1h2txyewy!Microsoft.Spartan.Spartan
    App.UserModel.ID можно узнать, введя:
    Код (Text):
    shell:AppsFolder
    Нажать левый ALT, View -> Choose details... -> отметить галкой "AppUserModelID"
    Выбрать вид папки -> Таблица.
    Подробнее в этой статье:
    Exclusive: How to start a Modern app from desktop without going to the Metro Start Screen

    Синим отмечены папки, которые появились в Windows 8.

    Объект (псевдоним) Ключ CLSID (GUID)
    1 Action Center {BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6}
    2 Add Features {BE122A0E-4503-11DA-8BDE-F66BAD1E3F3A}
    3 Add Network Location {D4480A50-BA28-11d1-8E75-00C04FA31A86}
    4 Administrative Tools {D20EA4E1-3957-11d2-A40B-0C5020524153}
    5 Advanced User Accounts (netplwiz) {7A9D77BD-5403-11d2-8785-2E0420524153}
    6 Applications {4234d49b-0245-4df3-b780-3893943456e1}
    7 AutoPlay {9C60DE1E-E5FC-40f4-A487-460851A8D915}
    8 Biometric Devices {0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
    9 BitLocker Drive Encryption {D9EF8727-CAC2-4e60-809E-86F80A666C91}
    10 Bluetooth Devices {28803F59-3A75-4058-995F-4EE5503B023C}
    11 Briefcase {85BBD920-42AO-1069-A2E4-08002B30309D}
    12 Color Management {B2C761C6-29BC-4f19-9251-E6195265BAF1}
    13 Command Folder {437ff9c0-a07f-4fa0-af80-84b6c6440a16}
    14 Common Places FS Folder {d34a6ca6-62c2-4c34-8a7c-14709c1ad938}
    15 Computer (This PC) {20d04fe0-3aea-1069-a2d8-08002b30309d}
    16 Connect To {38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
    17 Control Panel {5399E694-6CE5-4D6C-8FCE-1D8870FDCBA0}
    18 Control Panel (All Settings) {F90C627B-7280-45DB-BC26-CCE7BDD620A4}
    19 Control Panel (All Tasks) {ED7BA470-8E54-465E-825C-99712043E01C}
    20 Control Panel (Category view) {26EE0668-A00A-44D7-9371-BEB064C98683}
    21 Control Panel (Icons view) {21EC2020-3AEA-1069-A2DD-08002B30309D}
    22 Credential Manager {1206F5F1-0569-412C-8FEC-3204630DFB70}
    23 Date and Time {E2E7934B-DCE5-43C4-9576-7FE4F75E7480}
    24 Default Programs {17cd9488-1228-4b2f-88ce-4298e93e0966} or
    25 {E44E5D18-0652-4508-A4E2-8A090067BCB0}
    26 delegate folder that appears in Computer {b155bdf8-02f0-451e-9a26-ae317cfd7779}
    27 Desktop folder {B4BFCC3A-DB2C-424C-B029-7FE99A87C641}
    28 Device Manager {74246bfc-4c96-11d0-abef-0020af6b0b7a}
    29 Devices and Printers {A8A91A66-3A7D-4424-8D24-04E180695C7A}
    30 Display {C555438B-3C23-4769-A71F-B6D3D9B6053A}
    31 Documents folder {A8CDFF1C-4878-43be-B5FD-F8091C1C60D0}
    32 Ease of Access Center {D555645E-D4F8-4c29-A827-D93C859C4F2A}
    33 E-mail (default program) {2559a1f5-21d7-11d4-bdaf-00c04f60b9f0}
    34 Family Safety {96AE8D84-A250-4520-95A5-A47A7E3C548B}
    35 Favorites {323CA680-C24D-4099-B94D-446DD2D7249E}
    36 File History {F6B6E965-E9B2-444B-9286-10C9152EDBC5}
    37 Folder Options {6DFD7C5C-2451-11d3-A299-00C04F8EF6AF}
    38 Font Settings {93412589-74D4-4E4E-AD0E-E0CB621440FD}
    39 Fonts {BD84B380-8CA2-1069-AB1D-08000948534}
    40 Games Explorer {ED228FDF-9EA8-4870-83b1-96b02CFE0D52}
    41 Get Programs {15eae92e-f17a-4431-9f28-805e482dafd4}
    42 Help and Support {2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}
    43 HomeGroup {6785BFAC-9D2D-4be5-B7E2-59937E8FB80A} or
    44 {67CA7650-96E6-4FDD-BB43-A8E774F73A57} or
    45 {B4FB3F98-C1EA-428d-A78A-D1F5659CBA93}
    46 Hyper-V Remote File Browsing {0907616E-F5E6-48D8-9D61-A91C3D28106D}
    47 Indexing Options {87D66A43-7B11-4A28-9811-C86EE395ACF7}
    48 Infared {A0275511-0E86-4ECA-97C2-ECD8F1221D08}
    49 Installed Updates {d450a8a1-9568-45c7-9c0e-b4f9fb4537bd}
    50 Internet Explorer (default browser) {871C5380-42A0-1069-A2EA-08002B30309D}
    51 Internet Options {A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE}
    52 Keyboard Properties {725BE8F7-668E-4C7B-8F90-46BDB0936430}
    53 Language Settings {BF782CC9-5A52-4A17-806C-2A894FFEEAC5}
    54 Libraries {031E4825-7B94-4dc3-B131-E946B44C8DD5}
    55 Location Sensors {E9950154-C418-419e-A90A-20C5287AE24B}
    56 Media Servers {289AF617-1CC3-42A6-926C-E6A863F0E3BA}
    57 Mobility Center {5ea4f148-308c-46d7-98a9-49041b1dd468}
    58 Mouse Properties {6C8EEC18-8D75-41B2-A177-8831D59D2D50}
    59 Music folder {1CF1260C-4DD0-4ebb-811F-33C572699FDE}
    60 Network {F02C1A0D-BE21-4350-88B0-7367FC96EF3C}
    61 Network and Sharing Center 8E908FC9-BECC-40f6-915B-F4CA0E70D03D}
    62 Network Connections {7007ACC7-3202-11D1-AAD2-00805FC1270E} or
    63 {992CFFA0-F557-101A-88EC-00DD010CCC48}
    64 Networks Flyout (Connect To) {38A98528-6CBF-4CA9-8DC0-B1E1D10F7B1B}
    65 Network (WorkGroup) {208D2C60-3AEA-1069-A2D7-08002B30309D}
    66 Notification Area Icons {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
    67 NVIDIA Control Panel (if installed) {0bbca823-e77d-419e-9a44-5adec2c8eeb0}
    68 Offline Files Folder {AFDB1F70-2A4C-11d2-9039-00C04F8EEB3E}
    69 Pen and Touch {F82DF8F7-8B9F-442E-A48C-818EA735FF9B}
    70 Performance Information and Tools (WEI) {78F3955E-3B90-4184-BD14-5397C15F1EFC}
    71 Personalization {ED834ED6-4B5A-4bfe-8F11-A626DCB6A921}
    72 Phone & Modem "Location Information" {40419485-C444-4567-851A-2DD7BFA1684D}
    73 Pictures folder {3ADD1653-EB32-4cb0-BBD7-DFA0ABB5ACCA}
    74 Portable Devices {35786D3C-B075-49b9-88DD-029876E11C01}
    75 Power Options {025A5937-A6BE-4686-A844-36FE4BEC8B6D}
    76 Previous Versions Results Folder {f8c2ab3b-17bc-41da-9758-339d7dbf2d88}
    77 printhood delegate folder {ed50fc29-b964-48a9-afb3-15ebb9b97f36}
    78 Printers {2227A280-3AEA-1069-A2DE-08002B30309D} or
    79 {863aa9fd-42df-457b-8e4d-0de1b8015c60}
    80 Programs and Features {7b81be6a-ce2b-4676-a29e-eb907a5126c5}
    81 Programs Folder {7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
    82 Programs Folder and Fast Items {865e5e76-ad83-4dca-a109-50dc2113ce9a}
    83 Public Folder {4336a54d-038b-4685-ab02-99bb52d3fb8b}
    84 Recent Places {22877a6d-37a1-461a-91b0-dbda5aaebc99}
    85 Recovery {9FE63AFD-59CF-4419-9775-ABCC3849F861}
    86 Recycle Bin {645FF040-5081-101B-9F08-00AA002F954E}
    87 Region and Language {62d8ed13-c9d0-4ce8-a914-47dd628fb1b0}
    88 RemoteApp and Desktop Connections {241D7C96-F8BF-4F85-B01F-E2B043341A4B}
    89 Removable Storage Devices {a6482830-08eb-41e2-84c1-73920c2badb9}
    90 Results Folder {2965e715-eb66-4719-b53f-1672673bbefa}
    91 Run {2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
    92 Search Apps {2559a1f8-21d7-11d4-bdaf-00c04f60b9f0}
    93 Search Files {2559a1f0-21d7-11d4-bdaf-00c04f60b9f0}
    94 Search Results {9343812e-1c37-4a49-a12e-4b2d810d956b}
    95 Set Program Access and Defaults {2559a1f7-21d7-11d4-bdaf-00c04f60b9f0}
    96 Show Desktop {3080F90D-D7AD-11D9-BD98-0000947B0257}
    97 SkyDrive folder (Windows 8.1) {8E74D236-7F35-4720-B138-1FED0B85EA75}
    98 Sound {F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}
    99 Speech Recognition {58E3C745-D971-4081-9034-86E34B30836A}
    100 Storage Spaces {F942C606-0914-47AB-BE56-1321B8035096}
    101 Switch Between Windows {3080F90E-D7AD-11D9-BD98-0000947B0257}
    102 Sync Center {9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}
    103 Sync Setup Folder {2E9E59C0-B437-4981-A647-9C34B9B90891}
    104 System {BB06C0E4-D293-4f75-8A90-CB05B6477EEE}
    105 System Icons {05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
    106 Tablet PC Settings {80F3F1D5-FECA-45F3-BC32-752C152E456E}
    107 Taskbar Properties {0DF44EAA-FF21-4412-828E-260A8728E7F1}
    108 Text to Speech {D17D1D6D-CC3F-4815-8FE3-607E7D5D10B3}
    109 This PC (Computer) {20d04fe0-3aea-1069-a2d8-08002b30309d}
    110 Troubleshooting {C58C4893-3BE0-4B45-ABB5-A63E4B8C8651}
    111 User Accounts {60632754-c523-4b62-b45c-4172da012619}
    112 User Folder {59031a47-3f72-44a7-89c5-5595fe6b30ee}
    113 User Pinned {1f3427c8-5c10-4210-aa03-2ee45287d668}
    114 Videos folder {A0953C92-50DC-43bf-BE83-3742FED03C9C}
    115 Window Switcher (Flip-2D) {3080F90E-D7AD-11D9-BD98-0000947B0257}
    116 Windows Defender {D8559EB9-20C0-410E-BEDA-7ED416AECC2A}
    117 Windows Features {67718415-c450-4f3c-bf8a-b487642dc39b}
    118 Windows 7 File Recovery {B98A2BEA-7D42-4558-8BD1-832F41BAC6FD}
    119 Windows Firewall {4026492F-2F69-46B8-B9BF-5654FC07E423}
    120 Windows Mobility Center {5ea4f148-308c-46d7-98a9-49041b1dd468}
    121 Windows SideShow {E95A4861-D57A-4be1-AD0F-35267E261739}
    122 Windows To Go {8E0C279D-0BD1-43C3-9EBD-31C3DC5B8A77}
    123 Windows Update {36eef7db-88ad-4e81-ad49-0e313f0c35f8}
    124 Work Folders (Windows 8.1) {ECDB0924-4208-451E-8EE0-373C0956DE16}
    Также см.: Shell commands in Windows 8

    Дополнительные ключи для explorer.exe:
    Проводник
    explorer.exe [/n][/e] [(,)/root,<folder>] [/select,<object>]

    /n - открытие нового окна, если уже открыто окно, то оно дублируется (для ОС >= Vista неактуально).
    /e - с отображением дерева папок принудительно.
    /idlist,:handle: process specifies object as ITEMIDLIST in shared memory block with given handle in context of given process. Подробности здесь.
    /root - <folder> в качестве корня вместо "Рабочего стола".
    /root,/idlist,:handle: process (без пробела)
    /root,clsid
    /root,clsid,path
    /root,path
    /select - <object> выделить объект.
    /separate - запуск Проводника в отдельном процессе.

    Примеры (Windows 7, вероятно и др.):
    Код (DOS):
    :: Открыть Мой компьютер
    explorer ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
    :: или просто
    explorer ,
    :: Открыть текущий каталог (актуально, когда находишься в консоли CMD)
    explorer .
    :: Открыть Корзину
    explorer ::{645FF040-5081-101B-9F08-00AA002F954E}
    :: Открыть Рабочий стол
    explorer Shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
    :: Открыть Рабочий стол в отедльном процессе
    explorer /separate,/root,Shell:::{3080F90D-D7AD-11D9-BD98-0000947B0257}
    :: Открыть Рабочий стол в новой папке
    explorer shell:Desktop
    Ссылки по теме:
    Ed Bott - 94 more secret Windows shortcuts
    The Windows Explorer Command Line
    MSDN - KNOWNFOLDERID
    MSDN - CSIDL
    MSDN - Canonical Names of Control Panel Items
    Описание ключей и параметров CLSID / AppID

    Теперь мои вопросы и я не жду, что получу на них ответы (постепенно и сам буду искать их):

    Возьмем для примера:
    CLSID: {7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
    Физ. расположение: C:\ProgramData\Microsoft\Windows\Start Menu\Programs

    1) О дополнительніх параметрах HKCR\CLSID:

    В статье от Koza Nozdri говориться про:
    а) HKCR\CLSID\{GUID}\InprocServer32
    Под этим разделом еще есть подразделы:
    б) MergedFolder с параметром Location, значение, к примеру, @shell32.dll,-4177
    rundll32.exe говорит, что это не точка входа функции, значит ресурс.
    Ага вот... http://www.nirsoft.net/dll_information/windows8/shell32_dll.html
    говорит, что это якобы строка "Current User". Подразумевается от какого имени пользователя будет запущена?
    в) ShellFolder с параметром Attributes, значение, к примеру, 0x28100000 (672137216)
    О чем нам говорит этот атрибут?

    2) CLSID и GUID - каково соотношение этих понятий?
    Где-то и читал, но забыл. Своими словами можно...

    3) Почему некоторые GUID, можно подставлять только в shell:::{GUID}, но не в explorer ::{GUID} ?

    4) Как связан GIUD с его псевдонимом и физическим расположением каталога на диске?
    По-другому: откуда система знает какие файлы/физ+вирт.папки (объекты) должны находится в этой виртуальной папке?

    5) Можно ли зарегистрировать свой собственный псевдоним с GUID?
     
    Последнее редактирование: 12 июл 2015
    Legion107, machito и Kиpилл нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Частично ответ на № 4) касаемо Canonical Name

    Источник

    Вот что я первое нашел вручную:
    HKCR\CLSID\{0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
    LocalizedString = @%SystemRoot%\System32\biocpl.dll,-1
    System.ApplicationName = Microsoft.BiometricDevices

    ->> shell:::{0142e4d0-fb7a-11dc-ba4a-000ffe7ab428}
    Только вот не пойму biocpl.dll,-1
    - это вроде иконка, а не строка. Продолжаю выяснять.
    --- Объединённое сообщение, 16 дек 2013 ---
    Забавно (win + tab):
    Shell:::{3080F90E-D7AD-11D9-BD98-0000947B0257} :D
     
    Последнее редактирование: 16 дек 2013
    Legion107 и Kиpилл нравится это.
  3. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Процитирую некоторые ответы от Казакевича Олега.

    1) По поводу HKCR\CLSID\{...}\ShellFolder - Attributes

    Не уверен, что поможет, но кое-что есть здесь:
    Implementing the Basic Folder Object Interfaces
    Плотно с этой темой я не работал, так что прокомментировать не могу.

    2) GUID (или UUID, что одно и то же) - это обобщенное название для любого
    идентификатора, вне зависимости от того, где и как он используется.
    CLSID - это тот же GUID, только название другое. CLSID используется в COM,
    отсюда и название (CLaSs IDentifier - идентификатор класса). Есть еще,
    например, LIBID (LIBrary IDentifier - идентификатор библиотеки типов),
    IID (Interface IDentifier - идентификатор COM-интерфейса) и т.д.
    Т.е. CLSID - это тот же GUID/UUID, просто называется по-другому, чтобы читающему
    код сразу было понятно, откуда идентификатор.
    4) Как связан GIUD с его псевдонимом и физическим расположением каталога на диске?
    По-другому: откуда система знает какие файлы/физ+вирт.папки (объекты) должны находится в этой виртуальной папке?

    Система этого не знает. За отображение содержимого папки и работу с ним (copy-paste,
    drag-n-drop, properties и т.п.) отвечает соответствующий объект, реализующий нужные интерфейсы.
    В MSDN есть кое-что по данной теме, но без хорошего понимания COM туда лучше не соваться. [​IMG]

    5) Можно ли зарегистрировать свой собдственный псевдоним с GUID?
    Ты имеешь в виду, можно ли создать свою виртуальную папку, такую как, например,
    "сетевое окружение" ? Да, можно. Сошлюсь, опять же, на MSDN, отправная точка здесь: Windows Shell
     
    Последнее редактирование: 18 фев 2014
    Legion107 и Kиpилл нравится это.
  4. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.199
    Симпатии:
    4.970

    Все таки разница есть.
    GUID является уникальным номером идентифицирующим программное обеспечение,в том числе в разных вариантах UUID.

    CLSID же является идентификатором класса,то есть он связан с объектами другого рода,в связи с чем мы делаем вывод что и использовать их можно по разному.
    --- Объединённое сообщение, 21 дек 2013, Дата первоначального сообщения: 21 дек 2013 ---
    Тут все и сложно,но если ты разобрался с темой файловых ассоциаций -тогда все просто.

    Для того что бы прочесть идентификатор мы должны понимать что они являют собой объект,с которым связаны.
    Так в каждом разделе HKEY_CLASSES_ROOT\CLSID\{****} мы имеем значение параметра по умолчанию выступающего в роли связующего звена.

    Пример.

    HKEY_CLASSES_ROOT\CLSID\{*********} @=test
    HKEY_CLASSES_ROOT\CLSID\{*********}\InprocServer32 имеет параметр,ссылающийся на tets.dll



    Как система читает GUID?
    Он записывается в соответствующие заголовки программы при написании.

    Так же InprocServer32 может содержать другие данные.

    Об этом рассказано в этой теме:
    http://safezone.cc/threads/nemnogo-o-clsid.20444/
    --- Объединённое сообщение, 21 дек 2013 ---

    Это надо подумать как сформулировать)
    Позже будет.


    Не так давно разбирался в этом,суть кроется опять же в назначении идентификаторов,более подробнее тоже расскажу позже.


    Да,можно.
     
    Последнее редактирование: 21 дек 2013
    Legion107, machito и Dragokas нравится это.
  5. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Что и демонстрирует пример C#-кода, где говорится:
    Основное предназначение GUID - разрешить кофликт имен при идентификации (доступе к) интерфейса, класса, COM и др. сервисов.
    GUID представляет из себя уникальную строку в виде 32 шестнадцатеричных цифр, разбитой на группы дефисами и окружённой фигурными скобками:
    {6F9619FF-8B86-D011-B42D-00CF4FC964FF}. Формируется он согласно стандарта UUID.

    Любая программа в своем исходном виде (исходный код) еще не имеет определенного GUID.
    GUID назначается программе при регистрации библиотек, OLE, COM-объектов, предоставляющих свой интерфейс для использования извне инкапсулированных в нем функций.
    GUID, как объект, состоит из структуры, которая генерируется на основании:
    • Идентификатора машины и сетевой платы (позже Microsoft отказалась от этого пункта вследствие претензий)
    • Текущей времи и даты
    • Информации о конфигурации системы
    • Случайной компоненты
    GUID для Вашего приложения можно получить, используя в нем API-фукнцию CoCreateGuid.
    Хотя сама Microsoft придерживается иногда другой методологии:
    Описание схемы формирования GUID кода продукта для программ Office XP
    GUID для ASP-скриптов. (используется дата-время / случайное число)

    Пример класса на .NET (VB.NET, C#), и кода для Visual Basic 6, позволяюего генерировать GUID
    Используется API-фукнция CoCreateGuid

    Платформа .NET

    Код (vb.net):
    Класс, позволяющий генерировать уникальный идентификатор
    public sealed class ComGuid
    {
        private ComGuid()
        {}

        public static Guid NewGuid()
        {
            Guid val = Guid.Empty;
            int hresult = 0;
            hresult = CoCreateGuid(ref val);

            if(hresult != 0)
            {
                throw new System.ComponentModel.Win32Exception(Marshal.GetLastWin32Error(), "Error creating new Guid");
            }

            return val;
        }

        [DllImport("ole32.dll", SetLastError=true)]
        private static extern int CoCreateGuid(ref Guid pguid );
    }

    // Код для кнопки в основном классе
    private void button1_Click(object sender, EventArgs e)
    {
        textBox1.Text = ComGuid.NewGuid().ToString();
    }
    Источник.

    Пример для Visual Basic 6.0.:

    Код (vb.net):

    Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(7) As Byte
    End Type

    Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGuid As GUID) As
    Long

    Public Function GetGUID() As String
    '(c) 2000 Gus Molina

    Dim udtGUID As GUID

    If (CoCreateGuid(udtGUID) = 0) Then

    GetGUID = _
    String(8 - Len(Hex$(udtGUID.Data1)), "0") & Hex$(udtGUID.Data1) & _
    String(4 - Len(Hex$(udtGUID.Data2)), "0") & Hex$(udtGUID.Data2) & _
    String(4 - Len(Hex$(udtGUID.Data3)), "0") & Hex$(udtGUID.Data3) & _
    IIf((udtGUID.Data4(0) < &H10), "0", "") & Hex$(udtGUID.Data4(0)) & _
    IIf((udtGUID.Data4(1) < &H10), "0", "") & Hex$(udtGUID.Data4(1)) & _
    IIf((udtGUID.Data4(2) < &H10), "0", "") & Hex$(udtGUID.Data4(2)) & _
    IIf((udtGUID.Data4(3) < &H10), "0", "") & Hex$(udtGUID.Data4(3)) & _
    IIf((udtGUID.Data4(4) < &H10), "0", "") & Hex$(udtGUID.Data4(4)) & _
    IIf((udtGUID.Data4(5) < &H10), "0", "") & Hex$(udtGUID.Data4(5)) & _
    IIf((udtGUID.Data4(6) < &H10), "0", "") & Hex$(udtGUID.Data4(6)) & _
    IIf((udtGUID.Data4(7) < &H10), "0", "") & Hex$(udtGUID.Data4(7))
    End If

    End Function
    Источник.

    [/code]

    Полный перечень COM-объектов, их имен, методов, свойств, я могу увидеть, например,
    установив редактор скриптов PrimalScript. View -> Browser Panel -> Object Browser.
    Заодно там же есть перечень WMI-классов и объектов .NET и PowerShell.
    Primal_Script_OBJ.png

    Как можно воспользоваться в своей программе инфтерфейсом, которому назначен GUID.

    В VBA/Visual Basic 6 достаточно подставить {GUID} в функцию создания объекта, например:
    использование голосового движка, для проговаривания текста:
    Код (Text):
    Set oVoice = CreateObject("SAPI.SpVoice")
    oVoice.Speak "Hello World."
    Здесь мы вводим имя объекта: SAPI.SpVoice
    Давайте попробуем найти его в реестре. Вуаля:

    SAPI.Voice.GUID.png

    Теперь записываем его GUID в виде такой конструцкии:
    Код (Text):
    Set oVoice = CreateObject("new:{96749377-3391-11D2-9EE3-00C04F797396}")
    oVoice.Speak "Hello World."
    Запускаем. Убеждаемся, что в таком виде тоже работает*.
    * Данный формат записи доступен только для диалектов VBA и Visual Basic 6.
    * Для Visual Basic Scripting Edition можно задавать только имена объектов, а еще получать доступ к .NET платформе.

    Смысл демонстрации в том, что существуют объекты, до которых нельзя "достучаться" через имя.
    В таком случае GUID нам будет полезен.
    Код (vb.net):

    Sub ПримерИспользования()
         txt = ClipboardText
         MsgBox txt, vbInformation, "Содержимое буфера обмена Windows"
    End Sub

    Function ClipboardText() ' чтение из буфера обмена
       With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
             .GetFromClipboard
             ClipboardText = .GetText
         End With
    End Function

    Sub SetClipboardText(ByVal txt$) ' запись в буфер обмена
       With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
             .SetText txt$
             .PutInClipboard
         End With
    End Sub
    К вопросу о получении имени объекта по GUID.

    Имена и GUID, к примеру, всех элементов Панели управления, можно получить перейдя к ветке:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\

    Имя для Well-Known Folder по указанному GUID, можно узнать, посмотрев значение по-умолчанию в:
    HKEY_CLASSES_ROOT\CLSID\{GUID}

    Как получить GUID установленного в системе ПО:

    Например через WMI, с помощью такого vbscript:
    Код (vb.net):

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
    Set colItems = objWMIService.ExecQuery( _
      "SELECT * FROM Win32_Product",,48)
    For Each objItem in colItems
      Wscript.Echo "-----------------------------------"
      Wscript.Echo "Win32_Product instance"
      Wscript.Echo "-----------------------------------"
      Wscript.Echo "IdentifyingNumber: " & objItem.IdentifyingNumber
      Wscript.Echo "Name: " & objItem.Name
      Wscript.Echo "PackageCache: " & objItem.PackageCache
    Next
     
    GET_Prog_Guids.png
     
    Последнее редактирование: 21 дек 2013
    Phoenix, Legion107, machito и ещё 1-му нравится это.
  6. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.199
    Симпатии:
    4.970


    Продолжаю тему,рад что смог выбрать время так как самому уже интересно.
    MergedFolder как я сделал выводы на основании анализа является разделом,который указывает cuid с чем произведено сопряжение непосредственно ,то есть настройка сопряжения guid идентифицирующего некоторый объект и его локализации,параметр Location указывает непосредственно на расположение.

    Например
    Код (Text):
    {7be9d83c-a729-4d97-b5a7-1b7313c39e0a}
    Является program files,из значения

    Код (Text):
    HKCR\CLSID\{7be9d83c-a729-4d97-b5a7-1b7313c39e0a}\MergedFolder\Location\@shell32.dll,-4177
    Мы понимаем что папка сопряжена с @shell32.dll,-4177 что значит "Текущий пользователь".

    Далее.


    В данном случае я не вижу к какому объекту он относится,но в приведенном мной примере значение будет такое же значение.

    Но данное значение лишь указывает на несколько флагов:

    Данный элемент есть папка
    Указанный элемент может быть размещен внутри веб-браузера или проводника Windows визуально.
    Чушь какая - то типа этим элементам не присвоен определенный номер и они могут быть скрыты...(???)

    Вот примерная расшифровка флага.
    Про элементы-я думаю имеется ввиду то,что каждая папка или объект могут иметь номер,например

    0x0004 / / Мой компьютер \ Принтеры

    Вот давно уже не могу собраться флаги оформить,такая тема тернистая...
    --- Объединённое сообщение, 30 дек 2013 ---
    Dragokas, формируй остальные вопросы если есть и пойдет инфа в переработку...
     
    Последнее редактирование: 30 дек 2013
    Legion107 нравится это.
  7. glax24
    Оффлайн

    glax24 Разработчик

    Сообщения:
    2.000
    Симпатии:
    1.450
    01=1
    +
    10=2
    =
    11=3
    Суммирование битов
     
    Legion107 и Kиpилл нравится это.
  8. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Если вы хотите использовать глобальные идентификаторы (GUID) для идентификации ваших файлов, то никто вас не останавливает
    Неплохо, да?
     
    Kиpилл нравится это.
  9. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.199
    Симпатии:
    4.970
    Дабы не терять смысловую нагрузку некоторых моментов не стал переделывать а просто добавил ссылку на эту тему.
     
    Dragokas нравится это.
  10. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.475
    Симпатии:
    4.305
    Добавлен способ № 4.
     
    Kиpилл нравится это.

Поделиться этой страницей