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

WIn32 API - Full Screen Window


moukoublen

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

Δημοσ.

Θα ήθελα να μοιραστώ ένα προβληματισμό.

 

Γίνεται ένα παράθυρο αφού γίνει πλήρως full screen (το έχω βρει αυτό) να ΜΗΝ μπορεί να χάσει το focus;

 

Σε .net γράφω και windows forms αλλά είμαι σχεδόν βέβαιος πως θα χρειαστώ κάποιες κλήσεις στο win32 γιατί κάτι τέτοιο (αν γίνεται)

 

Για το ζήτημα του full screen έχω βρει την ανάλογες κλείσεις win32 και γίνεται μια χαρά.

 

Προσοχή, δεν θέλω απλά να είναι μόνιμα μπροστά (πχ TopMost ) θέλω να μην μπορεί να χαθεί καν το focus πέρα από τη φόρμα.

 

Ευχαριστώ πολύ!

  • Απαντ. 41
  • Δημ.
  • Τελ. απάντηση
Δημοσ.

Πατώντας ALt+Tab παρόλο που δεν έρχεται άλλο παράθυρο μπροστά (λόγω του TopMost) το focus χάνεται.

 

Και θέλω να δω αν υπάρχει τρόπος ακόμα και σε αυτή την περίπτωση το focus να διατηρείται.

Δημοσ.

Και θέλω να δω αν υπάρχει τρόπος ακόμα και σε αυτή την περίπτωση το focus να διατηρείται.

 

Θέλεις το focus να διατηρείται για να καταφέρεις κάτι άλλο. Πες μας τί είναι αυτό το κάτι άλλο.... :rolleyes:

Δημοσ.

@παπι + @Directx

thnx Θα τα δοκιμάσω μόλις βρω την ευκαιρία

 

 

@defacer

Με έσκασες! :P

 

Θέλω απλά το πρόγραμμα μου με το που θα ανοίγει να μην μπορεί να φύγει απ την οθόνη του χρήστη με τίποτε. Ούτε το ίδιο το πρόγραμμα ούτε το focus σε αυτό.

 

Αυτό γιατί απευθύνεται σε κάπως προχωρημένης ηλικίας χρήστες που δούλευαν για χρόνια με μία dos εφαρμογή.

 

Και έχουν μάθει οτι με το που ανοίγει η εφαρμογή είναι μια κατάσταση αμετάβλητη.

 

 

Σας ευχαριστώ όλους :)

Δημοσ.

ααα κανε τοτε αυτο που σου λεει ο dx. βαλε και το alt+f4 ctr+alt + delete etc...

 

edit Γραψε ακυρο για το hiding.. Παλι χανεις το foucs.

 

 

Φρικες φρικες φρικες. Πηγα να το κανω

Πρωτη προσπαθεια. Τα κανω hide ολα μια χαρα rolleyes.gif και μετα συνειδητοποιησα οτι ξεχασα να γραψω κατι για το restore frown.png να'ναι καλα το restart

Δευτερη προσπαθεια. Γραφω και το restore αλλα ξεχασα να βαλω κανα φιλτρο, ετσι γεμισε το desktop με 2314234 windows απο antivirus εως το svhost shock.png

 

Τριτη προσπαθεια. Ολα κομπλε, αλλα χανει το focus (facepalm.jpg)

 

 

Δημοσ.

Λοιπόν άνοιξα source από ένα σχετικό πρόγραμμα που είχα γράψει παλιότερα. Αυτό ήταν σε C#, οπότε μεταφέρω την ιδέα μεταφρασμένη σε Win32 και καλά θα ήταν να κάνεις λίγο double check αυτά που λέω. Μπορείς να κάνεις όσα από τα παρακάτω νομίζεις ότι χρειάζονται:

 

* Βγάζεις τα styles WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME από το παράθυρο.

* Κάνεις τον parent του παραθύρου σου ένα ξεχωριστό invisible window αντί για το desktop, έτσι ώστε να μην εμφανίζεσαι στην taskbar (και να μη χρειάζεται να πειράξεις τα WS_EX_APPWINDOW και WS_EX_TOOLWINDOW).

* Όταν δεις WM_ACTIVATE ότι γίνεσαι inactive, κανονίζεις να πάρεις πάλι το focus (ο κώδικάς μου το κάνει μία φορά επιτόπου και μία ακόμα μετά από 50 msec, αλλά δε θυμάμαι γιατί ακριβώς).

* Όταν δεις WM_SYSCOMMAND, αν πρόκειται για SC_MOVE το αγνοείς.

* Όταν δεις WM_CLOSE το αγνοείς.

* Με SetWindowsHookEx βάζεις ένα low level keyboard hook. Από εκεί έχεις τη δυνατότητα να αγνοήσεις ανάλογα με τις προτιμήσεις σου τους παρακάτω συνδυασμούς: ALT+TAB, CTRL+ESC, ALT+ESC, ALT+SPACE και τα windows keys.

