mesaj penceresi mesajını kontrol etek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

mesaj penceresi mesajını kontrol etek

Mesaj gönderen kuntay »

Arkadaşlar nero programı ile kayıt yapılan cd lerin günlük olarak raporunu tutacak bir program yapmak istiyorum yani günlük kaç cd kaydedildi bayadır bir arama yaptım fakat bir sonuç elde edemedim,

aklıma bir fikir geldi neroda kayıt birince küçük bir mesaj penceresi açılıyor ve 'yazım işlemi başarı ile bitti ' yazıyor benim bu mesajı kontrol edip eğer bu mesaj geldi ise işlem yaptırabilirmiyim mesela veri tabanına şunu ekletebilirim 02/11/2006 02:30 cd kaydedildi gibi bir işlem

ikinci birşey yazım işlemi tamamlanınca büyük pencere başlığı 'bitti'
olarak değişiyor ve bu mesaj penceresi ekrana geliyor eğer mesaj penceresini kontrol edemezsem arka da kalan diğer pencere başlığı nı kontrol ederek işlem yaptıra bilirmiyim

Bu konuda yardımlarınızı bekliyorum arkadaşlar bu konu uzun zamandır benim oldukça büyük bir sorunum oldu çünkü...
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Mesaj gönderen serkan »

forumda pencere başlıklarına göre dış uygulamalara işlem yaptıran kodlar geçmişti.onlara bir bak istersen aramayı kullanarak.

nero yüklü olmadığı için bakamadım ama belki nero log tutuyordur diye düşündüm.bir şekilde log dosyasındaki bilgileri programına alabilirsin.tabi log tutuyorsa.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Arkadaşın dediği gibi
en basiti bir timer koyup pencere captin kontrolü yapıp database yazarsın.

Kod: Tümünü seç

var
  h : hwnd;
begin

    h := GetForegroundWindow;
    if GetActiveWindowCaption = 'Nero Bitti' then
    begin
gibi.........

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Timer koyarken dikkat edeceğin bir hususu bildrmek isterim.

- Örneğin Interval 1 saniye diyelim. Kullanıcı Nero'nun diyaloğuna onay verene kadar veritabanına her saniye için mükerrer kayıt söz konusu olacaktır. Bunu da göz önünde bulundurarak kontroller eklemelisin. :idea:

- Kontrollerin tutarlı olmalı. Mesela kayıt bittikten itibaren veritabanına kayıt düşüldükten sonra en az 1 CD yazacak kadar süre dikkate aldrmayabilirsin. Bu sefer de başka sorun ortaya çıkar, 10 MB'lık bir kayıt ile 700 MB'lık bir kayıt süresini aynı kefeye koyamayacağından daha düşük bir süre denetimi yapmış olman lazım.

- Bu da bilgisayar başında beklemek istemeyip ayrılan kullanıcının gelmediği her bu peryod için mükerrer kayıt demektir. :oops:

- Tabii bu diyalog penceresini kapatma işini kullanıcıya bırakmayıp senin programın tarafından kapatılmasını sağlamak çözüm olabilir.

- Aslında Timr ile değil de varsa eğer NERO'nun ihraç ettiği bir mesaja göre tetiklenebilirsin. Bunu araştırmak lazım. :o
Resim
Resim ....Resim
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

Aslında neronun şöyle bir durumu var nero kayıt bittiği zaman 'yazım işlemi başarı ile bitti ' diye bir mesaj veriyor bu mesajı alabilsem sanki sorun kalmaz gibime geliyor.
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

mrmarman yazdı:- Timer koyarken dikkat edeceğin bir hususu bildrmek isterim.

- Örneğin Interval 1 saniye diyelim. Kullanıcı Nero'nun diyaloğuna onay verene kadar veritabanına her saniye için mükerrer kayıt söz konusu olacaktır. Bunu da göz önünde bulundurarak kontroller eklemelisin. :idea:

- Kontrollerin tutarlı olmalı. Mesela kayıt bittikten itibaren veritabanına kayıt düşüldükten sonra en az 1 CD yazacak kadar süre dikkate aldrmayabilirsin. Bu sefer de başka sorun ortaya çıkar, 10 MB'lık bir kayıt ile 700 MB'lık bir kayıt süresini aynı kefeye koyamayacağından daha düşük bir süre denetimi yapmış olman lazım.

