Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα βρήκα έναν κώδικα στην C# που συνδέει το κουμπί print screen με κάποιο πρόγραμμα επειδή είμαι άσχετος απο C# μπορεί να με βοηθήσει κάποιος.

Αυτό που θέλω να κάνω είναι να συνδέσω το κουμπί print screen με το πρόγραμμα camtasia στα windows xp.

Ο κώδικα είναι αυτός.

using System;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
public class CaptureScreen
{

	static public void Main(string[] args)
	{

		try
		{
			Bitmap capture = CaptureScreen.GetDesktopImage();
			string file = Path.Combine(Environment.CurrentDirectory, "screen.gif");
			ImageFormat format = ImageFormat.Gif;
			capture.Save(file, format);
		}
		catch (Exception e)
		{
			Console.WriteLine(e);
		}

	}

	public static Bitmap GetDesktopImage()
	{
		WIN32_API.SIZE size;

		IntPtr 	hDC = WIN32_API.GetDC(WIN32_API.GetDesktopWindow()); 
		IntPtr hMemDC = WIN32_API.CreateCompatibleDC(hDC);

		size.cx = WIN32_API.GetSystemMetrics(WIN32_API.SM_CXSCREEN);
		size.cy = WIN32_API.GetSystemMetrics(WIN32_API.SM_CYSCREEN);

		m_HBitmap = WIN32_API.CreateCompatibleBitmap(hDC, size.cx, size.cy);

		if (m_HBitmap!=IntPtr.Zero)
		{
			IntPtr hOld = (IntPtr) WIN32_API.SelectObject(hMemDC, m_HBitmap);
			WIN32_API.BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC, 0, 0, WIN32_API.SRCCOPY);
			WIN32_API.SelectObject(hMemDC, hOld);
			WIN32_API.DeleteDC(hMemDC);
			WIN32_API.ReleaseDC(WIN32_API.GetDesktopWindow(), hDC);
			return System.Drawing.Image.FromHbitmap(m_HBitmap); 
		}
		return null;
	}

	protected static IntPtr m_HBitmap;
}

public class WIN32_API
{
	public struct SIZE
	{
		public int cx;
		public int cy;
	}
	public  const int SRCCOPY = 13369376;
	public  const int SM_CXSCREEN=0;
	public  const int SM_CYSCREEN=1;

	[DllImport("gdi32.dll",EntryPoint="DeleteDC")]
	public static extern IntPtr DeleteDC(IntPtr hDc);

	[DllImport("gdi32.dll",EntryPoint="DeleteObject")]
	public static extern IntPtr DeleteObject(IntPtr hDc);

	[DllImport("gdi32.dll",EntryPoint="BitBlt")]
	public static extern bool BitBlt(IntPtr hdcDest,int xDest,int yDest,int wDest,int hDest,IntPtr hdcSource,int xSrc,int ySrc,int RasterOp);

	[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
	public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,	int nWidth, int nHeight);

	[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleDC")]
	public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

	[DllImport ("gdi32.dll",EntryPoint="SelectObject")]
	public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);

	[DllImport("user32.dll", EntryPoint="GetDesktopWindow")]
	public static extern IntPtr GetDesktopWindow();

	[DllImport("user32.dll",EntryPoint="GetDC")]
	public static extern IntPtr GetDC(IntPtr ptr);

	[DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
	public static extern int GetSystemMetrics(int abc);

	[DllImport("user32.dll",EntryPoint="GetWindowDC")]
	public static extern IntPtr GetWindowDC(Int32 ptr);

	[DllImport("user32.dll",EntryPoint="ReleaseDC")]
	public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);
}

από οτι κατάλαβα αυτός ο κώδικας συνδέει το Print Screen σε αποθήκευση σε αρχείο.

Δημοσ.

To πλήκτρο Printscreen από το πληκτρολόγιο δημιουργεί ένα screenshot του desktop και το αντιγράφει στο Clipboard.

 

O κώδικας που παρέθεσες απλώς το σώζει στο αρχείο "screen.gif" ανεξάρτητα από το αν πάτησε ο χρήστης Printscreen στο πληκτρολόγιο ή όχι.Δεν ελέγχει πουθενά αν ο χρήστης πάτησε το Printscreen ή όχι.

 

Επίσης τι εννοείς όταν λες οτι θέλεις να το συνδέσεις με το camtasia?

Δημοσ.

Ευχαριστώ για την απάντηση

Επίσης τι εννοείς όταν λες οτι θέλεις να το συνδέσεις με το camtasia?

Εννοώ να πατάω print screen και να τρέχει το πρόγραμμα camtasia.exe.

Γίνεται αν ναι πως;

το σαιτ που πήρα τον κώδικα είναι αυτό, Επίσης δες και αυτό.

Και τα 2 είναι σε C# σωστά; Έτσι τουλάχιστον λέει

Δημοσ.

Στον κώδικα του αρχικού σου post η main είναι C#.Οι υπόλοιπες συναρτήσεις είναι Win32 API Calls.To ίδιο και στο δεύτερο Link.

 

Την λειτουργία "πατάω το Printscreen ανοίγει το Camtasia" θέλεις να την έχεις σε δικιά σου εφαρμογή μόνο ή γενικότερα?

Δημοσ.

To Clipboard πρεπει να παρακολουθησεις. Γινεται copy μια εικονα όταν πατάς Print Screen.

P/invoke για C# αυτες τις δυο

 

SetClipboardViewer

ChangeClipboardChain

Δημοσ.

Στον κώδικα του αρχικού σου post η main είναι C#.Οι υπόλοιπες συναρτήσεις είναι Win32 API Calls.To ίδιο και στο δεύτερο Link.

 

Την λειτουργία "πατάω το Printscreen ανοίγει το Camtasia" θέλεις να την έχεις σε δικιά σου εφαρμογή μόνο ή γενικότερα?

Θέλω να την ενσωματώσω στα windows xp γίνεται, φαντάζομαι πως όχι επειδή είναι κλειστού κώδικα σωστά;

δηλ να φορτώνουν τα xp να πατάω print screen και να τρέχει το camtasia.

 

 

To Clipboard πρεπει να παρακολουθησεις. Γινεται copy μια εικονα όταν πατάς Print Screen.

P/invoke για C# αυτες τις δυο

 

SetClipboardViewer

ChangeClipboardChain

sorry απο C# είμαι άσχετος δεν ξέρω τίποτα.

Δημοσ.

Μπορει να φτιαχτει μια μικρη εφαρμογη που να τρεχει στο startup και να καλει το camtasia με καποιο argument (την εικόνα) οταν πατηθεί το PrtSrn 

Δημοσ.

Θέλω να την ενσωματώσω στα windows xp γίνεται, φαντάζομαι πως όχι επειδή είναι κλειστού κώδικα σωστά;

δηλ να φορτώνουν τα xp να πατάω print screen και να τρέχει το camtasia.

...

 

Μήπως τότε να έβαζες κάτι έτοιμο, π.χ. σαν αυτό;

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...