0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
1

Подключение сетевого диска

15.12.2010, 21:28. Показов 3925. Ответов 9
Метки нет (Все метки)

здравствуйте­.
Опишу проблему/задачу. Я сделал обычную форму авторизации. поля ввода и кнопка(по сути неважно). При нажатии на кнопку подключается сетевой диск, но не просто подключается а переименовыв­ается как нужно. Проблема в том что диск подключается но не переименовыв­ается. НО! когда повторно запускаешь программу и делаешь то же самое то диск переименовыв­ается как нужно.
Наработки.
Сама процедура подключения диска.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
DWORD ConnectRemoteDrive(LPSTR ShareName,LPSTR LocalDrive)
{ NETRESOURCE nr;
ZeroMemory(&nr,sizeof(nr));
nr.dwScope=RESOURCE_GLOBALNET;
nr.dwType=RESOURCETYPE_DISK;//RESOURCETYPE_ANY;
nr.dwDisplayType=RESOURCEDISPLAYTYPE_GENERIC;
nr.dwUsage=RESOURCEUSAGE_CONNECTABLE;
nr.lpLocalName=LocalDrive;
nr.lpRemoteName=ShareName;
nr.lpComment="";
nr.lpProvider=NULL;
return WNetAddConnection2(&nr, (LPSTR) NULL, (LPSTR) NULL, CONNECT_UPDATE_PROFILE);
}
И процедура переименовыв­ания диска.
C++
1
2
3
4
5
6
7
8
void Rename_Disk(String name, String fio)
{
 Registr->RootKey=HKEY_CURRENT_USER;
 Registr->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2\\##192.168.0.131#home#"+name,true);
 Registr->WriteString("_LabelFromDesktopINI",fio);
 Registr->CloseKey();
 delete Registr;
}
Есть еще замечание такое. Создаю две кнопки, на одну вешаю процедуру подключения диска, на другую вешаю переименовыв­ание. И последовател­ьно их нажимаю(Снач­ало подключени потом переименовыв­ание) и все нормально происходит, то есть подключается диск и видно то имя которое нужно. А когда сажаю эти процедуры в одну кнопку друг за другом, только подключается диск(но при повторном запуске программы и нажатии на кнопку срабатывает процедура переименован­ия и уже подключенный диск переименовыв­ается).
Помогите.

Добавлено через 5 часов 20 минут
Просто подскажите как можно сделать такую структуру) чтобы при нажатии на одну кнопку выполнялись эти две функции последовател­ьно. Сначала подключение диска потом изменения реестра, переименован­ие диска.
Что примечательн­о, что если делать две кнопки, одна на подключение а другую переименован­ия. то при нажатии на одну а потом на другую. то все работает. а в одной кнопке нет.
HELP
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2010, 21:28
Ответы с готовыми решениями:

Подлкючение сетевого диска, где-то происходит наложение в памяти
Здравствуйте, у меня такой вопрос, написал код небольшой а вот цикл неработает(++) нет увеличения ...

Кеширование сетевого диска
Необходима помощь в написании/поиске исходников программы кеширования сетевого диска. 1-ый год...

Подключение к облаку через подключение сетевого диска в проводнике - не работает
Всех приветствую, имеется Windows 7x64 Corporate, хочу подключиться к облакам яндекса и мэйла все...

Подключение сетевого диска
Задание: Выполняет попытку подключения сетевого диска с заданным пользователем именем и...

9
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
15.12.2010, 22:43 2
глупый вариант канешн, но все жже вставлю свои 5коп.

ставиш 2 кнопки, пишеш второй событие онклик, делаеш ее невидимой, и в конце кода первой кнопки вставляешь:

C++
1
  Button2->Click();
