MSN kişi listesi almak ..

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

MSN kişi listesi almak ..

Mesaj gönderen s1lv3r »

Arkadaşlar delphi ile yaptığım program içinden MSN kişi listesini kayıt edebilirmiyim ?
Kullanıcı avatarı
AliErdem
Üye
Mesajlar: 157
Kayıt: 16 Nis 2006 02:57

Mesaj gönderen AliErdem »

msn kişi listeleri messenger klasörünün içinde *.ctt uzantılı dosya olarak kayıtta tutuluyor ve notepad e atınca text olarak okunabiliyor o dosyayı once text gibi okutup istedğin işlemleri yapabilirsin


ko0lay gelsin
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Hayır msn içinde kayıt tutulmuyor tahmini bir cevap :)

Nasıl alabileceğim konusunda bilgisi olan var mı?
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Delphi'de Project Menüsünden, Import Type Library'i seç ve oradan da Messenger API Type Library kütüphanesini importla. Paketi install et ve daha sonra da COM arabirimini kullanarak kişi listesini al

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

hatta daha mesenger apilerini kullanmakla ilgili bi rkonu geçmişti forumda

gene opt2000 arkadaş orda güzel açıklamalar vermişti...
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Mesaj gönderen Trial_Cooder »

Programı Msn'den Kişiler/Kişi Listesini Kaydet Seçeneğini Seçtirebilirsen (Tab Vs Tuşlara Bastırarak) Olur.
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Opt2000 yazdı:Selam,

Delphi'de Project Menüsünden, Import Type Library'i seç ve oradan da Messenger API Type Library kütüphanesini importla. Paketi install et ve daha sonra da COM arabirimini kullanarak kişi listesini al

Kolay gelsin,
Bahadır Alkaç
Denedim fakat nasıl kullanacağım konusunda pek bir bilgim yok. Konuyu biraz daha açarsanız sevinirim.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

COM arabiriminden kasıt acaba com+ sekmesindeki comadmincatalogmudur?
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

COM arabiriminden kastım ComAdminCatalog değil. Type Library'i import edip o classları kullandığınız zaman zaten COM arabirimini kullanmış oluyorsunuz. Bunu özellikle belirtmemin bir sebebi var. Daha önce COM arabirimi ile program yazanlar bilirler. COM arabiriminde RefCount mantığı vardır. Bir arabirimi kullanırken Query ederek ondan bir instance alırsınız ama Release etmek için değişkeninizi nil'e eşitlemeniz yeterlidir. C++ bu Smart Pointer's olarak geçiyor. Bu arada MSN'i Delphi'den hiç kullanmadım, ama daha önceki tecrübelerime dayanarak söylüyorum bunu.

Bu arada MSN ile ilgili bir iki tavsiyede bulunayım. MSN'de birisine kodla mesaj göndermeniz mümkün değil, sadece daha önce geçen başlıkta olduğu gibi klavya simülasyonu ile mümkün. Bu da sağlıklı bir çözüm değil. Ayrıca MSN'i değil, aslında Windows Messenger'i kullanıyorsunuz ve bunu rahatça kullanabilmek için size tavsiyem, Visual C++ ile bir wrapper DLL yazmanız. Yoksa Delphi'de çok başınız ağrıyabilir.

Kolay gelsin,
Bahadır Alkaç
Kullanıcı avatarı
Trial_Cooder
Üye
Mesajlar: 236
Kayıt: 17 Nis 2006 04:44

Msn Penceresine Yazı Yazdırma

Mesaj gönderen Trial_Cooder »

Bu Kod İle Nick'ini Bildiğin Bir Kişiye Mesaj Yazdırabilirsin ;)

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
    H,L: HWND;
    i:boolean;
begin
    H:=FindWindow(nil,PChar('Kişinin Nicki - Konuşma')); //Aslında ben pencere ismini alarak handle numarasını aldım fakat delphi ile birlikte gelen winsight32 programı ile classname olarak alabilirsiniz.
    if h=0 then
    begin
        showmessage('Nick Bulunamadı!');
        exit;
    end;

    L:=FindWindowEx(H,0,PChar('DirectUIHWND'),nil); // DirectUIHWND winsight323 programından yararlanarak buldum gerçekten de window pencereleri ile işlem yapacaksanız çok güzel bir araç

    if L=0 then
    begin
        showmessage('P Nick Bulunamadı!');
        exit;
    end;

    PostMessage(H, WM_SETFOCUS, 1, 0); //Arakadaşımın penceresine focuslandım
    PostMessage(L,wm_char,72,0); //buradada istediğim msjı Ascii codlarını karakter karakter yazıp gönderdim
    PostMessage(L,wm_char,85,0);
    PostMessage(L,wm_char,83,0);
    PostMessage(L,wm_char,79,0);
    PostMessage(L,wm_char,78,0);
    PostMessage(L,wm_char,69,0);
    PostMessage(L,wm_char,84,0);
    PostMessage(L,wm_char,46,0);
    PostMessage(L,wm_char,67,0);
    PostMessage(L,wm_char,79,0);
    PostMessage(L,wm_char,77,0);
    PostMessage(L,WM_KEYDOWN,vk_return,0);//buradada entera basıp send işlemini yerine getirmiş bulundum...
