C++: Τρέξιμο στο παρασκήνιο και εκτέλεση εντολών με πάτημα πλήκτρων

spatman | Πέμ, 08/27/2009 - 17:40 | 1' | 2

Αναρωτιόμουν πώς γίνεται το παραπάνω σε γλώσσα c++ και ανεξάρτητα από desktops (gnome/kde).

Σκοπός είναι να τρέχω κάποια εντολή ανάλογα με έναν συνδυασμό πλήκτρων που πατάει ο χρήστης, ενώ όμως η εφαρμογή δεν έχει focus. Κάτι σαν launcher δηλαδή.

πχ να πατάω Super/Winkey/Ctrl/Alt + X και να τρέχει πχ η εντολή "Xsample".

Ακόμη καλύτερα θα ήταν αν υπάρχει τρόπος να ενεργοποιώ υπάρχοντα bash scripts ανάλογα με το κουμπί που πατιέται κάθε φορά.

Ρωτάω εδώ επειδή δεν έχω ξανα-ασχοληθεί με κάτι παρόμοιο και δεν ξέρω απο πού να αρχίσω (βιβλιοθήκες, how-tos κτλ)

Δώσε αστέρια!

MO: 2 (ψήφοι: 1)

Σχόλια

Ο καλύτερος τρόπος για να βρεις πώς να κάνεις κάτι στο χώρο του ανοιχτού λογισμικού είναι να βρεις ένα πρόγραμμα που κάνει κάτι παρόμοιο, να κατεβάσεις τον κώδικα του κ να το μελετήσεις. Έτσι πχ θα μάθεις ποιες βιβλιοθήκες να χρησιμοποιήσεις, κ θα έχεις κ έτοιμο παράδειγμα χρήσης τους.

Κατά τύχη βρήκα κάτι πολύ παρόμοιο με αυτό που λες:
http://www.dreamincode.net/forums/showtopic60635.htm

όπου του παιδιού του προτείνουν να δει τον κώδικα του TinyWM window manager, ο οποίος προφανώς -για να τον προτείνουν- πρέπει να υποστηρίζει μηχανισμό key bindings.

Μια άλλη ιδέα είναι το xbindkeys, που το χρησιμοποιώ ακόμα για να ορίζω τα shortcuts μου. Είναι καθαρό πρόγραμμα για Xwindows, δεν χρειάζεται ούτε gnome, ούτε kde, ούτε τίποτα. Ρίξε μια ματιά στον κώδικα του (παίζει να είναι C βέβαια, αλλά κ πάλι).

Τώρα που το σκέφτομαι, αν δεν το κάνεις για εκπαιδευτικούς σκοπούς κ θες απλά το εργαλείο, το xbindkeys είναι ακριβώς αυτό που θες!

Επίσης, η εφαρμογή Xev που συνοδεύει τα Xwindows κάνει κάτι σχετικό από άποψη key capturing, αν θες να μελετήσεις τον κώδικα της.

Σχετικά με το τρέξιμο στο παρασκήνιο, μπορείς να ψάξεις στο διαδίκτυο για οδηγούς για το πώς να κάνεις ένα πρόγραμμα daemon, service, να τρέχει στο background κλπ κλπ. Όλοι αυτοί οι ορισμοί λένε το ίδιο πράγμα, κ υπάρχουν άπειροι οδηγοί κ tutorials για τη δημιουργία daemons σε C/C++, Java, Python κλπ κλπ

Τέλος, άλλος ένας τρόπος για να δεις στα γρήγορα τι χρησιμοποιεί μια εφαρμογή, πχ το xbindkeys, είναι η εντολή ldd:


dimitris@gibbons:~$ ldd /usr/bin/xbindkeys
linux-gate.so.1 => (0xb7f2c000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb7e0e000)
libguile.so.12 => /usr/lib/libguile.so.12 (0xb7d62000)
libguile-ltdl.so.1 => /usr/lib/libguile-ltdl.so.1 (0xb7d5d000)
libqthreads.so.12 => /usr/lib/libqthreads.so.12 (0xb7d5b000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7d2c000)
libcrypt.so.1 => /lib/i686/cmov/libcrypt.so.1 (0xb7cfa000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7cd4000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7b74000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0xb7b5b000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7b57000)
/lib/ld-linux.so.2 (0xb7f2d000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb7b54000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb7b4f000)

Αυτό σου δείχνει με ποιες δυναμικές βιβλιοθήκες είναι συνδεδεμένο το πρόγραμμα, κάτι που είναι μια καλή αρχή για να καταλάβεις τι παίζει από πίσω (αν κ δεν συγκρίνεται με το να διαβάσεις τον κώδικα κ να δεις πολύ απλά τι κάνει #include).

Ελπίζω να βοήθησα κάπως να ξεδιαλύνεις την κατάσταση. Καλή τύχη!

-- gnu_labis

Το Linux ΔΕΝ είναι Windows!!!