
A mellékelt példaprogram megnyitása előtt a Messenger_TLB.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A Windows Messenger program a Microsoft cég ingyenes szolgáltatása. A program ingyenesen letölthető az alábbi címről:
http://messenger.microsoft.com/hu/default.asp?client=0
A program interfészének használatához importálnunk kell a Messenger típuskönyvtárát. Ehhez válasszuk a Projects – Import Type Library menüpontot. Kattintsunk az Add feliratú gombra, majd keressük meg a Messenger program indító állományát, az „msmsgs.exe”-t. Az EXE alapértelmezés szerint a C:\Program Files\Messenger alkönyvtárban található. Az Import Type Library ablakban válasszuk az Install feliratú gombot, és telepítsük az állományban található komponenst.
Az ActiveX palettán megjelenik az MsgrObject komponens.
Nyissunk egy új alkalmazást és helyezzük el rajta ezt a komponenst.
A uses listában fel kell sorolnunk a ShellAPI, IniFiles és COMOBJ unit-ok neveit. Ezekre a későbbiekben szükségünk lesz.
Ahhoz, hogy a CTRL+SHIFT+F1-F11 billentyűkombinációkat ismerje a Windows, a Form OnCreate eseményében regisztrálnunk kell ezeket a kombinációkat.
for i:=112 to 123 do
RegisterHotKey(Handle,i,MOD_CONTROL+MOD_SHIFT,i);
Az egyes kombinációkat megadhatjuk egyesével is, de mivel az F1-F12 gombok kódjai egymás után helyezkednek el, és az F1 kódja 112, egy for ciklus segítségével regisztrálhatjuk a rendszerben a billentyűkombinációkat.
A RegisterHotKey első paramétere a Form azonosítója. A második paraméterben egy számot kell megadnunk, amely a továbbiakban a billentyűkombinációt azonosítani fogja. A harmadik paraméterben kell megadnunk a használandó módosító billentyűket (CTRL és SHIFT). Végül a negyedik paraméterbe kerül a billentyű kódja.
Az F1-F11 billentyűkhöz e-mail címeket rendelünk, az F12 billentyű lenyomásakor kilépünk a programból.
A regisztrált billentyűkombinációkat a Form OnDestroy metódusában szüntetjük meg, az UnRegisterHotKey, API függvénnyel.
for i:=112 to 123 do
UnRegisterHotKey(Form1.Handle,i);
A Form OnCreate eseményében kell gondoskodnunk arról, hogy alkalmazásuk ne a tálcán jelenjen meg, hanem csak egy jelzőikonja legyen az óra mellett.
Az óra mellé a Shell_NotifyIcon függvény segítségével helyezhetünk el és törölhetünk egy saját ikont.
Shell_NotifyIcon(NIM_ADD,@FIconData);
A fenti függvényhívás egy ikon létrehozására szolgál. Ha az első paraméterben NIM_DELETE-et adunk meg, akkor a függvény törli az ikont.
Azt hogy az ikon ilyen képpel és tulajdonságokkal jelenjen meg, a második paraméterben adhatjuk meg, egy TNotifyIconData típusú változó segítségével.
Gondoskodnunk kell arról is, hogy alkalmazásunk ikonja ne jelenjen meg a tálcán, ezt az alábbi függvényhívás segítségével érhetjük el:
SetWindowLong(Application.Handle, GWL_EXSTYLE,GetWindowLong(Application.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
Azt, hogy melyik billentyűhöz milyen e-mail cím tartozzon, az Address.ini fájlban állíthatjuk be, a fájlban szereplő kulcsok segítségével.
Az ini állomány tartalmát a Form OnCreate eseményében olvassuk be, az FAddresses tömbbe. A tömb 11 sztring elemet tárol, a 11 gombnak megfelelően.
Ahhoz, hogy alkalmazásunk megkapja a HotKey lenyomásakor keletkező üzenetet az operációs rendszertől, létre kell hoznunk a következő függvényt:
procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;
A függvény belsejében kell megírnunk azokat az eseményeket, amelyeknek forróbillentyűink lenyomásakor kell futni.
A függvény akkor kerül meghívásra, amikor egy regisztrált HotKey lenyomásra kerül. A lenyomott kombináció értékét az alábbi módon kérdezhetjük le:
if Msg.HotKey in [112..122] then begin
A fenti vizsgálatnál azokat a kódokat kérdezzük le, amelyeket mi rendeltünk hozzá az egyes kombinációkhoz.
A billentyűkombinációk lenyomása esetén, csak akkor dolgozzuk fel azt, ha a Messenger program be van kapcsolva.
if MsgrObject1.LocalState<>MSTATE_OFFLINE then begin
A billentyűhöz tartozó e-mail cím alapján meg kell keresnünk a hozzá tartozó partnert.
Users:=MsgrObject1.List[0];
for i:=0 to Users.Count-1 do begin
User:=Users.Item(i);
if User.EmailAddress=FAddresses[Msg.Hotkey-111] then
break;
end;
A partnerek listáját az MsgrObject1 List[0] eleme tartalmazza, melynek típusa IMsgrUsers. Az IMsgrUsers egy kollekció, amely IMsgrUser elemeket tartalmaz. Egyetlen partnert ez az interfész azonosít.
Csak olyan partnerhez kapcsolódhatunk, aki már szerepel a partnerlistánkban, valamint az állapota aktív.
if (i=Users.Count-1) and (User.EmailAddress<>FAddresses[Msg.Hotkey-111]) or
(User.State=MSTATE_OFFLINE) then
Exit;
A Beszélgetés ablak megnyitásához az ImessengerApp interfészre van szükségünk, amelyet az alábbi módon érhetünk el.
MsgrApp:=CreateComObject(CLASS_MessengerApp) as IMessengerApp;
A LaunchIMUI metódus meghívásával nyithatjuk meg az adott partnerhez tartozó “Beszélgetés” ablakot. A metódusnak paraméterként a felhasználót azonosító objektumot kell megadnunk.
MsgrApp.LaunchIMUI(User);