end;
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

Trial_Cooder istediğim o değildi :)

Uzun süredir COM arabiriminle uğraşıyorum fakat hala bir çözüm bulmuş değilim. Daha kısa pratik bir yolunu bulamazmıyız ?
Kullanıcı avatarı
Opt2000
Üye
Mesajlar: 216
Kayıt: 09 Tem 2003 10:04

Mesaj gönderen Opt2000 »

Selam,

Eğer istediğin sadece Messenger kişi listesini almaksa aşağıdaki işlemleri uygula.

Project->Import Type Library menüsünü çalıştır. Listeden Messenger Type Library (Version 1.0) elemanını seç. Sonra da aşağıdaki Install düğmesine bas. Eğer kazara Replace falan gibi saçma sapan şeyler söylerse evet de :)

Tavsiyem bu bileşen için yeni bir paket tanımlaman. Ben adını Messenger koydum. Sonra bu paketi install et. Component Palette'den ActiveX sekmesine git ve oradan da forma bir adet MsgrObject bileşeni ekle. Bileşenin AutoConnect özelliğini True yap, adını da MSN koy. Ayrıca bir tane de buton ve ListBox koy. ListBox'ın adının lstUserList olarak değiştir. Sonra da Buton'un OnClick eventine aşağıdaki kodu yaz.

Kod: Tümünü seç

var
  I:Integer;
  Item:string;
begin
  I:=MSN.List[0].Count;
  for I:=0 to MSN.List[0].Count-1 do
  begin
    Item:=MSN.List[0].Item(I).FriendlyName + ' - ' + MSN.List[0].Item(I).EmailAddress;
    lstUserList.Items.Add(Item);
  end;
Böylece MSN'deki kişi listesini almış olursun. Burada kullanıcının MSN'den login olduğunu düşünüyoruz. Eğer kullanıcı login olmamışsa elbette sorun çıkaracaktır. Ama bileşeni iyice inceleyecek olursan bunun için de çözüm bulabilirsin.

Tekrar söylüyorum. MSN veya Messenger üzerinden legal bir yöntemle mesaj atmak mümkün değil, sadece şunu yapabilirsin, MSN'in protokolünü kullanarak kendi yazdığın bir mesaj programı ile MSN kullanıcılarına mesaj atabilirsin. En güzel örneği de sanırım Gaim. Üstelik açık kaynak kodlu bir proje.

Eğer ısrarla MSN'den mesaj atmak istiyorum diyorsan, o zaman Trial_Cooder'in verdiği koddaki gibi yöntemler kullanman gerekiyor. MS'in dokümanlarından okuduğum kadarıyla MS, güvenlik sebeplerinden dolayı mesaj atma ve gelen mesajı alma işlemlerine izin vermiyor.

Kolay gelsin,
Bahadır Alkaç
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

paketi yüklerken

function TMsgrObject.Get_LocalState: MSTATE;
begin
Result := DefaultInterface.LocalState;
end;

bu satırda cannot read a write-only property hatası verdi :cry:
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

MSN soket protokolu zor olmasa da, hemen her major sürümde biryerilerini değiştirdiklerinden, sürekli güncel tutmak gerekmekte. Bulabilirsem eğer MSN ile kimlik doğrulaması yapıp oturum açabilen bir kodum olacaktı biryerlerde.
s1lv3r
Üye
Mesajlar: 91
Kayıt: 09 Nis 2006 03:03

Mesaj gönderen s1lv3r »

fduman yazdı:MSN soket protokolu zor olmasa da, hemen her major sürümde biryerilerini değiştirdiklerinden, sürekli güncel tutmak gerekmekte. Bulabilirsem eğer MSN ile kimlik doğrulaması yapıp oturum açabilen bir kodum olacaktı biryerlerde.
Bekliyorum. İlginiz için teşekkürler.
Cevapla