Что нового

Запомнить расположение ярлыков на рабочем столе

The_Immortal

Новичок
Сообщения
84
Репутация
4
Подскажите, пожалуйста, можно ли как-то сделать так, чтобы у какого-либо пользователя (нового, ранее созданного) при входе в учетную запись ярлыки на рабочем столе расстанавливались заранее предопределенным образом?

Если это возможно, то подскажите, пожалуйста, в какую сторону вообще копать?

Я знаю про изменение реестра: HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ItemPos###, где "###" - разрешение экрана, однако это требует перезаход пользователя в систему...


Спасибо!
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include <GuiListView.au3>
Func _desctopelem()
	Local $hListView, $iNumber, $aIniread, $j, $sec, $tim
	Switch @HotKeyPressed
		Case '#{f11}'
			Switch MsgBox(33, 'achtung', 'подумал?')
				Case 2
					Return
			EndSwitch
			$hListView = ControlGetHandle('[Class:Progman]', '', '[CLASS:SysListView32; INSTANCE:1]')
			$iNumber = _GUICtrlListView_GetItemCount($hListView)
			FileDelete('D:\1\1\1\desct.ini')
			For $i = 0 To $iNumber - 1
				IniWriteSection('D:\1\1\1\desct.ini', _GUICtrlListView_GetItemText($hListView, $i), _
						'x=' & _GUICtrlListView_GetItemPositionX($hListView, $i) & @LF & _
						'y=' & _GUICtrlListView_GetItemPositionY($hListView, $i))
			Next
			MsgBox(32, '', 'ok')
		Case '#{f12}'
			$j = -1
			$hListView = ControlGetHandle('[Class:Progman]', '', '[CLASS:SysListView32; INSTANCE:1]')
			$aIniread = IniReadSectionNames('D:\1\1\1\desct.ini')
			$tim = TimerInit()
			For $i = 1 To $aIniread[0]
				$sec = IniReadSection('D:\1\1\1\desct.ini', $aIniread[$i])
				Select
					Case _GUICtrlListView_GetItemText($hListView, $i + $j) <> $aIniread[$i]
						Do
							$j += 1
							Select
								Case TimerDiff($tim) > 5000
									Return
							EndSelect
						Until _GUICtrlListView_GetItemText($hListView, $i + $j) = $aIniread[$i]
				EndSelect
				_GUICtrlListView_SetItemPosition($hListView, $i + $j, $sec[1][1], $sec[2][1])
			Next
		Case '#{f9}'
			IniWrite('D:\1\1\1\trubafiles.ini', 'truba', 'num', 0)
	EndSwitch
EndFunc   ;==>_desctopelem

ControlGetHandle здесь для xp
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
sngr,
Код:
_GUICtrlListView_GetItemText($hListView, $i)
почему-то возвращает пустое значение :'(

P.S. Win 8.1 x64.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Это работает в хр, в следующих системах раб стол не listview; ищи что это за элемент и как с ним работать.
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
sngr,[?]
ищи что это за элемент и как с ним работать.
Ага, легко сказать... По этому поводу нашел такое обсуждение, в котором никто ничего не предложил.
А вот тут наш товарищ объясняет проблематику и предлагает решение, но в итоге оно лично у меня не сработало.
Ну а остальные варианты сводятся к XP.

[?]
Я знаю про изменение реестра: HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop\ItemPos###, где "###" - разрешение экрана, однако это требует перезаход пользователя в систему...
В общем, получилось, но крайне костыльно. Экспортируем значение из указанного параметра. Потом убиваем explorer.exe, импортируем значение обратно в реестр, запускаем explorer.exe. Так, полагаю, будет работать везде.

Но это же совсем не комильфо... :(




Добавлено:
Сообщение автоматически объединено:

Всё, оказывается, уже давно-давным решено. Буду разбираться.


Спасибо!
 
Автор
T

The_Immortal

Новичок
Сообщения
84
Репутация
4
CreatoR, да, я находил Ваш труд, но, к сожалению, его оттуда не скачать - после того, как щелкаешь по ссылке "Download From Here" происходит переброс на главную страницу форума.

Вы не могли бы тут выложить через пожалуйста?
 
Верх