Evgenios1 Δημοσ. 12 Σεπτεμβρίου 2008 Δημοσ. 12 Σεπτεμβρίου 2008 Γεια σας παιδες ! Εχω φτιαξει ενα προγραμματακι το οποιο μου μεταφραζει ****** σε Αγγλικα και το αντιθετο.(Το ξερω οτι υπαρχουν freeware που το κανουν αυτο αλλα δε με ενδιαφερει,διοτι εχω αντιγραψει εναν ολοκληρο λεξηκο σε μια local db) Τεσπα θελω το παραθυρο να ειναι "on top" σα το task manag μπωρει να μου καποιος πως θα το καταφερω αυτο?(Δε με ενδιαφερει αν ειναι WPF MFC Windows.Forms, εξαλου το app το εχω σε .dll το μονο που με νιαζει ειναι το interface)
Directx Δημοσ. 12 Σεπτεμβρίου 2008 Δημοσ. 12 Σεπτεμβρίου 2008 Λοιπόν Ευγένιε1, η ρουτίνα WinAPI που ψάχνεις ονομάζεται SetWindowPos. Το flag για top-most παράθυρα είναι το HWND_TOPMOST ενώ το αντίστροφο flag ονομάζεται HWND_NOTOPMOST. Φυσικά θα πρέπει να εξηγήσεις στην SetWindowPos ότι δεν επιθυμείς καμία άλλη αλλαγή εκτός από το flag αυτό (παραδοσιακά δεν ασχολούμαι με το Z-Order του παραθύρου). Για να κάνουμε λοιπόν ένα παράθυρο Top-Most: > SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOREPOSITION | SWP_NOSIZE); Και το αντίστροφο: > SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOREPOSITION | SWP_NOSIZE); * Όπου hWnd τοποθετείς το HWND Handle του παράθυρου σου (διάλογος ή φόρμα κτλ -- για παράδειγμα σε C++ Builder γράφεις myForm->Handle). Καλή τύχη. Υ.Γ. Περιμένω μια registered έκδοση (αφού δεν πρόκειται για freeware αν κατάλαβα σωστά..) της εφαρμογή σου στο mail-box μου (για το mail μου στείλε pm)
Evgenios1 Δημοσ. 17 Σεπτεμβρίου 2008 Μέλος Δημοσ. 17 Σεπτεμβρίου 2008 thx Πες μου μια πως θα κανω ενα event το οποιο , οταν παταω ctrl+h να μου εκτελει μια method , αλλα οχι πανω στα αντικειμενα (πχ. this.textbox.KeyPress+= new KeyPressHandler...). Το θελω σε "Global" κατασταση (για να γγηνω σαφης πχ Exω Active window το Explorer με το πατιμα τοy hotkey να μου εκτελει το event "το application δεν ειναι spy απλος το interface ειναι μια μπαρα και θελω να τι κανω active η το ανδιθξετο")
Directx Δημοσ. 17 Σεπτεμβρίου 2008 Δημοσ. 17 Σεπτεμβρίου 2008 Αυτό που ζητάς γίνεται με διάφορους τρόπους, παραδοσιακά αν θέλουμε να παρακολουθήσουμε το πληκτρολόγιο ανεξαρτήτως διεργασίας (process) στήνουμε ένα Keyboard Hook, μια DLL δηλαδή που φορτώνεται (από τον Loader μας χρησιμοποιώντας το Hook API των Windows) σε κάθε process του συστήματος και παρακολουθεί το πληκτρολόγιο προβαίνοντας στις κατάλληλες ενέργειες όταν εντοπίζουμε το hot-key που επιθυμούμε (για παράδειγμα αποστολή κάποιου control message στο παράθυρο της εφαρμογής μας κτλ.) Αυτό το σενάριο βέβαια κοστίζει σε χρόνο ανάπτυξης πολύ περισσότερο από άλλες υπάρχουσες λύσεις και ενδεχομένως να μην είναι ιδανικό για την εφαρμογή σου.. Έτσι μπορούμε εύκολα και γρήγορα να ελέγξουμε αν κάποιο πλήκτρο είναι πατημένο με την βοήθεια της GetAsyncKeyState η οποία επιστρέφει σε αυτή την περίπτωση hi-byte TRUE (1) ή FALSE (0) αν το πλήκτρο είναι ελεύθερο, ανεξαρτήτως του ενεργού (foreground) thread (και φυσικά process). Τώρα πρόσεξε σε Windows 2000/XP τα πράγματα είναι λίγο πιο περιορισμένα όμως καθώς το process μας α) παρακολουθεί μόνο το Actibe Desktop και β) το Desktop θα πρέπει να επιτρέπει Hooking / Journaling (προφανώς η GetAsyncKeyState εσωτερικά βασίζεται σε Hooks). Ακολουθεί κώδικας που αν τοποθετηθεί σε ένα Timer για παράδειγμα, ανιχνεύει την κατάσταση των πλήκτρων CONTROL + H, πάντα σε C και C++ Builder. > if(HIBYTE(GetAsyncKeyState(VK_CONTROL)) && HIBYTE(GetAsyncKeyState('H'))) { // TODO: Add code to handle Control+H }
Evgenios1 Δημοσ. 20 Σεπτεμβρίου 2008 Μέλος Δημοσ. 20 Σεπτεμβρίου 2008 vou a la > extern "C" __declspec(dllexport) bool IsKeyDown(char key) { if(HIBYTE(GetAsyncKeyState(key))) { return true; } else { return false; } } Δε μου λες πως ειναι το enum των πληκτρων ctr shift alt home end etc.
Directx Δημοσ. 20 Σεπτεμβρίου 2008 Δημοσ. 20 Σεπτεμβρίου 2008 vou a la > extern "C" __declspec(dllexport) bool IsKeyDown(char key) { if(HIBYTE(GetAsyncKeyState(key))) { return true; } else { return false; } } Δε μου λες πως ειναι το enum των πληκτρων ctr shift alt home end etc. Ρίξε μια ματιά στο http://msdn.microsoft.com/en-us/library/ms927178.aspx , τους δίνει αναλυτικά.
Evgenios1 Δημοσ. 22 Σεπτεμβρίου 2008 Μέλος Δημοσ. 22 Σεπτεμβρίου 2008 Raedy >extern "C" __declspec(dllexport) bool IsKeyDown(int key) { if(HIBYTE(GetAsyncKeyState(key))&&HIBYTE(GetAsyncKeyState(18)) { return true; } else{return false;} } Δες τι μου ηρθε να φτιαξω: app1
Evgenios1 Δημοσ. 24 Σεπτεμβρίου 2008 Μέλος Δημοσ. 24 Σεπτεμβρίου 2008 Κειτα θελω να βαλω μια επιλογη η οποια θα ρυθμιζει το προγραμμα να τρεχει μολης τα windows φορτοσουν και εχω το εξης: > private void SetAutoRun() { Microsoft.Win32.Registry.SetValue( @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "I see you", "\"" + Application.ExecutablePath + "\"" + " autorun"); } Και στο σημειο εισοδου εχω το εξης: > static void Main(String[] args) { if(args.Length!=0) { if(args[0]=="autorun") { /*run app with paraments*/ } } else{ /*run default app*/} } Ιδου το ερωτημα, θα κανει αυτο που θελω η θα παω για format?
Directx Δημοσ. 24 Σεπτεμβρίου 2008 Δημοσ. 24 Σεπτεμβρίου 2008 Δεν προγραμματίζω σε C# & .NET αλλά νομίζω ότι θα δουλέψει ... αλλά και αν δεν δουλέψει, format δεν θα χρειασθεί. Υ.Γ. Κρατώ μια επιφύλαξη για το args[0] καθώς σε C/C++ παραδοσιακά το ανάλογο του (argv[0]) υποδεικνύει στην διαδρομή του εκτελέσιμου με τις παραμέτρους να ξεκινούν στο argv[1] (args[1] ; ), φυσικά δεν ξέρω αν αυτό ισχύει σε .NET & C#.
Evgenios1 Δημοσ. 24 Σεπτεμβρίου 2008 Μέλος Δημοσ. 24 Σεπτεμβρίου 2008 >static void Main(String[] args) { if(args!=null) { if(args[0]=="autorun") { /*run app with paraments*/ } else{/*run default*/} } else{ /*run default app*/} } > private void SetAutoRunOn() { Microsoft.Win32.Registry.SetValue( @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "I see you", (object)("\"" + Application.ExecutablePath + "\"" + " autorun")); } > private void SetAutoRunOff() { Microsoft.Win32.Registry.SetValue( @"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", "I see you", (object)("\"" + Application.ExecutablePath + "\"" + " default")); } Αυτες τοις αλλαγες εκανα και ειναι οκ
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.