Φέρνοντας Παράθυρο στο Μέτωπο σε C # χρησιμοποιώντας τα Win32 API

ψήφοι
35

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

Ποιος είναι ο καλύτερος τρόπος να πάει για αυτό με τη χρήση του Win32 API; Έχω δοκιμάσει SetForeground (), αλλά κλέβει πάντα την εστίαση και δεν με συνέπεια λειτουργεί.

Ποιος είναι ο καλύτερος τρόπος να πάει για αυτό; Καμία ιδέα;

Δημοσιεύθηκε 06/08/2008 στις 01:55
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
14

SetForegroundWindow υποτίθεται ότι θα κλέψει την εστίαση και υπάρχουν ορισμένες περιπτώσεις όπου θα αποτύχει.

Η λειτουργία SetForegroundWindow βάζει το νήμα που δημιούργησε το καθορισμένο παράθυρο στο προσκήνιο και ενεργοποιεί το παράθυρο. εισαγωγής πληκτρολογίου κατευθύνεται προς το παράθυρο

Δοκιμάστε τη λήψη της εστίασης με SetCapture πριν από την πραγματοποίηση της κλήσης. Επίσης εξετάσουμε διαφορετικούς τρόπους να φέρει το παράθυρο προς τα εμπρός: SetForeGroundWindow, SetActiveWindow, ακόμη και προσομοίωση ένα κλικ του ποντικιού μπορείτε να το κάνετε αυτό.

Απαντήθηκε 06/08/2008 στις 02:06
πηγή χρήστη

ψήφοι
5

Ποια είναι η διαφορά μεταξύ SetForeGroundWindow, SetActiveWindow και BringWindowToTop; Φαίνεται σαν να κάνουν όλοι το ίδιο πράγμα.

Σύμφωνα με MSDN, SetForeGroundWindow θα ενεργοποιήσει το παράθυρο και άμεση εστίαση του πληκτρολογίου σε αυτό. Αυτό προσπαθεί να λειτουργήσει ακόμα και όταν η διαδικασία σας είναι στο παρασκήνιο. SetActiveWindow κάνει το ίδιο πράγμα όπως SetForeGroundWindow, αλλά δεν κάνει τίποτα αν η αίτησή σας δεν είναι η πιο μπροστά εφαρμογής. Τέλος, BringWindowToTop φέρνει μόνο το παράθυρο στην κορυφή, και δεν αλλάζει την εστίαση του πληκτρολογίου.

Απαντήθηκε 06/08/2008 στις 14:20
πηγή χρήστη

ψήφοι
2

Έχετε δοκιμάσει τη χρήση SetWindowPos. Αυτή είναι η κανονική λειτουργία για τη μετακίνηση, αλλαγή μεγέθους και τη z-παραγγελίες των Windows. Υπάρχει μια σημαία SWP_NOACTIVATE που μπορείτε να χρησιμοποιήσετε. Κοιτάξτε http://msdn.microsoft.com/en-us/library/ms633545(VS.85).aspx . Δεν έχω δοκιμάσει αυτό σε ένα παράθυρο που ανήκει σε μια άλλη διαδικασία, αλλά είναι πιθανόν να αξίζει μια δοκιμή.

Απαντήθηκε 24/08/2008 στις 22:51
πηγή χρήστη

ψήφοι
2

Μπορείτε να δοκιμάσετε τη λειτουργία BringWindowToTop να μην κλέψει την εστίαση. Δεν έχω χρησιμοποιήσει, αλλά φαίνεται να είναι αυτό που ψάχνετε.

Απαντήθηκε 06/08/2008 στις 02:37
πηγή χρήστη

ψήφοι
1

SetWindowPos + SWP_NOACTIVATE κάνει τη δουλειά του.

Απαντήθηκε 18/12/2009 στις 08:23
πηγή χρήστη

ψήφοι
0

Θα μπορούσατε να χρησιμοποιήσετε FindWindow να πάρει το HWND του παραθύρου, στη συνέχεια, χρησιμοποιήστε τη λειτουργία BringWindowToTop βρέθηκε στο API του Win32.

Απαντήθηκε 06/05/2011 στις 15:44
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more