Вот пример, который позволяет менять все настройки файла, в том числе и иконку:
------------------ Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Const HKEY_CLASSES_ROOT = &H80000000
Public Sub AssociateMyApp(ByVal sAppName As String, ByVal sEXE As String, ByVal sExt As String, Optional ByVal sIcon As String) Dim lRegKey As Long Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName)) Call RegCloseKey(lRegKey) Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Open\Command", lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE)) Call RegCloseKey(lRegKey) If Len(sIcon) Then Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\DefaultIcon", lRegKey) Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sIcon, Len(sIcon)) Call RegCloseKey(lRegKey) End If End Sub
Private Sub Command1_Click() AssociateMyApp "My New File App", "C:\File.exe %1", ".txt", "C:\File.exe,-1" End Sub примечание: смайл может быть не в косяк, я сижу без отображения картинок.
Прикол по-моему не у ави, а у WMPlayer'а - он очень цепучий к файлам. Выход такой: или отключи вручную в параметрах WM, или (если хочешь программно) отсканируй RegShot'ом реестр, найди, что изменяет WM (при изменении настроек) и в будущем переключай эту опцию из своей проги.
RegShot это вообще левая (не имеющая отношения к VB) прога, которая как бы фотографирует (отсюда и название) реестр. Если сделать два снимка (до и после изменений), а потом сравнить - ты естественно найдешь, что прога намутила в реестре. Чаще всего проги сохраняют настроцки в реестр, т.е. ты всегда можешь и сам их (программно) подправить. Иногда, правда, и ini-файл засовывают (WinAmp), но и он далеко не прячется - валяется где-нибудь возле экзешника, но на крайняк можно определить с помощью FileMon (тоже левачок). Кстати альтернатива RegShot - RegMon. Только он постоянно сканирует реестр на обращение (функция RegNotifyChangeKeyValue), а в случае настроек проги проще использовать всё-таки RegShot