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




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


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


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



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


Δοκιμάστε τη λήψη της εστίασης με [SetCapture](http://msdn.microsoft.com/en-us/library/ms646262.aspx) πριν από την πραγματοποίηση της κλήσης. Επίσης εξετάσουμε διαφορετικούς τρόπους να φέρει το παράθυρο προς τα εμπρός: SetForeGroundWindow, SetActiveWindow, ακόμη και προσομοίωση ένα κλικ του ποντικιού μπορείτε να το κάνετε αυτό.
ευχαριστώ για τις απαντήσεις και τις προτάσεις.

επειδή δε μπόρεσα να στήσω το windowappmenu όπως ήθελα, συνέχισα να παιδεύομαι με το default application panel και τελικά κατάφερα να το φτιάξω.

ήταν απλό τελικά…

αφού πατήσεις δεξί κλικ στο desktop και κάνεις “add panel > application menu bar”, το … ότι σου γράφω είναι από mate περιβάλλον αλλά δεν νομίζω να έχει μεγάλη διαφορά :

άνοιξε το displays και κανε κλικ στην οθόνη που θες και μετά κλικ στο set as primary, μετά κλικ σε αυτήν που δεν θες και κλικ στο off που είναι δεξιά για να την απενεργοποιήσεις και τέλος κλικ στο apply. Η προτιμώμενη μέθοδος είναι να χρησιμοποιήσετε πραγματικά την ιδιότητα υπό όρους για να τυλίξει τις κλήσεις εντοπισμού σφαλμάτων σας, μην χρησιμοποιήσετε τις οδηγίες μεταγλωττιστή. #ifs μπορεί να πάρει δύσκολες και μπορεί να οδηγήσει σε περίεργα προβλήματα κατασκευής.


Ένα παράδειγμα της χρήσης ενός υπό όρους χαρακτηριστικό είναι η εξής (σε C #, αλλά λειτουργεί σε VB.NET πολύ):



```
[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

```

Κατά τη μεταγλώττιση, χωρίς το σετ σημαία DEBUG, κάθε κλήση προς WriteDebug θα καταργηθούν όπως υποτίθεται συνέβαινε με Debug.Write (). Θα χρησιμοποιηθεί για να πάρει αυτό - νομίζω ότι είναι ένα bug με το παράθυρο εντοπισμού σφαλμάτων «Autos»:


[http://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/eabc58b1-51b2-49ce-b710-15e2bf7e7516/](https://social.msdn.microsoft.com/Forums/en-US/vsdebug/thread/eabc58b1-51b2-49ce-b710-15e2bf7e7516/) Θα πρέπει να δώσετε περισσότερες πληροφορίες σχετικά με το περιβάλλον ανάπτυξής σας για να πάρετε μια συγκεκριμένη απάντηση.


Για παράδειγμα, με ένα C # έργο στο Visual Studio, μπορείτε να κάνετε δεξί κλικ στα Project-> Ιδιότητες και, στη συνέχεια, να συμπληρώσετε το πεδίο «Εντολή επιχειρήματα γραμμή» στην καρτέλα «Debug». μισό. έχεις και windows και δεν τα βλέπεις στο μενού του grub ?

αν σε βολεύει αλλάζεις το grub\_timeout\_style απο hidden σε grub\_timeout\_style="menu". κάθε αλλαγή σε αυτό το αρχείο, αλλά και για να δει τα windows θέλει την εντολή

sudo update-grub μπορείς και μέσω τερματικού για να μην μπλέκεις και να ψάχνεις παράθυρα. 
πατάς ctrl+alt+t για να ανοίξεις το τερματικό και πληκτρολογείς την εντολή passwd θα σου ζητήσει τον υπάρχον κωδικό και να πληκτρολογήσεις 2 φορές το νέο. μοιάζει με παράθυρο επιλογής αρχείου, που είναι μεγαλύτερο από τις διαστάσεις της οθόνης. υποθέτω πως αν το μικρύνεις σε τυπικές διαστάσεις θα δεις τι συμβαίνει. κρατώντας πατημένο το alt θα μπορείς να μεταφέρεις το παράθυρο να βρεις την κάτω γωνία του. να τα πάρουμε με τη σειρά για να μη γίνει μπέρδεμα;

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

τώρα, το μενού του septor στο πρώτο screenshot αντιστοιχεί στη… προτεινω να δοκιμασεις πρωτα με τους ανοιχτους οδηγους να δεις πως θα σε παει και αν συνεχισεις να εχεις προβλημα εγκατεστησε <https://snapcraft.io/install/fwts/manjaro>

που θα μας δωσει αναλυτικες πληροφοριες