Регистрирайте се безплатно, за да използвате услугите на сайта! | Вход
Начало Новини ИТ Работа Форум Видео Уроци Скриптове WiFi точки MyLinks Mytech Още


Нова тема
Пример за код
Тази тема е погледната 128 пъти
Добави темата към любими | Принтирай темата | Нова тема 
Публикувано на: 03.12.2008 23:25
Sentetic
Чирак

Мнения: (9)

Искам да напиша програмка която ще е полезна на мене и на други хора може би - за поздрав с песента която слушаш в скупе(има една такава някой може да я ползва).Ако някой има малко свободно време да напише някакъв код за такава програмка и аз по него да се ръководя и да я напиша.Бтв не искам да ми го пишете целия на готово просто искам да ми напишете малка част как да го започна,не ми трябва готов искам аз да го напиша.Благодаря :)


 
---------------------------
Потребител от: 26.11.08 | Всички уроци от Sentetic | Всички скриптове от Sentetic
напиши eMail напиши лично съобщение виж профила на Sentetic
Публикувано на: 04.12.2008 10:07
FlyAway
Ронин

Мнения: (55)

Това е един клас от една програмка която писах за автоматичен отговор на получено съобщение. Незнам дали ще ти свърши някаква работа, но все пак дава някакъв скелет на това което искаш да правиш.
Може да си изтеглиш *.idl файла (аз го имам ако не го намериш) и от там ще си правиш експерименти по описанието на методите и пропъртитата.
Общо казано моята програма реагира на (някои) събития когато ръчкаш по Скайпа.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#ifndef __CSkypeManager_H
#define
__CSkypeManager_H

#pragma
once

class CSkypeManager : public _ISkypeEvents
{
public:
   
CSkypeManager(const GUID& iidInterface, const IID& iidLib, int verMajor, int verMinor);
    ~
CSkypeManager();

public:
   
void Init();
   
bool Attach();
   
bool Detach();
   
void SetTextSource(HWND hWnd);

   
// IUnknown methods
   
STDMETHOD_(ULONG, AddRef)()
    {
       
return 1;
   
}
   
STDMETHOD_(ULONG, Release)()
    {
       
return 1;
   
}

   
STDMETHOD(QueryInterface)(REFIID iid, void** ppvObject)
    {
       
HRESULT hr = S_OK;
       
if(iid == IID_IUnknown)
        {

            *
ppvObject = (IUnknown*)this;
       
}
       
else if(iid == __uuidof(IDispatch))
        {

            *
ppvObject  = (IDispatch*)this;
       
}
       
else if(iid == __uuidof(_ISkypeEvents))
        {

            *
ppvObject = (_ISkypeEvents*)this;
       
}
       
else
       
{
           
hr = E_NOINTERFACE;
            *
ppvObject = NULL;
       
}

       
return hr;
   
}

   
// IDispatch methods
   
STDMETHOD(GetTypeInfoCount)(UINT* pctinfo);
   
STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo** pptinfo);
   
STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid);
   
STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid,
       
LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
       
EXCEPINFO* pexcepinfo, UINT* puArgErr);

public:
   
// _ISkypeEvents interface
   
STDMETHOD(MessageStatus)(IChatMessage* pMessage, TChatMessageStatus Status);
   
STDMETHOD(UserStatus)(TUserStatus Status);
   
STDMETHOD(OnlineStatus)(IUser* pUser, TOnlineStatus eStatus);

protected:
   
void Advise(BOOL bAdvise, IUnknown* pUnkSource, const IID& riid, DWORD& dwCookie);
   
void AdviseSkype(BOOL bAdvise);

private:
   
DWORD                    m_dwSkypeEventsCookie;
   
CComPtr<ISkype>            m_spSkype;
   
CComPtr<IConversion>    m_spConversion;
   
CComPtr<IClient>        m_spClient;

private:
   
HWND                    m_hWndSource;
};

#endif //CSkypeManager_H

Сега CPP файла.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include "StdAfx.h"
#include
"SkypeManager.h"

CSkypeManager::CSkypeManager(const GUID& iidInterface, const IID& iidLib, int verMajor, int verMinor)
{
   
m_dwSkypeEventsCookie = 0;
   
m_hWndSource = NULL;
}

CSkypeManager::~CSkypeManager()
{
}