- Bu da bilgisayar başında beklemek istemeyip ayrılan kullanıcının gelmediği her bu peryod için mükerrer kayıt demektir. :oops:

- Tabii bu diyalog penceresini kapatma işini kullanıcıya bırakmayıp senin programın tarafından kapatılmasını sağlamak çözüm olabilir.

- Aslında Timr ile değil de varsa eğer NERO'nun ihraç ettiği bir mesaja göre tetiklenebilirsin. Bunu araştırmak lazım. :o
ya bi kaç deneme yaptım ama dediğin gibi sonuç alabiliyorum
kişi eğer hemen kapatmassa neroyu sürekli kayıt işliyor ben timer i kapatsam bir süre hemen arkasına bir kayıt daha yapılsa o kaçıyor
bir mantık bulamadım

internetten neronun API lerini buldum ama ne yapabileceğim konusunda bir fikrim yok daha önce Api lerle uğraşmadım türkçe kaynak da yok denecek kadar az
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- NERO'nun varsa ihraç ettiği Windows Mesajı onu araştırmaya devam et. Diğer türlü çıkış noktan şu olsun: NERO'da kayıt bitişini nasıl bir mesaj penceresinden alıyorsan, kayıt başlangıcını da benzer metodla alabilirsin. Şöyle özetleyim...

- GLOBAL bir BOOLEAN değişkenin olsun. xKAYIT diyelim. Veritabanına kayıt düşmeden önce xKAYIT değeri kontrol edilsin. Aşamalar şöyle olsun.

- Kullanıcı kayıt işlemi başlattığında xKAYIT False ise True değeri alsın.

- Nero'nun Kayıt Tamamlandı mesajıyla xKAYIT değeri kontrol edilsin ve eğer True ise kayıt düşülsün ve hemen xKAYIT değeri False yapılsın. Timer işlemeye devam etse de bir dahaki kayıt başlangıcına kadar xKAYIT değeri false kalacağından bu işlem mükerrer kaydı engelleyecektir.

- Tabii ekleyeyim, kayıt sürüyorken xKAYIT değeri TRUE olacağından bu esnada timer'da yapacağın kontrolde (KAYIT BİTTİ MESAJ penceresi açık) AND (xKAYIT = TRUE) kontrolünü birlikte yapmayı ihmal etmeyesin. Yoksa Timer tek başına xKAYIT'ı kontrol ederse bu kontrolün anlamı kalmaz değil mi :lol:
Resim
Resim ....Resim
Kullanıcı avatarı
tuanna
Üye
Mesajlar: 582
Kayıt: 06 Ara 2004 05:01
Konum: Ankara
İletişim:

Mesaj gönderen tuanna »

peki şöle bir araştırma yapsak okuma yazma kafasının durumuna göre bir seyler yapıalbilirmi ...
Siz hayal edin...Biz yapalım TuannaSoft...
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@tuanna

- Nero normal erişim için kayıt sırasında sürücüye erişime izin vermiyor istersen bunu kullanabilirsin. Okuma yazma kafası kontrolü çok ütopik bir istek en azından bu işlem için :lol: :lol: :lol:
Resim
Resim ....Resim
Kullanıcı avatarı
kuntay
Üye
Mesajlar: 86
Kayıt: 08 Tem 2003 09:41
Konum: İçel
İletişim:

Mesaj gönderen kuntay »

mrmarman yazdı:@tuanna

- Nero normal erişim için kayıt sırasında sürücüye erişime izin vermiyor istersen bunu kullanabilirsin.
yani benim sürücüye ulaşılamadığı anları kontrol etmem eğer ulaşılamıyorsa bir kayıt işlemem ulaşılıyorsa işlemem lazım

peki sürücüye erişim kurulup kurulamadığını nasıl kontrol edeceğim
Ol deyince olduran Gönüllerimizi imanla dolduran
Yüce Allahın doksandokuz ismi ile.. Selamın Aleyküm
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@kuntay

- Sana daha önce bildirdiğim metodu denemeden başka çözümler araman sağlıklı olmaz. İlla ki merak ediyorsan deneme yanılma yapacaksın. Her aşamada CD'ye erişmek için Try Except bloğu ile tetik işlem yürütüp dönen hatanın koduna bakacaksın. Bu kod numarasına göre işlem ile eşleştirip anlam kazandırıp uygulamanda kullanacaksın.
Resim
Resim ....Resim
Kullanıcı avatarı
Z.D.
Üye
Mesajlar: 104
Kayıt: 01 Nis 2006 01:48
Konum: İstanbul