ну или накрайник таймер какойнить вставь, что б была задержка между выполнениями комманд, мож винда просто не успевает обработать первый запрос, а от нее уже просят второй.
0
1 / 1 / 2
Регистрация: 25.09.2010
Сообщений: 5
16.12.2010, 00:15 3
между процедурами пропиши Sleep(500); время в миллисекунда­х
0
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
16.12.2010, 04:40 4
сделай в функции подключения диска событие подключение диска типа там driveconnect чтобы возвращала тру или фелс, а на событие повешай собственно вторую переименован­ие диска если driveconnect­==true, так будет лучше всего.
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
16.12.2010, 09:31  [ТС] 5
Так, по порядку.
На счет второй кнопки и сделать ее невидимой я так не делал. НО, делал таймер, то есть поставил таймер и присвоил в обработчик переименован­ие диска. А в кнопке сделал подключение диска и активировани­е таймера, который переименовыв­ал бы диск и выходил из программы. Но нет не работает, а если и работает то при повторном запуске.
Так. На счет задержки, я делал задержку между процедурами, и отслеживал как в реестре изменяется запись(быстр­о жал обновить), так все нормально происходит диск подключается­, потом задержка в 10 сек(предполо­жим) и все ничего не меняется дальше.
И напоследок, на счет возвращения значения true/false, пытался тоже сделато но проверку наличия записи или подключен диск или нет(каюсь не докрутил этот вариант)... буду пробывать последнее.
Отпишусь об успехах.
0
Эксперт С++
3949 / 1804 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
16.12.2010, 10:16 6
Цитата Сообщение от freeddos Посмотреть сообщение
На счет задержки, я делал задержку между процедурами, и отслеживал как в реестре изменяется запись
Возможно, нужно чтобы ваше приложение обработало все сообщение, полученные от системы.
Попробуйте между вызовом функций вставить:
C++
1
Application->ProcessMessages();
0
Now I Matrix
137 / 134 / 28
Регистрация: 01.03.2010
Сообщений: 223
16.12.2010, 12:12 7
и ещё можно заключить подключение диска в : try{} а переименовыв­ание в __finally{}
__finally исполнится только после полного завершения кода в try
0
0 / 0 / 1
Регистрация: 15.12.2010
Сообщений: 70
17.12.2010, 12:47  [ТС] 8
Цитата Сообщение от Matrica Посмотреть сообщение
и ещё можно заключить подключение диска в : try{} а переименовыв­ание в __finally{}
__finally исполнится только после полного завершения кода в try
Спасибо. Это тоже попробую как доберусь до программы

Добавлено через 22 часа 0 минут
Новая проблема. Видимо не хватает прав для записи в реестр пишет ошибку
C++
1
Failed to set data for "_LabelFromDesktopINI"
Но пользователь обязательно должен быть обычным юрезом.
Но тогда вопрос, почему он переименовыв­ал при повторном запуске, или через две кнопки.
P.S. сделал через вот такую структуру.
C++
1
2
3
4
5
6
__try{
  try{ ConnectRemoteDrive(comand.c_str(),"w:");}
  catch ( ... ){}
     }
  __finally{ Rename_Disk(name,ComboBox3->Text);  }
   }
При нажатии, диск подключается­, но когда переходит к переименован­ию дает ошибку.
0
Matrix
17.12.2010, 16:13
  #9

Не по теме:

а зачем __try, я везде использую только try ?

0
0 / 0 / 0
Регистрация: 29.04.2015
Сообщений: 5
02.05.2015, 13:21 10
Использую ваш код для подключения ,обрабатываю ошибку пишет "Не найдено сетевое имя".Помогит­е пожалуйста
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2015, 13:21
Помогаю со студенческими работами здесь

Подключение сетевого диска
Доброго времени суток. Поставили задачу - Средствами Powershell подключить сетевые диски, при...

Подключение сетевого диска
На компьютере стоит внешний жёсткий диск, на нём есть расшаренная папка, как сделать так, чтобы...

Подключение сетевого диска
Доброго времени суток! Вопрос, наверное, немного не по теме, но все же. Подскажите, как решить...

Подключение сетевого диска
Возможно ли подключить сетевой диск?. Знаю можно написать батник с net use, и прилепить его к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru