Χάρης Μυλωνίδης Δημοσ. 23 Νοεμβρίου 2013 Δημοσ. 23 Νοεμβρίου 2013 Καλησπέρα βρήκα έναν κώδικα στην 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 σε αποθήκευση σε αρχείο.
nucleus Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 To πλήκτρο Printscreen από το πληκτρολόγιο δημιουργεί ένα screenshot του desktop και το αντιγράφει στο Clipboard. O κώδικας που παρέθεσες απλώς το σώζει στο αρχείο "screen.gif" ανεξάρτητα από το αν πάτησε ο χρήστης Printscreen στο πληκτρολόγιο ή όχι.Δεν ελέγχει πουθενά αν ο χρήστης πάτησε το Printscreen ή όχι. Επίσης τι εννοείς όταν λες οτι θέλεις να το συνδέσεις με το camtasia?
Χάρης Μυλωνίδης Δημοσ. 25 Νοεμβρίου 2013 Μέλος Δημοσ. 25 Νοεμβρίου 2013 Ευχαριστώ για την απάντηση Επίσης τι εννοείς όταν λες οτι θέλεις να το συνδέσεις με το camtasia? Εννοώ να πατάω print screen και να τρέχει το πρόγραμμα camtasia.exe. Γίνεται αν ναι πως; το σαιτ που πήρα τον κώδικα είναι αυτό, Επίσης δες και αυτό. Και τα 2 είναι σε C# σωστά; Έτσι τουλάχιστον λέει
nucleus Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 Στον κώδικα του αρχικού σου post η main είναι C#.Οι υπόλοιπες συναρτήσεις είναι Win32 API Calls.To ίδιο και στο δεύτερο Link. Την λειτουργία "πατάω το Printscreen ανοίγει το Camtasia" θέλεις να την έχεις σε δικιά σου εφαρμογή μόνο ή γενικότερα?
albNik Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 To Clipboard πρεπει να παρακολουθησεις. Γινεται copy μια εικονα όταν πατάς Print Screen. P/invoke για C# αυτες τις δυο SetClipboardViewer ChangeClipboardChain
Χάρης Μυλωνίδης Δημοσ. 25 Νοεμβρίου 2013 Μέλος Δημοσ. 25 Νοεμβρίου 2013 Στον κώδικα του αρχικού σου 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# είμαι άσχετος δεν ξέρω τίποτα.
albNik Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 Μπορει να φτιαχτει μια μικρη εφαρμογη που να τρεχει στο startup και να καλει το camtasia με καποιο argument (την εικόνα) οταν πατηθεί το PrtSrn
Χάρης Μυλωνίδης Δημοσ. 25 Νοεμβρίου 2013 Μέλος Δημοσ. 25 Νοεμβρίου 2013 Εγώ έλεγα μήπως μπορούσε να γίνει κάποια μετατροπή στους κώδικες που παρέθεσα ώστε να λειτουργούν έτσι όπως θέλω.
migf1 Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 Θέλω να την ενσωματώσω στα windows xp γίνεται, φαντάζομαι πως όχι επειδή είναι κλειστού κώδικα σωστά; δηλ να φορτώνουν τα xp να πατάω print screen και να τρέχει το camtasia. ... Μήπως τότε να έβαζες κάτι έτοιμο, π.χ. σαν αυτό;
Χάρης Μυλωνίδης Δημοσ. 25 Νοεμβρίου 2013 Μέλος Δημοσ. 25 Νοεμβρίου 2013 Μήπως τότε να έβαζες κάτι έτοιμο, π.χ. σαν αυτό; Επειδή δεν έχω χρόνο τώρα, θα το κοιτάξω όταν βρω και θα σου πω.
migf1 Δημοσ. 25 Νοεμβρίου 2013 Δημοσ. 25 Νοεμβρίου 2013 Με την ησυχία σου. Αν έχω καταλάβει καλά τι ρώτησες, κάνει ακριβώς αυτό που θέλεις (και πολλά περισσότερα).
Χάρης Μυλωνίδης Δημοσ. 26 Νοεμβρίου 2013 Μέλος Δημοσ. 26 Νοεμβρίου 2013 Ευχαριστώ είναι ακριβώς αυτό που έψαχνα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα