Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
çözüldü-screenshot yapmak hk.
#11
(09-06-2024, Saat: 15:49)bydelphi Adlı Kullanıcıdan Alıntı: Merhabalar,

Windows hizmetlerin içinde desktop screenshot alıyorum hatta sıkıştırıp jpg de yapıyorum, image obje oluşuyor erişiliyor  , hizmet çalışıyor ancak her seferinde beyaz bir bitmap geçiyor elime.
acaba hizmetlerden bu mümkün değilmi yada dikkat etmek gereken bir şey mi var. tabi şunuda söylemeliyim, aynı kod  vcl exe uygulamamda sorunsuz işliyor .
jpg'e dönüştürmeden de aldığımda da yine beyaz. Yardımcı olabilirmisiniz.

    DSK := GetDC(GetDesktopWindow);
   BMP := TBitmap.Create;
   BMP.Width := Screen.Width;
   BMP.Height := Screen.Height;
   BitBlt(BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height,DSK, 0, 0,SrcCopy);
   JPG := TJPEGImage.Create;
   JPG.Assign(BMP);
   JPG.CompressionQuality := 70;
   JPG.Compress;

Merhaba,

Servisler kullanıcı arayüzü ile etkileşime giremezler.
Bu nedenle servisi > kullanıcı yetkisi ile açmayı denermisiniz lütfen.

https://stackoverflow.com/questions/7088...mmand-line

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#12
(10-06-2024, Saat: 09:17)hi_selamlar Adlı Kullanıcıdan Alıntı:
(09-06-2024, Saat: 15:49)bydelphi Adlı Kullanıcıdan Alıntı: Merhabalar,

Windows hizmetlerin içinde desktop screenshot alıyorum hatta sıkıştırıp jpg de yapıyorum, image obje oluşuyor erişiliyor  , hizmet çalışıyor ancak her seferinde beyaz bir bitmap geçiyor elime.
acaba hizmetlerden bu mümkün değilmi yada dikkat etmek gereken bir şey mi var. tabi şunuda söylemeliyim, aynı kod  vcl exe uygulamamda sorunsuz işliyor .
jpg'e dönüştürmeden de aldığımda da yine beyaz. Yardımcı olabilirmisiniz.

    DSK := GetDC(GetDesktopWindow);
   BMP := TBitmap.Create;
   BMP.Width := Screen.Width;
   BMP.Height := Screen.Height;
   BitBlt(BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height,DSK, 0, 0,SrcCopy);
   JPG := TJPEGImage.Create;
   JPG.Assign(BMP);
   JPG.CompressionQuality := 70;
   JPG.Compress;

Merhaba,

Servisler kullanıcı arayüzü ile etkileşime giremezler.
Bu nedenle servisi > kullanıcı yetkisi ile açmayı denermisiniz lütfen.

https://stackoverflow.com/questions/7088...mmand-line

Kolay gelsin.



Teşekkür ederim @hi_selamlar kardeşim aradığım cevap buydu 
ancak denemelerimde sonuç elde edemedim Sad  

zaten sayfanın altında aynen şu ifade geçiyor Türkçe meali : 
"Bu özelliğin Windows'un daha yeni sürümlerinde büyük ölçüde ortadan kalktığını unutmayın; örneğin Vista'da bu göz ardı edilir; güvenlik nedeniyle hizmetlerin artık masaüstüyle etkileşime girmesine izin verilmez."

Çözüm olarak 
servis ile ufak bir exe execute edip ilgili işlemleri yapacağım.
şeklinde değerlendiriyorum şu an.
Eski tuğlalarla yeni bina yapılmaz.
Cevapla
#13
Servis DLL çalıştırdığında nasıl bir sonuç çıkıyor?
Cevapla
#14
(10-06-2024, Saat: 15:29)engerex Adlı Kullanıcıdan Alıntı: Servis DLL çalıştırdığında nasıl bir sonuç çıkıyor?


hocam Servisi DLL olarak export etmeyimi kastediyorsun, şu an servisi, exe  export ediyorum. dll export ediliyor mu bilmiyorum.
yada screenshot alan fonksiyonu ayrı bir dll oluşturup dene mi diyorsun. bu da çok mantıklı belkide yapar deneyeceğim.
Eski tuğlalarla yeni bina yapılmaz.
Cevapla
#15
(10-06-2024, Saat: 15:57)bydelphi Adlı Kullanıcıdan Alıntı:
(10-06-2024, Saat: 15:29)engerex Adlı Kullanıcıdan Alıntı: Servis DLL çalıştırdığında nasıl bir sonuç çıkıyor?
...
yada screenshot alan fonksiyonu ayrı bir dll oluşturup dene mi diyorsun.
...

EXE servis ile ayrı DLL deneyebilirsin. Bence olmayacak, sonuçta o da servis altında çalışıyor. Denemekte fayda var.
Cevapla
#16
Dll oluşturup başka bir exe içerisinden çağırdım ve istediğim sonucu rahatlıkla aldım,
ancak dll i servis içerisinden çağırdığımda beklediğim sonucu alamadım.
servis içinden yakalarken bembeyaz sayfa alırken, dll içerisinden capture yaparken simsiyah sayfa aldım aynı kodla ilginç.
sonuç olarak servisin kontrol ettiği exe ile yola devam Smile
Eski tuğlalarla yeni bina yapılmaz.
Cevapla
#17
Merhabalar, 

Konunun devamı olarak şu konuda da sizden  destek rica ediyorum.

aldığım capture bitmapı bir önceki ile karşılaştırıp bu iki bitmap image bire bir aynı ise ,   bunu kontrol etmek istiyorum,
Çok kaynak tüketmeden pixel pixel kontrol etmeye gerek kalmadan nasıl yapabiliriz .
iki bitmapin boyutunu byte cinsinden cardinal olarak karşılaştırdığımda  bu isteğime cevap verir mi sizce,
yada daha sağlıklı bir yolu varmıdır.

         DSK := GetDC(GetDesktopWindow);
        BMP := TBitmap.Create;
        BMP.Width := Screen.Width;
        BMP.Height := Screen.Height;
        BitBlt(BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height,DSK, 0, 0,SrcCopy);

Teşekkürler.
Eski tuğlalarla yeni bina yapılmaz.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  FastReport Dinamik Sayıya Göre Etiket Bastırma [ÇÖZÜLDÜ] bünyamin68 2 393 09-01-2025, Saat: 13:47
Son Yorum: bünyamin68
  7d sinema icin video oynatici yapmak hk. sadikacar60 3 433 19-11-2024, Saat: 21:38
Son Yorum: sadikacar60
  paslibvlcplayerin gec acilmasi sorunu-COZULDU sadikacar60 7 520 08-10-2024, Saat: 09:25
Son Yorum: mrmarman
  [Çözüldü] HTTP üzerinden RTSP ile IP kamera stream işlemek Abdullah ILGAZ 4 6.288 08-10-2024, Saat: 09:20
Son Yorum: sadikacar60
  resimlerle ekran koruyucu yapmak sadikacar60 2 434 20-06-2024, Saat: 20:27
Son Yorum: sadikacar60



Konuyu Okuyanlar: 1 Ziyaretçi