STDMETHODIMP CSkypeManager::MessageStatus(IChatMessage* pMessage, TChatMessageStatus Status)
{
   
HRESULT hr = 0;
   
if(Status == cmsReceived)
    {
       
TChatMessageType eMsgType;
       
pMessage->get_Type(&eMsgType);
       
if(eMsgType == cmeSaid)
        {
           
CComPtr<IChat> spChat;
           
if(S_OK == pMessage->get_Chat(&spChat) && spChat && m_hWndSource)
            {
               
CComPtr<IChatMessage> spChatMessage;
                ::
SendMessage(::GetParent(m_hWndSource), WM_MSG_RECEIVED, 0, 0);
               
TCHAR tchText[256];
                ::
GetWindowText(m_hWndSource, tchText, 256);
               
hr = spChat->SkypeSendMessage(CComBSTR(tchText), &spChatMessage);
           
}
        }
    }
   
return hr;
}

STDMETHODIMP CSkypeManager::UserStatus(TUserStatus /*Status*/)
{
   
return (m_spSkype && S_OK == m_spSkype->ChangeUserStatus(cusOnline));
}

STDMETHODIMP CSkypeManager::OnlineStatus(IUser* pUser, TOnlineStatus eStatus)
{

   
return S_OK;
}

STDMETHODIMP CSkypeManager::GetTypeInfoCount(UINT* pctinfo)
{
   
return E_NOTIMPL;
}

STDMETHODIMP CSkypeManager::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo)
{
   
return E_NOTIMPL;
}

STDMETHODIMP CSkypeManager::GetIDsOfNames(REFIID riid, LPOLESTR* rgszNames, UINT cNames,
   
LCID lcid, DISPID* rgdispid)
{
   
return E_NOTIMPL;
}

STDMETHODIMP CSkypeManager::Invoke(DISPID dispidMember, REFIID riid,
   
LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
   
EXCEPINFO* pexcepinfo, UINT* puArgErr)
{
   
HRESULT hRes = 0;

   
if(dispidMember == 0x07) // Promenil si OnlineStatus (vika se CSkypeManager::OnlineStatus)
   
{
       
CComPtr<IUser> spUser;

       
hRes = pdispparams->rgvarg[1].pdispVal->QueryInterface(__uuidof(IUser), (void**)&spUser);
       
if(hRes != S_OK)
           
return hRes;

       
TOnlineStatus eStatus = (TOnlineStatus)pdispparams->rgvarg[0].intVal;

       
OnlineStatus(spUser, eStatus);   
   
}
   
else if(dispidMember == 0x06) // // Promenil si UserStatus ot (vika se CSkypeManager::UserStatus)
   
{
       
TUserStatus eStatus = (TUserStatus)pdispparams->rgvarg[0].intVal;
       
       
UserStatus(eStatus);
   
}
   
else if(dispidMember == 0x0b) // Polu4il si suob6tenie ot subesednika ti (vika se CSkypeManager::MessageStatus)
   
{
       
CComPtr<IChatMessage> spChatMessage;

       
hRes = pdispparams->rgvarg[1].pdispVal->QueryInterface(__uuidof(IChatMessage), (void**)&spChatMessage);
       
if(hRes != S_OK)
           
return hRes;

       
TChatMessageStatus eStatus = (TChatMessageStatus)pdispparams->rgvarg[0].intVal;

       
MessageStatus(spChatMessage, eStatus);
   
}

   
return S_OK;
}

void CSkypeManager::Advise(BOOL bAdvise, IUnknown* pUnkSource, const IID& riid, DWORD& dwCookie)
{
   
if (!bAdvise && dwCookie == 0)
       
return;

   
if (bAdvise && dwCookie != 0)
       
Advise(FALSE, pUnkSource, riid, dwCookie);

   
CComPtr<IConnectionPointContainer> spContainer;
   
if (pUnkSource
            &&
SUCCEEDED(pUnkSource->QueryInterface(IID_IConnectionPointContainer, (void**)&spContainer)))
    {
       
CComPtr<IConnectionPoint> spCP;
       
if ( SUCCEEDED(spContainer->FindConnectionPoint(riid, &spCP)) )
        {
           
CComPtr<IUnknown> spUnkThis;
           
this->QueryInterface(IID_IUnknown, (void**)&spUnkThis);

           
if (bAdvise)
               
spCP->Advise(spUnkThis, &dwCookie);
           
else
               
spCP->Unadvise(dwCookie);
       
}
    }

   
if (!bAdvise)
       
dwCookie = 0;
}

