Ik wil in mijn programma afvangen als een gebruiker van online status wijzigd op MSN.
Daarvoor moet ik dit event afvangen:
Daar ben ik achter gekomen door dit programmatje te gebruiken.
Dit event is het enige event wat triggerd als een gebruiker online komt.
Nu heb ik de volgende code:
Ik moet een message posten naar de mainform omdat de messagehandler van MSN niet multithreaded is. Dit werkt ook perfect.
Het probleem zit hem hier; volgens de event definitie moet pUser een Long Pointer naar een Dispatch Interface zijn. Hij stuurt altijd -1 terug. Ik krijg dus van MSN geen pointer terug naar de user die van state veranderd.
Ik heb de type library van MSN geimport. Delphi zet zelf de types op OleVariant.
Nu kan ik hier wel omheen werken door elke keer een snapshot te maken van alle online users en dan op het event kijken wie er online komt, maar ik doe het liever via die DispInterface omdat dat ook zou moeten werken. Wil iig begrijpen waarom hij het niet doet.
Daarvoor moet ik dit event afvangen:
code:
1
| OnUserStateChanged(LPDISPATCH pUser, long mPrevState, BOOL* pfEnableDefault) |
Daar ben ik achter gekomen door dit programmatje te gebruiken.
Dit event is het enige event wat triggerd als een gebruiker online komt.
Nu heb ik de volgende code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
| procedure TfrmMSN.UserStateChanged(Sender: TObject; var pUser: OleVariant; mPrevState: MSTATE; var pfEnableDefault: OleVariant); var Naam : string; begin PostMessage(Self.WindowHandle,WM_USER+2,pUser,mPrevState); end; procedure TfrmMSN.OnlineMessage(var Msg: TMessage); begin ShowMessage(IntToStr(Msg.WParam)); end; |
Ik moet een message posten naar de mainform omdat de messagehandler van MSN niet multithreaded is. Dit werkt ook perfect.
Het probleem zit hem hier; volgens de event definitie moet pUser een Long Pointer naar een Dispatch Interface zijn. Hij stuurt altijd -1 terug. Ik krijg dus van MSN geen pointer terug naar de user die van state veranderd.
Ik heb de type library van MSN geimport. Delphi zet zelf de types op OleVariant.
Nu kan ik hier wel omheen werken door elke keer een snapshot te maken van alle online users en dan op het event kijken wie er online komt, maar ik doe het liever via die DispInterface omdat dat ook zou moeten werken. Wil iig begrijpen waarom hij het niet doet.