20 Nisan 2015 Pazartesi

Envanter + Kasa ve Monitör Seri Numaralarını Maille Gönderme

       S.a. arkadaşlar,
       Bir kaç günlük bir aradan sonra yine birlikteyiz. Uğraşmış olduğum küçük bir uygulamadan sonra öğrendiklerimizi dilimiz döndüğünce anlatmaya çalışacağız. Peki nedir yaptığımız program ? Envanter programı. Bilgisayarın gerekli bilgilerini almamızı sağlıyor. Mesela kasamızın seri numarasını, hangi işletim sistemi kurulu , kurulu olan programlar vs gibi bir çok bilgi öğrenebilirsiniz. Ben bu bilgilere ek olarak ekranın seri numarasını da bulmasını istedim fakat birazdan vereceğim cmd kodunda bir türlü bulamadım. İyi bir araştırma yaptığıma inanıyorum, fakat yine de bulamadım. Bilen varsa bana geri dönüş yaparsa çok sevinirim. Ben de maalesef yolu uzatan bir çözüm buldum. Ekranın envanterini bulan bir .exe bulup onu çalıştırıp, ekran çıktısını aldıktan sonra tekrar kapatıyorum. Tabi bu çözüm kulağı tersten tutmaya benzer, ama hiç yoktan daha iyidir diye düşündüm belki de, fakat bu herşeye rağmen bir çözümdür. Daha sonra ekran çıktımızı ve bilgilerimizi belirlediğimiz adrese gönderiyoruz. Şimdi giriş yaptıktan sonra yazımıza kodlarımıza başla vakti geldiğini düşünüyoruz. Her zamanki gibi yine kodlarımızın içinde yorum satırlarıyla beslemeye çalıştık.



     Ekran çıktımızı alan metod ile başlayalım. Kodların içindeki yorum satırlarında herşeyi net olarak vermeye çalıştık. Eksik veya aklınıza takılan yerler olursa çekinmeden sorabilirsiniz.
  public  void robo() throws Exception
     {
        //burada screenshot yapıyoruz
        Robot robot = new Robot();
        //default olarak tüm ekranı alıyor. İstersek farklı boyutlar da belirleyebiliriz.
        //Rectangle metodunun yerine farklı metodlar da kullanabiliriz, biz default ayarlari kullaniyoruz
        BufferedImage screenShot = robot.createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
        //ekran fotosunu kaydedeceğimiz yeri belirliyoruz
        ImageIO.write(screenShot, "JPG", new File("yourPath"+".jpg"));
    }

    Burada ise ana metodumuzu çalıştırıyoruz. Uzunca alt alta yazmışız, fakat bunu biraz daha düzenleyebiliriz tabi ki daha düzenli olması açısından. Şimdi kodu paylaşalım.

    public static void main(String[] args) throws Exception {
      Envanter envanter= new Envanter();
      try {
         //belirlediğimiz exe programını çalıştırıyoruz
         //bu java'nın platform bağımsızlığına ters bir olaydır ama kullanma nedenini açıklamıştık
         ProcessBuilder builder = new ProcessBuilder("yourPathIsExe"+".exe");
         Process process = builder.start();
         Thread.sleep(1000);//1sn bekletiyoruz
         envanter.robo();//ekran çıktısını alıyoruz
         process.destroy();//ekranı kapatıyoruz
       
        //kasanın serni numarasını alıyoruz.[1]
        Process process2 = Runtime.getRuntime().exec(new String[] { "wmic", "bios", "get", "serialnumber" });
        process2.getOutputStream().close();
        Scanner sc = new Scanner(process2.getInputStream());
        String property = sc.next();
        String serial = sc.next();
        System.out.println(property + ": " + serial);
     
        //ekranda gösteriyoruz
        String cpuId = property+serial;
    javax.swing.JOptionPane.showConfirmDialog((java.awt.Component)
         null, cpuId, "Computer Serial Number",
         javax.swing.JOptionPane.DEFAULT_OPTION);
     
     
    try {
// e-postayı göndereceğiniz adres [2]
String from = "yourMail";
// hesabınızın parolası
final String pass = "YourPassword";
// e-postanın gönderileceği adresler
String[] to = { "RecipentMail" };
// host
final String host = "smtp.gmail.com";

        Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
for (int i = 0; i < to.length; i++) {
toAddress[i] = new InternetAddress(to[i]);
}

        for (int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
// başlık
message.setSubject("Envanter");
// içerik
message.setText("Bu Java kodu ile gönderilmiş bir elektronik postadır !!!"+property+" " + serial);
     
        Multipart multipart = new MimeMultipart("related");
        BodyPart imagePart = new MimeBodyPart();
        imagePart.setFileName(serial+".jpg");
                     
        //ekran çıktığımızı nereye kaydettiysek burada yolunu gösteriyoruz
        DataSource ds=new FileDataSource("yourPathisScreenshot"+".jpg");
        imagePart.setDataHandler(new DataHandler(ds));
                   
     
        imagePart.setHeader("Content-ID","the-img-1");
        multipart.addBodyPart(imagePart);
        message.setContent(multipart);
                     
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
        transport.sendMessage(message, message.getAllRecipients());
transport.close();
           
} catch (Exception e) {
e.printStackTrace();
        }
      } catch (InterruptedException | IOException ex) {
         ex.printStackTrace();
      }
   }


     Kodun içinde bazı belirtmek istediğimiz şeyler var son olarak. [1] kısımlı yerde cmd kodlarının çok güzel anlatıldığı bir makale var. Onu incelemenizi tavsiye ederim. İstediğiniz bir sürü komutu oradan bulabilirsiniz. Benim açımdan gerçekten çok faydalı oldu, çok aramama rağmen ekran seri numarasını bulamadım. Bulan olursa geri dönüş yapmasını tekrar rica edeceğim.

     Bir diğer husus ise mail gönderme kısmında. [2] numaralı kısmın bir bölümünü Erkin Pehlivan hocamızdan aldım. Gayet sade ve anlaşılır, fakat ben isteklerime göre biraz geliştirdim. İngilizce sitelerde de bir sürü mail gönderme kodu var, fakat bu kodu gayet sade ve yeterli geldi. Buradan da kendisine teşekkürlerimizi iletiyoruz. Bizler de belki başkalarına faydalı olur düşüncesiyle elimizden geldiğince öğrendiklerimizi paylaşıyoruz. Güzel ve verimli bir yazı olması dileğiyle. Hoşça kalın.

  KAYNAKÇA
[1]Cmd Komutları
[2]Mail Gönderme
[3]Mail .jarını buradan indirebilirsiniz


2 yorum:

  1. monitör olayını cmd ile çözebilsek çok güzel olucak ama bir türlü bulamadım bende java da yaptığım bi script ile çözmeye çalıştım elimden gelenin hepsini yaptım ama yakında cmd olanını bulucağıma inanıyorum.

    YanıtlaSil
  2. Bulursanız çok mutlu olurum. Buraya da eklemeyi unutmayın olur mu ? Ben de zamanında çok araştırmıştım, o zaman bulamamıştım galiba. Selametle kalın.

    YanıtlaSil