* Με SetWindowsHookEx βάζεις επίσης ένα low level mouse hook. Από εκεί έχεις τη δυνατότητα να αγνοήσεις ανάλογα με τις προτιμήσεις σου τα διάφορα WM_XBUTTON και WM_MBUTTON, με τα οποία πολλά μοντέρνα mouse ενεργοποιούν task switching λειτουργίες.

 

Κάποια από τα παραπάνω μπορεί να μη σου κάνουν, ή να μη σου κάνουν έτσι ακριβώς, ή να προκαλούν απρόβλεπτες παρενέργειες σε άλλα προγράμματα ή settings που έχει ο χρήστης σου (στη δική μου περίπτωση δεν υπήρχε τέτοιο θέμα, και σε σένα αφού είναι δεινόσαυροι δεν το βλέπω πιθανό).

 

ΥΓ: Πριν αρχίσω να δοκιμάζω όλα τα παραπάνω, έγραψα ένα άλλο πρόγραμμα το οποίο κάνει detect το κανονικό μου πρόγραμμα και ανά τακτά χρονικά διαστήματα (π.χ. 5 ή 10 λεπτά) σου βγάζει προειδοποίηση και αν δεν την κλικάρεις σκοτώνει την process (του κανονικού). Σίγουρη λύση για να αποφύγεις τα hard reset όταν πειραματίζεσαι με τέτοια πράγματα.

Δημοσ.

Σας ευχαριστώ όλους θερμά!!!

 

Αφού βρήκα το χρόνο και ασχολήθηκα μετά από πολύ ψάξιμο (καθότι 0 εμπειρία σε win32) και καθοδηγούμενος από τα όσα μου γράψατε, κατάφερα να κάνω αυτό που θέλω.

 

:rolleyes:

 

Η αλήθεια είναι ότι αφού πήρα τις κατευθύνσεις από εσάς, έπεσα πάνω σε ένα project στο internet που έκανε σχεδόν όσα χρειαζόμουν. :-D :-D

 

Για οποιον ενδιαφέρεται μπορώ να παραθέσω κώδικα ή link.

Δημοσ.

Απορω πως δεν σκεφτηκαν στη Microsoft να βαλουν μια property την οποια οταν θα την οριζεις True να εχει την φορμα παντα σε focus, π.χ. Form1.AlwaysFocus=True. Εφοσον δεν υπαρχει αυτη η property το αποτελεσμα ειναι να χρονοτριβει ο προγραμματιστης ψαχνοντας εδω και εκει και να πρεπει να γραψει μερικες γραμμες κωδικα αντι για μια.

Δημοσ.

Απορω πως δεν σκεφτηκαν στη Microsoft να βαλουν μια property την οποια οταν θα την οριζεις True να εχει την φορμα παντα σε focus, π.χ. Form1.AlwaysFocus=True. Εφοσον δεν υπαρχει αυτη η property το αποτελεσμα ειναι να χρονοτριβει ο προγραμματιστης ψαχνοντας εδω και εκει και να πρεπει να γραψει μερικες γραμμες κωδικα αντι για μια.

 

Όντως απορώ πώς δεν το σκέφτηκαν τόσα χρόνια στην MS και εμείς εδώ το σκεφτήκαμε στο πι και φι την ώρα που ξυνόμασταν.

 

1. Για ποιό λόγο να καταβάλλουν την υπερτεράστια προσπάθεια που χρειάζεται για να μπει ακόμα κι ένα τόσο "ασήμαντο" feature; Για να διευκολύνουν το 1 πρόγραμμα στα 10000 που θα θέλει να κάνει κάτι τέτοιο; Δυσκολεύομαι να σκεφτώ κάτι που θα ήταν χειρότερο απ' αυτό το feature για να ξοδέψουν το χρόνο τους πάνω του.

2. Αν την ορίσουν true δύο παράθυρα ταυτόχρονα, τι θα πρέπει να συμβεί; (φυσικά η ομάδα του window manager θα μπορούσε να σκεφτεί κανα δυο εκατομμύρια σενάρια ακόμα όπου η ύπαρξη αυτού του feature θα δημιουργούσε πονοκεφάλους)

3. Δε νομίζω ότι υπάρχει ποτέ περίπτωση πλέον (μόνο στο παρελθόν θα μπορούσε να είχε γίνει) η MS να βάλει feature που παρακαλάει να το κάνεις abuse. Θυμήσου τι έγινε με το window activation: "Φέρε το focus εδώ, το πρόγραμμά μου είναι το πιο σημαντικό απ' όλα", μέχρι που το κόψανε για να ησυχάσουμε.

4. Το Win32 API δεν έχει properties.

 

Μπορει και να εχει τιποτα undocumented. Το winapi ειναι το χαος το ιδιο.

 

Δεν έχει, εξάλλου βλέπε παραπάνω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...