Проблема с автозагрузкой

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Проблема с автозагрузкой

Сообщение Saturn.65 » 15.09.2007 (Сб) 21:04

Помогите пожалуйста с проблемой!
Написал одну прогу. Она записывает себя в реестр в автозагрузку.
Но при старте винды вылезает вот такая ошибка:
---------------------------------------------------------
System Error. &H80070583(-2147023485). Класс не существует.
----------------------------------------------------------
Не могу понять в чем дело. А так программа открывается без всяких проблем. Правда я в ней прописал пропуск ошибок.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.09.2007 (Сб) 21:15

А xpvs-манифест программа случаем не использует?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 15.09.2007 (Сб) 22:55

Хакер писал(а):А xpvs-манифест программа случаем не использует?

Вот именно. Есть XP манифест в виде модуля и RES файла. Их удалил и все стало работать. Но внешний вид не нравится. Со стилем XP как-то лучше. А почему это так? Без автозагрузки с манифестом работает, а так нет. Как тут быть? Хотелось бы стиль XP. Может подскажите?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.09.2007 (Сб) 22:57

InitCommonControls в самом начале есть?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 15.09.2007 (Сб) 23:06

У меня модуль с названием mComCtrls.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.09.2007 (Сб) 23:07

А у меня модуль с названием Module1. И что это решает?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 15.09.2007 (Сб) 23:13

Вот что внутри модуля:
Код: Выделить всё
Option Explicit

Private Type tagInitCommonControlsEx
  lngSize As Long
  lngICC As Long
 
End Type

Private Declare Function InitCommonControlsEx Lib "comctl32.dll" (iccex As tagInitCommonControlsEx) As Boolean

Private Const ICC_USEREX_CLASSES = &H200

Public Function InitCommonControlsXP() As Boolean

On Error Resume Next

Dim iccex As tagInitCommonControlsEx


With iccex
  .lngSize = Len(iccex)
  .lngICC = ICC_USEREX_CLASSES
 
End With

InitCommonControlsEx iccex
InitCommonControlsXP = CBool(Err = 0)

End Function

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.09.2007 (Сб) 23:14

А меня интересует Public Sub Main. Точнее не он сам, а наличие там вызова InitCommonControlsXP.

ADDED:
Код: Выделить всё
InitCommonControlsXP = CBool(Err = 0)

Блин, ну кто это писал? :x
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 15.09.2007 (Сб) 23:19

Вот автор. В модуле было
Код: Выделить всё
'---------------------------------------------------------------------------------------
' Module     : mComCtrls
' DateTime   : 22/11/2003 ddmmyy 21:12
' Author     : Lee Hughes lphughes@btopenworld.com
' Purpose    : Initiate XP common controls

' Notes      : CALL InitCommonControlsXP before any
'            : VB commands or exe will crash
'---------------------------------------------------------------------------------------

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.09.2007 (Сб) 23:20

Второй вопрос был риторическим.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 16.09.2007 (Вс) 0:47

Код: Выделить всё
InitCommonControlsXP = CBool(Err = 0)

В моем стиле :)

Автору:
А ты добавлял в свой проект компонент Microsoft Windows Common Controls 5.0 (comctl32.ocx) ?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.09.2007 (Вс) 11:19

t116 писал(а):
Код: Выделить всё
InitCommonControlsXP = CBool(Err = 0)

В моем стиле :)
?


Тогда уж для большей красоты:
InitCommonControlsXP = Cbool(CBool(CBool(Err = 0) = CBool(77=77)) = True)

