Удалённые Рабочие Столы и Локальные диски.

Вам не хватает чего-то в Far? Вы считаете, что вашу идею стоит услышать? Пишите сюда.
Post Reply
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

Удалённые Рабочие Столы и Локальные диски.

Post by cmd.exe »

Давно встретился с тем,что Фар не умеет работать с Локальными дисками при работе через RDP.
Если есть какие-то идеи у сообщество буду рад услушить. Про \\tsclient\... знаем, но хотим что-бы из коробки.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Удалённые Рабочие Столы и Локальные диски.

Post by DrKnS »

\\tsclient и есть изкоробки, изкоробочнее не бывает.
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

Удалённые Рабочие Столы и Локальные диски.

Post by cmd.exe »

DrKnS wrote:\\tsclient и есть изкоробки, изкоробочнее не бывает.
Имеется ввиду по Alt+F1 и Alt+F2
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
User avatar
Freeman
Posts: 35
Joined: Thu 20 Nov, 2014 20:10
Location: Санкт-Петербург
Has thanked: 5 times
Been thanked: 2 times
Contact:

Удалённые Рабочие Столы и Локальные диски.

Post by Freeman »

Таки да, было бы удобно видеть их как в Проводнике.
Пользователь Far с 1998 года
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Удалённые Рабочие Столы и Локальные диски.

Post by Smitis »

Добавление пункта выбора \\tsclient-дисков в меню выбора дисков:
Last edited by HaRT on Fri 08 Sep, 2023 23:32, edited 1 time in total.
Reason: Починено форматирование кода
Разум когда-нибудь победит.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Удалённые Рабочие Столы и Локальные диски.

Post by Smitis »

Задался вопросом, а как получить список дисков не через net use. Весь поиск приводит к WNetOpenEnum, WNetEnumResource
Но вот такое приводит к ошибке 487 "Попытка обращения к неверному адресу".
  1. local function ShowErr(err)
  2.  
  3.     if err==0 then return "" end
  4.  
  5.     far.Message( tostring(err), "ERROR", nil, "we" )
  6.  
  7. end
  8.  
  9.  
  10.  
  11. local ffi = require "ffi"
  12.  
  13. local C = ffi.C
  14.  
  15. local function safe_cdef(def) pcall(ffi.cdef,def) end
  16.  
  17. local mpr = ffi.load("mpr.dll")
  18.  
  19.  
  20.  
  21. -- winnetwk.h
  22.  
  23. local RESOURCE_CONNECTED = 0x00000001
  24.  
  25. local RESOURCE_GLOBALNET = 0x00000002
  26.  
  27. local RESOURCETYPE_ANY = 0
  28.  
  29. local RESOURCETYPE_DISK = 0x00000001
  30.  
  31. local ERROR_NO_MORE_ITEMS = 259
  32.  
  33. local RESOURCEUSAGE_CONNECTABLE = 0x00000001
  34.  
  35. local RESOURCEUSAGE_CONTAINER = 0x00000002
  36.  
  37. local RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004
  38.  
  39. local TSCLIENT = "\\\\TSCLIENT\0"
  40.  
  41.  
  42.  
  43. safe_cdef [=[
  44.  
  45.     typedef struct _NETRESOURCE {
  46.  
  47.         DWORD  dwScope;
  48.  
  49.         DWORD  dwType;
  50.  
  51.         DWORD  dwDisplayType;
  52.  
  53.         DWORD  dwUsage;
  54.  
  55.         LPTSTR lpLocalName;
  56.  
  57.         LPTSTR lpRemoteName;
  58.  
  59.         LPTSTR lpComment;
  60.  
  61.         LPTSTR lpProvider;
  62.  
  63.     } NETRESOURCE, *LPNETRESOURCE;
  64.  
  65. ]=]
  66.  
  67. ffi.cdef [=[
  68.  
  69.     DWORD WNetOpenEnumW( // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385478.aspx
  70.  
  71.         DWORD         dwScope,       // _In_
  72.  
  73.         DWORD         dwType,        // _In_
  74.  
  75.         DWORD         dwUsage,       // _In_
  76.  
  77.         LPNETRESOURCE lpNetResource, // _In_
  78.  
  79.         LPHANDLE      lphEnum        // _Out_
  80.  
  81.     );
  82.  
  83.     DWORD WNetEnumResource( // https://msdn.microsoft.com/en-us/library/windows/desktop/aa385449.aspx
  84.  
  85.         HANDLE  hEnum,       // _In_
  86.  
  87.         LPDWORD lpcCount,    // _Inout_
  88.  
  89.         LPVOID  lpBuffer,    // _Out_
  90.  
  91.         LPDWORD lpBufferSize // _Inout_
  92.  
  93.     );
  94.  
  95.     DWORD WNetCloseEnum( HANDLE hEnum );
  96.  
  97. ]=]
  98.  
  99.  
  100.  
  101. local NetResource = ffi.new("NETRESOURCE")
  102.  
  103. local lpNetResource = ffi.cast("void*",NetResource)
  104.  
  105.  
  106.  
  107. local hEnum = ffi.new("HANDLE")
  108.  
  109. local lphEnum = ffi.cast("void*",hEnum)
  110.  
  111. --ShowErr( mpr.WNetOpenEnumW(RESOURCE_GLOBALNET,RESOURCETYPE_ANY,0,lpNetResource,lphEnum) )
  112.  
  113. ShowErr( mpr.WNetOpenEnumW(RESOURCE_CONNECTED,RESOURCETYPE_DISK,0,ffi.NULL,lphEnum) )
  114.  
  115.  
  116.  
  117. -- тут мы будем вызывать WNetEnumResourceW
  118.  
  119.  
  120.  
  121. mpr.WNetCloseEnum(hEnum)
В чём может быть затык?
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Удалённые Рабочие Столы и Локальные диски.

Post by DrKnS »

local lphEnum = ffi.cast("void*",hEnum) - это каст (причём бесполезный), а не получение адреса.

Должно быть что-то типа:

Code: Select all

local hEnum = ffi.new("HANDLE[1]")
mpr.WNetOpenEnumW(RESOURCE_CONNECTED, RESOURCETYPE_DISK, 0, ffi.NULL, hEnum)
// use hEnum[0]
User avatar
cmd.exe
Posts: 378
Joined: Fri 16 Apr, 2010 18:26
Location: Нижний Новгород
Has thanked: 181 times
Been thanked: 10 times
Contact:

Удалённые Рабочие Столы и Локальные диски.

Post by cmd.exe »

Есть вопрос, а возможно это встроить в сам фар а не макросом.
I've been using Vim for about 2 years now, mostly because I can't figure out how to exit it. (c) I Am Devloper
I know nothing except the fact of my ignorance. (с) Socrates
Post Reply

Return to “Предложения и идеи”