Mesaj gönderen Z.D. »

Bir fikir vermesi açısından bende basit birşey yazdım. FindWindow apisini kullanarak nero burning rom handlelerine ulaşabiliriz. Programda Class ve Captionları da dinamik yaptım, bu sayede diğer nero sürümleri içinde bir problem olmaz sanırım. Benim kullandığım nero sürümü v7.0.1.4.

Resim

Classname= "NERO_BURNING_ROM Class NG"
Mesaj penceresinin başlığı = "Nero Burning ROM"

Kod: Tümünü seç

unit Unit1;

interface

uses
   StrUtils, IniFiles, ShellApi, DateUtils,
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls, ExtCtrls;


type
   TForm1 = class(TForm)
      Edit1: TEdit;
      Edit2: TEdit;
      Button1: TButton;
      Button2: TButton;
      Label1: TLabel;
      Label2: TLabel;
      Timer1: TTimer;
    GroupBox1: TGroupBox;
    ListBox1: TListBox;
      procedure Button2Click(Sender: TObject);
      procedure Button1Click(Sender: TObject);
      procedure FormShow(Sender: TObject);
      procedure Timer1Timer(Sender: TObject);
   private
    { Private declarations }
   public
    { Public declarations }
   end;
function FF_Ini(what: string; buff: string; secti: string; key: string; ppIniFileName: string): string;

var
   Form1: TForm1;
   xKayit: Boolean = TRUE;
   xClassName: PChar;
   xCaption: PChar;
implementation

{$R *.dfm}


function FF_Ini(what: string; buff: string; secti: string; key: string; ppIniFileName: string): string;
var
   WinIni: TIniFile;
   WinIniFileName: array[0..MAX_PATH] of char;
   ExePathh: string;
begin
   Result := '';
   ExePathh := ExtractFilePath(Application.ExeName);
   StrPCopy(WinIniFileName, ExePathh + ppIniFileName);

   WinIni := TIniFile.Create(WinIniFileName);
   if what = 'Oku' then begin
      try
         Result := WinIni.ReadString(secti, key, '')
      finally
         WinIni.Free;
      end;
   end
   else begin
      try
         WinIni.WriteString(secti, key, buff);
      finally
         WinIni.Free;
      end;
   end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
   SendMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   FF_Ini('Yaz', Edit1.Text, 'Option', 'ClassName', 'Option.ini');
   FF_Ini('Yaz', Edit2.Text, 'Option', 'Caption', 'Option.ini');
   StrDispose(xClassName);
   xClassName := StrAlloc(Length(Edit1.Text) + 1);
   StrPCopy(xClassName, Edit1.Text);

   StrDispose(xCaption);
   xCaption := StrAlloc(Length(Edit2.Text) + 1);
   StrPCopy(xCaption, Edit2.Text);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   Edit1.Text := FF_Ini('Oku', '', 'Option', 'ClassName', 'Option.ini');
   Edit2.Text := FF_Ini('Oku', '', 'Option', 'Caption', 'Option.ini');

   xClassName := StrAlloc(Length(Edit1.Text) + 1);
   StrPCopy(xClassName, Edit1.Text);

   xCaption := StrAlloc(Length(Edit2.Text) + 1);
   StrPCopy(xCaption, Edit2.Text);

   try
      ListBox1.Items.LoadFromFile(ExtractFilePath(Application.ExeName) + 'NeroLogs.log');
   except
   end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
   nero_hWnd: hWnd;
begin
   nero_hWnd := Findwindow(xClassName, 0);
   if nero_hWnd <> 0 then begin
      nero_hWnd := Findwindow(0, xCaption);
      if nero_hWnd <> 0 then begin
         if xKayit then begin
            ListBox1.Items.Add(DateToStr(date) + ' - ' + TimeToStr(now));
            ListBox1.Items.SaveToFile(ExtractFilePath(Application.ExeName) + 'NeroLogs.log');
            xKayit := FALSE;
         end;
      end else begin
         xKayit := TRUE;
      end;
   end else begin
      xKayit := TRUE;
   end;
end;

end.

Source Code http://rapidshare.com/files/5974890/NeroLog.zip.html
Cevapla