t116 писал(а):[Автору:
А ты добавлял в свой проект компонент Microsoft Windows Common Controls 5.0 (comctl32.ocx) ?

Зачем это?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

t116
Бывалый
Бывалый
 
Сообщения: 209
Зарегистрирован: 12.01.2007 (Пт) 12:11

Сообщение t116 » 16.09.2007 (Вс) 11:39

Хакер писал(а):Зачем это?


Потому что у меня тоже возникала такая ошибка когда пытался применить манифест к программе. Путем экмпериментов определил что она возникает если в программе нет ссылки на comctl32.ocx .
Вложения
Manifest.rar
3 программы: без манифеста, с манифестом без ссылки на контрол 5.0, с манифестом и с сылкой на контрол 5.0
(29.73 Кб) Скачиваний: 47

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.09.2007 (Вс) 11:59

Твои экмперименты, похоже, были недостоверными, и прична в другом.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 16.09.2007 (Вс) 16:20

Спасибо всем, особенно Хакеру. Причину нашел. Скачал вот такой манифест:
Код: Выделить всё
Option Explicit
Public Col As Long

Public Type INITCOMMONCONTROLSEX
    dwSize As Long
    dwICC As Long
End Type

Public Const ICC_USEREX_CLASSES As Long = &H200

Public Declare Function INITCOMMONCONTROLSEX Lib "comctl32.dll" Alias "InitCommonControlsEx" (ByRef TLPINITCOMMONCONTROLSEX As INITCOMMONCONTROLSEX) As Long

Public Function InitCommonControlsXP() As Boolean
    On Error Resume Next
    Dim ICCEx As INITCOMMONCONTROLSEX
    With ICCEx
        .dwSize = Len(ICCEx)
        .dwICC = ICC_USEREX_CLASSES
    End With
    Call INITCOMMONCONTROLSEX(ICCEx)
    InitCommonControlsXP = CBool(Err = 0)
End Function

И добавил в событие Form_Initialize InitCommonControlsXP.
И все без проблем заработало.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.09.2007 (Вс) 18:19

А надо в Sub Main. Хотя, тебе наверное и не надо.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 17.09.2007 (Пн) 15:39

Это один из тех кульхацкеров, о которых мы говорили. Тупо скопипастил чужой код, не разбираясь как это все работает... :evil:
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 21.09.2007 (Пт) 15:08

Денис писал(а):Это один из тех кульхацкеров, о которых мы говорили. Тупо скопипастил чужой код, не разбираясь как это все работает... :evil:

Это про меня что ли? Ну да, я человек начинающий. И нихрена в коде манифеста не разбираюсь. Мне надо чтоб он работал. И он у меня работает. Весьма тупо копирую и вставляю. Я все программы в основном так пишу. Ты возможно тоже ассемблер не знаешь и тебе это не мешает писать на VB. :twisted:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.09.2007 (Пт) 15:13

Я все программы в основном так пишу.

Плохо. Возьму на заметку.


Ты возможно тоже ассемблер не знаешь и тебе это не мешает писать на VB.

Как раз наоборот, знание ассемблера иногда мешает писать код на VB, из-за того, что знаешь, что код, сгенерированный VB-компилятором будет менее эффективный, чем аналогичный код, который ты можешь написать для этого, но не способен это сделать из-за отсутствия inline-асма.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 21.09.2007 (Пт) 15:31

Я согласен со всем. А куда деваться, если в книгах дальше кнопок ничего не пишут. Приходится скачивать похожие примеры и потом подстраивать под свои нужды. Но при этом ведь тоже нужно думать, что убрать. что вставить. Вот и получается писанина блоками. Я не думаю, что это совсем тупое копирование. Ну не пишут в книгах о работе с реестром! Купил даже справочник. Книга не прохая. Про API правда два слова. Вот такие дела. Единственное спасение форум.
Так что Хакер возьми меня на заметку, как особо нуждающегося в информации.
А ассемблер и я уважаю, хотел было немного осилить, но книги не для совсем начинающих... :(
Извиняюсь за флуд.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 21.09.2007 (Пт) 15:33

Saturn.65

Тебе не приходило в голову, скачивать примеры, но вместо того чтобы "подстраивать под свои нужды и вставлять", вникать в суть их работы и писать свой код?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 21.09.2007 (Пт) 15:45

Хакер писал(а):Saturn.65

Тебе не приходило в голову, скачивать примеры, но вместо того чтобы "подстраивать под свои нужды и вставлять", вникать в суть их работы и писать свой код?

Я что и делаю. Ведь не бывает готовых примеров. стараюсь обязательно вникать. А без своего кода ничего и не сделаешь.Правда не всегда получается. Опять же все в незнание упирается. Я вышел пока на уровень работы с реестром. Теперь мои программы могут использовать реестр для своей памяти. В принципе я уже рад, хотя API для меня еще темный лес.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 99

    TopList