Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: ITaskBar3 Добавлено: 20.01.10 22:31  

Автор вопроса:  Winand | Web-сайт: winandfx.narod.ru
Плохо понимаю интерфейсы и всё такое.
http://msdn.microsoft.com/en-us/library/dd391698(VS.85).aspx
Возможно ли в vb6 получить доступ к этой функции? При том желательно безо всякого раннего связывания обойтись, чтобы можно было сделать обработчик ошибок и запускать под WinXP

Ответить

  Ответы Всего ответов: 20  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 21.01.10 02:24
Интерфейс унаследован от IUnknown. Придется писать грязные ассемблерные хаки.

Ответить

Номер ответа: 2
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #2
Добавлено: 21.01.10 09:44
Уэээ... Если вдуматься в суть дела, и переформулировать вопрос, чувак спрашивает, как работать с таскбаром Windows 7, а именно - использовение иконки программы как прогрессбара.

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 21.01.10 12:25
VBD, а ты знаешь как?) Я так понимаю, из-за интерфэйса сложности возникают
Sharp, их никто не написал еще? они не универсальны? Если два нет, то наверное мне не добраться туда=)

Ответить

Номер ответа: 4
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #4
Добавлено: 21.01.10 13:24
Видел для C#. Щас не нашел, но нашел для C++
http://msdn.microsoft.com/en-us/magazine/dd942846.aspx

Только переписать на VB6 и все. И вообще я никогда не поверю, чтобы Microsoft делала на таком убогом уровне программирование своей очередной новой фичи.

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 21.01.10 14:34
http://msdn.microsoft.com/en-us/library/dd378460(VS.85).aspx

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 21.01.10 14:45
Товарищи! Я читал обе статьи по ссылкам выше. Как я понимаю в explorerframe.dll имеется интерфейс ITaskbarList3, содержащий нужные функции.
Проблемы две: я плохо понимаю суть интерфейсов, я не знаю как добраться до функции из VB6

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #7 Добавлено: 21.01.10 18:44
Ггггы)) Я ща попробовал на С# - забавная игрушка получилась!
Проблемы две: я плохо понимаю суть интерфейсов, я не знаю как добраться до функции из VB6

Судя по сишным примерам
  1.  
  2. // Create an instance of ITaskbarList3
  3.     ITaskBarList3 *ptbl;
  4.     HRESULT hr = CoCreateInstance(CLSID_TaskbarList,
  5.                                   NULL,
  6.                                   CLSCTX_INPROC_SERVER,
  7.                                   IID_PPV_ARGS(&ptbl);


 тебе надо копать в сторону CoCreateInstance чтобы создать экзепляр объекта который реализует этот интерфейс.. и уже с ним работать..

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 21.01.10 19:14
Cудя по всему тебе еще понадобится CLSIDFromString
Плюс проштудировать вот эту статейку http://vbrussian.com/Article.asp?ID=110
в частности раздел - Создаем COM-объект по его GUID-у... там более менее все описано..

ну и осталось дело за малым.. сесть и все написать.. )))
З.Ы Нужные GUID есть в документации
з.ы.ы Тебе нужен не ITaskBarList3 а ITaskBarList.. этот интерфейс дает полный доступ к TaskBar Extentions, а ITaskBarList3 - это всего лишь частный случай, прародитель...

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 21.01.10 19:31
Чтоб меньше искать было... Guid("56FDF344-FD6D-11d0-958A-006097C9A090";)
вот этот интерфейс тебе нужен.. он дает доступ ко всем фичам таскбара

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 21.01.10 20:23
Создать нужный COM-объект легко, прочитав любой букварь по COM. А вот чтобы заюзать IUnknown-унаследованный интерфейс, в VB6 нужны хаки, описанные тут: http://www.vbstreets.ru/VB/Articles/65974.aspx

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 21.01.10 20:52
мда... :((( Без IDispatch реально танцы с бубном получаются..

Ответить

Номер ответа: 12
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #12
Добавлено: 21.01.10 21:45
Вуухуу! Предвещается много кодинга и размышлений) Только я хотел написать, что не получается работать с объектом=)
Private Function ObjectCreate(CLSID As String, IID As String) As Object
    ;Dim myObj As Object, IID_C1(15) As Byte
    Call CLSIDFromString(StrPtr(CLSID), IID_C1(0))
    Call CLSIDFromString(StrPtr(IID), IID_C2(0))
    If Not (CoCreateInstance(IID_C1(0), 0&, CLSCTX_ALL, IID_C2(0), myObj) = 0&;) Then _
       Set myObj = Nothing
    Set ObjectCreate = myObj
End Function



Как я понимаю мне нужен файл shobjidl.h из Win7 SDK, чтобы определить номера функций, но качать ради него ~4Гб вообще не хочется)

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 21.01.10 22:09
http://www.koders.com/noncode/fid66A0E1FAB1C94FB665CFA5236DA4CDAEA22742CE.aspx

Ответить