void CSkypeManager::AdviseSkype(BOOL bAdvise)
{
   
CComPtr<IUnknown> spUnkSkype;

   
if (!m_spSkype || FAILED(m_spSkype->QueryInterface(IID_IUnknown, (void**)&spUnkSkype)))
       
return;

   
Advise(bAdvise, spUnkSkype, __uuidof(_ISkypeEvents), m_dwSkypeEventsCookie);
}

void CSkypeManager::Init()
{
   
if(S_OK != ::CoCreateInstance(__uuidof(Skype), NULL, CLSCTX_ALL, __uuidof(ISkype), (void**)&m_spSkype))
       
return;

   
if(S_OK != m_spSkype->get_Convert(&m_spConversion))
       
return;

   
if(S_OK != m_spSkype->get_Client(&m_spClient))
       
return;

   
AdviseSkype(TRUE);
}

bool CSkypeManager::Attach()
{
   
if(m_spSkype == NULL || m_spConversion == NULL || m_spClient == NULL)
       
return false;

   
VARIANT_BOOL vbRes = VARIANT_FALSE;
   
if(S_OK != m_spClient->get_IsRunning(&vbRes))
       
return false;

   
if(vbRes == VARIANT_FALSE)
    {
       
if(S_OK != m_spClient->Start(VARIANT_FALSE, VARIANT_FALSE))
           
return false;
   
}

   
if(S_OK != m_spSkype->ChangeUserStatus(cusOnline))
       
return false;

   
TAttachmentStatus eAttachmentStatus;
   
if(S_OK != m_spSkype->get_AttachmentStatus(&eAttachmentStatus))
       
return false;

   
if(eAttachmentStatus == apiAttachSuccess)
    {
       
long lProtocol = 0;
       
if(S_OK != m_spSkype->get_Protocol(&lProtocol))
           
return false;

       
if(S_OK != m_spSkype->Attach(lProtocol, VARIANT_TRUE))
           
return false;
   
}

   
return true;
}

bool CSkypeManager::Detach()
{
   
AdviseSkype(FALSE);

   
return true;
}

void CSkypeManager::SetTextSource(HWND hWnd)
{
   
m_hWndSource = hWnd;
}

А, това трябва да го включиш някъде (в моя случай е в stdafx.h)

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <tchar.h>
#include
<windows.h>
#include
<atlbase.h>
#include
<atlcom.h>
#include
<comutil.h>
#include
<atlcoll.h>
#include
<atlstr.h>
#include
<atlwin.h>
#include
<Commctrl.h>
#include
"resource.h"

using namespace ATL;

#define WM_MSG_RECEIVED WM_USER + 200

#import
"Skype4COM.dll"    no_namespace raw_interfaces_only  named_guids rename("CreateEvent", "SkypeCreateEvent") rename("SendMessage", "SkypeSendMessage")

WM_MSG_RECEIVED се прихваща от главния прозерец (или който искаш).

А, ето как се използва:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
   
case WM_INITDIALOG:
       
{
           
g_pSkypeManager = new CSkypeManager(__uuidof(_ISkypeEvents), LIBID_SKYPE4COMLib, 1, 0);
           
g_pSkypeManager->Init();
           
if(g_pSkypeManager->Attach() == true)
            {
               
SendMessage(hwndStatusBar, SB_SETTEXT, 0, (LPARAM)_T("Successfully attached to Skype"));
           
}
           
else
           
{
               
SendMessage(hwndStatusBar, SB_SETTEXT, 0, (LPARAM)_T("Cannot attach to Skype"));
           
}
           
g_hWnd = hwnd;

           
TCHAR tchText[] = _T("Don't disturb !");
            ::
SetWindowText(::GetDlgItem(hwnd, IDC_EDIT1), tchText);
           
g_pSkypeManager->SetTextSource(::GetDlgItem(hwnd, IDC_EDIT1));
       
}
       
return 0;

...


 
---------------------------
Потребител от: 18.08.08 | Всички уроци от FlyAway | Всички скриптове от FlyAway
напиши eMail напиши лично съобщение виж профила на FlyAway
 1 посетител чете тази тема (0 потребители и 1 гост)  
Активни потребители: ---
   




mytech.bg © 2004 - 2009 | Контакти | За реклама