Translate Blog

27 Ekim 2012 Cumartesi

C# ile Bilgisayar Uyku Modu Tespiti (Idle Time)

Birçok yerde aradım, bulamadım. Siz arayıp da bulamazsınız diye buraya koyuyorum ;) Bir kaç yöntem vardı aslında ama sanırım en basiti bu yöntem olsa gerek. Şu linkte bulunan kardeşler bizim için bir class hazırlamışlar. Bize de çöreklenmek düşer.

Bir uygulama hazırlıyorsunuz ve uygulamanız bilgisayar kullanılmadığı anı tespit etmesi gerekiyor, paylaşacağım örnekte ise bilgisayarın kullanılmadığı, farenin klavyenin basılmadığı süreleri sayıyor.

Aşağıdaki örnekte bir textbox var, timer var, listbox var. Using kısmına fazladan
using System.Runtime.InteropServices;
eklenmiş. Formunuza eklediyseniz aşağıdaki kodu olduğu gibi C# form koduna yapıştırın. Çalıştırdığınız zaman fare veya klavyeye dokunduğunuzda aşağı sayan sayılar tekrar sıfırlandığını göreceksiniz.

Class içinde bulunan Win32.GetIdleTime() ile o anki durumu alabiliyoruz, yani "bilgisayar boşta" durumunun süresini elde edebiliyoruz. Bir if ile rahatlıkla bu sınırı kendiniz belirleyebilirsiniz. Aşağıdaki örnekte bilgisayarın kullanılmadığı yaklaşık 1dk lık (60000) süre dolunca textbox'a Uyku modeu diye yazıyor.

Peki bu kodu nasıl kullanabilirsiniz, bilgisayarın uyku modunu siz ayarlayacaksınız, diyelim 10dk. Programınızda da bu süreyi belirteceksiniz, 10dk kadarlık süre geçtiyse ki bu yaklaşık 1014*60sn*10dk yaklaşık 600000 sayısı eder. bu sayıyı geçtiyse bilgisayar uyku moduna girmiştir yahu, kullanıcıyı uyarayım artık dedirtebilirsiniz.

Ben bunu nerede kullanacam ne işime yarayacak ki demeyin, bilgisayarlara kullanıcı girişi hazırlıyorsanız mysql ile kullanıcı kontrol girişli, ve adam çıkış yapmadan bilgisayardan kalktıysa boşta kalmasın pc, kullanıcı hesabını kapatsın diye yapabilirsiniz mesela. Eğer kodunu biliyorsanız belirlediğiniz sürede bilgisayarı kapatabilir, uykuya da alabilirsiniz.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
//using Microsoft.Win32;
namespace uykuModu
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       

private void timer1_Tick(object sender, EventArgs e)
        {
            listBox1.Items.Add(Win32.GetIdleTime().ToString());
            if (Win32.GetIdleTime() > 60000)
            {
                textBox1.Text = "UYKU MODUNA GEÇ";
            }
        }
    }


   // KLAVYE FARE HAREKETLERİ TESPİTİ
    internal struct LASTINPUTINFO
    {
        public uint cbSize;
        public uint dwTime;
    }
    public class Win32
    {
        [DllImport("User32.dll")]
        public static extern bool LockWorkStation();
        [DllImport("User32.dll")]
        private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
        [DllImport("Kernel32.dll")]
        private static extern uint GetLastError();
        public static uint GetIdleTime()
        {
            LASTINPUTINFO lastInPut = new LASTINPUTINFO();
            lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
            GetLastInputInfo(ref lastInPut);
            return ((uint)Environment.TickCount - lastInPut.dwTime);
        }
        public static long GetTickCount()
        {
            return Environment.TickCount;
        }
        public static long GetLastInputTime()
        {
            LASTINPUTINFO lastInPut = new LASTINPUTINFO();
            lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
            if (!GetLastInputInfo(ref lastInPut))
            {
                throw new Exception(GetLastError().ToString());
            }
            return lastInPut.dwTime;
        }
    }
}

23 Ekim 2012 Salı

C# ile Firefoxtan Adresleri Almak / How to Capture Urls From Firefox


[ENG]
Maybe this code can help to obtain Firefox url adress; I use this code to capture uniq adresses from firefox and add to listbox. You can use this with safari too.
You must add NDde.dll to your project, To do this go to solution explorer rigth clik to References-> add Reference->Browse-> find that DLL (http://ndde.codeplex.com/ from binary folder.))

[TR]
Aşağıdaki kod C# kullanarak Firefox tarayıcısında girilen sayfaları listboxa ekler. Bunu timer aracılığı ile her 5sn de bir kontrol ederek yapıyor.
Kodları çalışması için NDde.dll isimli kütüphaneyi referanslarınıza eklemeniz lazım. http://ndde.codeplex.com/ adresinden kütüphaneyi indirin. Binary klasöründe Dll dosyasını bulacaksınız. C Sharp projenize gelin, Solution Explorer->References->Sağ Klik->Add Reference->Browse-> DLL dosyasını seçin ve ekleyin.
Sahnede 1 buton, 1 listbox ve 1 timer var.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NDde.Client;

namespace WindowsFormsApplication9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
        }

        private string GetBrowserURL(string browser)
        {
            try
            {
                DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
                dde.Connect();
                string url = dde.Request("URL", int.MaxValue);
                string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
                dde.Disconnect();
                return text[0].Substring(1);
            }
            catch
            {
                return null;
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            int j=0;
            for (int i = 0; i < listBox1.Items.Count; i++)
            {
                if (listBox1.Items[i].ToString() == GetBrowserURL("Firefox"))
                {
                    break;
                }
                else
                {
                    j++;
                }
            }
            if (j == listBox1.Items.Count)
            {
                listBox1.Items.Add(GetBrowserURL("Firefox"));
            }
        }
    }
}

20 Ekim 2012 Cumartesi

C# ve SWF Kullanımı

C# içinde flash swf dosyalarınızı nasıl oynatırsınız?
Aslında cevap basit, C# araç panelindeki Components sekmesinde bulunan Shockwave Flash Object'i sahnenize sürükleyin, ister özellikler panelinden isterseniz kod yazarak swf dosyanızın yolunu gösterip işlemi bitirebiliriniz.

Özellikler penceresinden yapacaksanız dosya yolunu tam yazmanız gerekmekte, ki bu biraz sıkıntılıdır.
Çünkü doğru çalışması için dosyanızın illa belirtilen yerde olması gerekir. Bunu daha mantıklı bir yoldan çözmek isterseniz dolaylı yol kullanmanız lazım. Bunun için de kod yazmak daha akıllıca olur.


Dikkat ederseniz kullanılacak swf dosyası projenizin debug klasöründe, yani exenizin bulunduğu klasörde bulunuyor. Bu sayede kurulum klasörünüzün içindeki swfleri kullanabiliyorsunuz.

Koda bakarsanız using System.IO; kodu eklenmiş. Bu kod exenizin bulunduğu yeri/dizini almanızı sağlıyor. Bu dizini otomatik olarak alıyor, peşine + ile "\\kare.swf" dosyamızı ekliyoruz. Normalde yol C:\filan\falan\debug\kare.swf olmalıdır. Ama burada backslash (\)  ifadesi önüne bir tane daha koyularak kullanılmalıdır.

Eğer swfleri bir klasöre atacaksanız
this.axShockwaveFlash1.Movie = path + "\\klasor\\kare.swf";
şeklinde yazılmalıdır.