Номер ответа: 14
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #14
Добавлено: 21.01.10 22:57
EROS, это из ReactOS, они еще далеко не полностью реализовали функциональность винды.
Вот значит я нашел файлик: http://www.openwatcom.org:4000/@md=c&cd=//&cdf=//depot/openwatcom/bld/w32api/include/shobjidl.mh&ra=s&rc=s&c=LT9@//depot/openwatcom/bld/w32api/include/shobjidl.mh?ac=64
Написал класс:
  1. Option Explicit
  2. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  3. Private Const CLSID_TaskbarList As String = "{56FDF344-FD6D-11d0-958A-006097C9A090}"
  4. Private Const IID_ITaskbarList3 As String = "{EA1AFB91-9E28-4B86-90E9-9E9F8A5EEFAF}"
  5. Private Enum ITaskbarList3Members
  6.                                 '/* ITaskbarList methods */
  7.     HrInit_ = 3                 'STDMETHOD( HrInit )( THIS ) PURE;
  8.     AddTab_ = 4                 'STDMETHOD( AddTab )( THIS_ HWND ) PURE;
  9.     DeleteTab_ = 5              'STDMETHOD( DeleteTab )( THIS_ HWND ) PURE;
  10.     ActivateTab_ = 6            'STDMETHOD( ActivateTab )( THIS_ HWND ) PURE;
  11.     SetActiveAlt_ = 7           'STDMETHOD( SetActiveAlt )( THIS_ HWND ) PURE;
  12.                                 '/* ITaskbarList2 methods */
  13.     MarkFullscreenWindow_ = 8   'STDMETHOD( MarkFullscreenWindow )( THIS_ HWND, BOOL ) PURE;
  14.                                 '/* ITaskbarList3 methods */
  15.     SetProgressValue_ = 9       'STDMETHOD( SetProgressValue )( THIS_ HWND, ULONGLONG, ULONGLONG ) PURE;
  16.     SetProgressState_ = 10      'STDMETHOD( SetProgressState )( THIS_ HWND, TBPFLAG ) PURE;
  17.     RegisterTab_ = 11           'STDMETHOD( RegisterTab )( THIS_ HWND, HWND ) PURE;
  18.     UnregisterTab_ = 12         'STDMETHOD( UnregisterTab )( THIS_ HWND ) PURE;
  19.     SetTabOrder_ = 13           'STDMETHOD( SetTabOrder )( THIS_ HWND, HWND ) PURE;
  20.     SetTabActive_ = 14          'STDMETHOD( SetTabActive )( THIS_ HWND, HWND, DWORD ) PURE;
  21.     ThumbBarAddButtons_ = 15    'STDMETHOD( ThumbBarAddButtons )( THIS_ HWND, UINT, LPTHUMBBUTTON ) PURE;
  22.     ThumbBarUpdateButtons_ = 16 'STDMETHOD( ThumbBarUpdateButtons )( THIS_ HWND, UINT, LPTHUMBBUTTON ) PURE;
  23.     ThumbBarSetImageList_ = 17  'STDMETHOD( ThumbBarSetImageList )( THIS_ HWND, HIMAGELIST ) PURE;
  24.     SetOverlayIcon_ = 18        'STDMETHOD( SetOverlayIcon )( THIS_ HWND, HICON, LPCWSTR ) PURE;
  25.     SetThumbnailTooltip_ = 19   'STDMETHOD( SetThumbnailTooltip )( THIS_ HWND, LPCWSTR ) PURE;
  26.     SetThumbnailClip_ = 20      'STDMETHOD( SetThumbnailClip )( THIS_ HWND, RECT * ) PURE;
  27. '                                '/* ITaskbarList4 methods */
  28. '    SetTabProperties_ = 21      'STDMETHOD( SetTabProperties )( THIS_ HWND, STPFLAG ) PURE;
  29. End Enum
  30. Private Obj As Long
  31.  
  32. Private Sub Class_Initialize()
  33.     Dim CLSID As Guid, InterfaceGuid As Guid
  34.     Call CLSIDFromString(StrConv(CLSID_TaskbarList, vbUnicode), CLSID)
  35.     Call IIDFromString(StrConv(IID_ITaskbarList3, vbUnicode), InterfaceGuid)
  36.     Call CoCreateInstance(CLSID, 0, 1, InterfaceGuid, Obj)
  37. End Sub
  38.  
  39. Private Sub Class_Terminate()
  40.     Call CallInterface(Obj, unk_Release, 0)
  41. End Sub
  42.  
  43. Public Sub SetProgressState(ByVal hwnd As Long, ByVal TBPFLAG As Long)
  44.     Call CallInterface(Obj, SetProgressState_, 2, hwnd, TBPFLAG)
  45. End Sub
  46.  
  47. Public Sub SetProgressValue(ByVal hwnd As Long, ByVal ullCompleted As Long, ByVal ullTotal As Long)
  48.     Dim Completed(7) As Byte, Total(7) As Byte
  49.     CopyMemory Completed(0), ullCompleted, 4
  50.     CopyMemory Total(0), ullTotal, 4
  51.     Call CallInterface(Obj, SetProgressValue_, 3, hwnd, Completed, Total)
  52. End Sub


Проект целиком: http://rghost.ru/870020

Проблема в том, что не получается вызвать SetProgressValue, хотя SetProgressState работает как надо.
В SetProgressValue параметры типа ULONGLONG (8 байт?), что я туда только не передавал, и currency и double и arr(7) as byte
http://msdn.microsoft.com/en-us/library/dd391698(VS.85).aspx

Ответить

Номер ответа: 15
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 22.01.10 02:13
http://rghost.ru/871119 Вроде всё самое гламурное реализовал)
Overlay иконки, всплывающие подсказки, кнопки (с обработкой событий от них), выбор области отображаемой на тамбнейле и прогресс

С SetProgressValue сделал так:
  1. Call CallInterface(Obj, SetProgressValue_, 5, hwnd, ullCompleted, 0, ullTotal, 0)
То есть старшие 4 байта оставляю нулевыми. Полумера, но самое простое решение.

Всё. Мишн комплитед. EROS, Sharp, спасибо вам=)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам