30 Kasım 2014 Pazar

c# ekran görüntüsü alma 2014

   
c# ekran görüntüsü alma
 Bitmap resim;
        Graphics gr;


        private void button1_Click(object sender, EventArgs e)
        {

            resim = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
            gr = Graphics.FromImage(resim);
            gr.CopyFromScreen(0, 0, 0, 0, new Size(resim.Width, resim.Height));
            pictureBox1.Image = resim;



        }

        private void button2_Click(object sender, EventArgs e)
        {
            saveFileDialog1.ShowDialog();
            resim.Save(saveFileDialog1.FileName + ".jpg", ImageFormat.Jpeg);

        }

21 Kasım 2014 Cuma

C# – SharpShell ile Sag Tık Menusu Oluşturma 2014

Windows Shell Uzantılarını oluşturmak için .Net pek elverişli değildi.Basit bir sağ klik uzantısı oluşturmak için uzun uzun registry ile uğraşmak zorunda kalıyorduk.Fakat bunu SharpShell ile basit ve hızlı bir şekilde kendi sağ tık menumüzü oluşturabiliriz.
Hemen vakit kaybetmeden başlayalım.Öncelikle bu linki takip ederek SharpShell kütüphanesini indirilim.Sonra yeni bir Visual Studio C#> Class Library projesi oluşturulım proje adını ben SharpShellSagTik olarak değiştirdim.
SharpShellOgz-1
Projemizi oluşturduktan sonra varsayılan olarak gelen Class1.cs silelim ve “BenimSagTik.cs” adında yeni bir sınıf ekleyelim.
Referanslarımızı indirdiğimiz SharpShell kütüphanesini zip ten çıkartalım SharpShell.dll referanslarımıza ekleyelim
Nuget visual studioyunuzda yüklüyse
” Install-Package SharpShell ” komutu ile referanslarınıza ekleyebilirsiniz.Şimdi BenimSagTik sınıfının namespace lerine “using SharpShell.SharpContextMenu;” ekleyelim
SharpContextMenu sınıfından kalıtalım ve visual studio yardımı ile implement edelim sonra şöyle bir hata ile karşılaşmanız muhtemel “The type or namespace name ‘Forms’ does not exist in the namespace ‘System.Windows’ (are you missing an assembly reference?)” hemen referanslarımıza “System.Windows.Forms” dll ini ekleyelim ve sınıfımızın namespacelerine ekleyelim “using System.Windows.Forms;” bu aşamalar bittikten sonra başlayalım..
BenimSagTik sınıfımızın üstüne şu kodları ekleyelim
1
2
[ComVisible(true)]
[COMServerAssociation(AssociationType.ClassOfExtension, ".txt")]
CanShowMenu() methodunun kodunu
1
return true;//Menu her zaman gösterilecek
değiştirelim
Sıra geldi CreateMenu() methodunun kodlarına önce “throw new NotImplementedException();” kodunu silelim
ve şu kodları ekleyelim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//yeni bir menu oluştur
var menu = new ContextMenuStrip();
var itemBaglanti = new ToolStripMenuItem
{
Text = "Secilenleri Say",
};
itemBaglanti.Click += (s1, e1) =>
{
StringBuilder sb = new StringBuilder();
foreach (var f in SelectedItemPaths)
{
sb.AppendLine(System.IO.Path.GetFileName(f));//dosya isimlerini ekle
}
sb.AppendLine("-------------------------");
sb.AppendLine(SelectedItemPaths.Count() + " tane dosya seçildi");
MessageBox.Show(sb.ToString());
};
menu.Items.Add(itemBaglanti);//baglatiyi ekle
return menu;
Şu kodlar benzer olacak BenimSagTik.cs
———————————————————–
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using SharpShell.Attributes;
using SharpShell.SharpContextMenu;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace SharpShellSagTik
{
    [ComVisible(true)]
    [COMServerAssociation(AssociationType.ClassOfExtension, ".txt")]
    public class BenimSagTik : SharpContextMenu
    {
        protected override bool CanShowMenu()
        {
            return true;
        }
 
        protected override System.Windows.Forms.ContextMenuStrip CreateMenu()
        {
            //yeni bir menu oluştur
            var menu = new ContextMenuStrip();
            var itemBaglanti = new ToolStripMenuItem
            {
                Text = "Secilenleri Say",
            };
            itemBaglanti.Click += (s1, e1) =>
            {
                StringBuilder sb = new StringBuilder();
                foreach (var f in SelectedItemPaths)
                {
                    sb.AppendLine(System.IO.Path.GetFileName(f));//dosya isimlerini ekle
                }
                sb.AppendLine("-------------------------");
                sb.AppendLine(SelectedItemPaths.Count() + " tane dosya seçildi");
                MessageBox.Show(sb.ToString());
            };
            menu.Items.Add(itemBaglanti);//baglatiyi ekle
            return menu;
        }
    }
}
———————————————————–
kod kısmı bitti ama son bir adım daha
Visual Studio ya Solution Explorer > Properties > Signing > Sing the assembly işaretleyelim ve ile yeni bir imza oluşturulım isterseniz password koyabilirsiniz imzanız için fakat gerek yok.
SharpShellOgz-2
Artık uygulamamızı test edebiliriz.
Bu adresten test için tools indirdikten sonra çıkartıp ServerManager.exe çalıştırılım
File > Load Server takip ederek oluşturduğumuz dll i ekleyelim
SharpShellOgz-3
Test server in Test Shell e tıklayarak test edelim fakat aynı sonuçları vermez.
SharpShellOgz-4
Şimdi bunu windows explorerda kullanmak istiyoruz Server > Install Server takip edip dll HKCR>CLSID kayıt defterine dll mizin CLSID ini ekleyelim eğer erişim reddedilirse yönetici olarak başlatın SerVer manager.exe yi
Daha sonra register server tıklarsak
“HKEY_CLASSES_ROOT\txtfile\shellex\ContextMenuHandlers\BenimSagTik” buna benzer bir kayıt defteri yolu izler ama ben ben bütün dosyalarda sağa tıklandığında gözükmesini istiyorum derseniz.
boş bir yere Yeni text dosyası oluşturun

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\ExContext]
@=”{772809c8-46ce-35ee-8c66-c6997278eb82}”
ve şu reg kodlarını kaydedin dosyanın uzantısını .reg yapıp çalıştırın Not: “{772809c8-46ce-35ee-8c66-c6997278eb82}” bu bölümü kendi clsid kodunuzla değitirin
eğer clsid kodunuzu öğrenmek istiyorsanız Server Manager.exe den yararlanabilirsiniz
SharpShellOgz-5
SharpShellOgz-6
Sağlıcakla..