2008-10-29 7 views
2

Je viens de voir une caractéristique de l'interface utilisateur vraiment utile du 7 prochaine de Windows (visitez http://www.gizmodo.com.au/2008/10/windows_7_walkthrough_boot_video_and_impressions-2.html et faites défiler jusqu'à la vidéo intitulée super scientifique vidéo de nouvelle fenêtre Redimensionnement Feature)Accrochage dans Windows avec C# pour produire Windows 7 Nouvelle fonctionnalité

En un mot, vous pouvez faire glisser une fenêtre par la barre de titre vers le haut de l'écran pour la maximiser, la faire glisser vers le bas pour la restaurer et la faire glisser vers le bord gauche ou le bord droit de l'écran contre le bord que vous avez traîné à, et redimensionné pour occuper la moitié de l'écran. Maintenant, je sais qu'il y a un tas d'applications basées sur le clavier qui font des choses "similaires" mais je n'ai pas vu un programme basé sur la souris qui fait ce qui précède, simple, utile et rien de plus. Si vous connaissez un (ou êtes assez intelligent pour écrire un) s'il vous plaît poster l'URL :)

Quoi qu'il en soit, si je voulais essayer d'écrire une petite application pour ce faire, j'ai une question:

Si Je voulais essayer d'écrire une petite application pour le faire, puis-je l'écrire en tant qu'application .NET? Je suppose que l'accrochage dans la gestion de glisser/déposer de Windows est assez bas et peut-être pas quelque chose qui pourrait être fait en C# .NET?

les smartypants ici qui peuvent frapper une petite application comme celle-ci dans leur lunchbreak? ;) Je suis sûr que tout ce qui mime les fonctionnalités de Windows 7 serait très populaire, au moins avant le lancement de Windows 7.

Edit: Les gars AeroSnap (http://www.aerosnap.de/index_eng.htm) ont fait un bon travail de mise en œuvre de cette fonctionnalité et à en juger par le nombre de téléchargements, il était une caractéristique populaire!

+0

Et éventuellement poster le lancement de Windows 7 aussi: P – Luke

Répondre

-1

Oui, vous pouvez le faire à partir de C#, via PInvoke. Tbh, la meilleure façon d'apprendre de telles API est de regarder la source de quelque chose comme Bblean. Cela vous montrera ce que vous devez savoir et l'exposer à PInvoke est plutôt trivial.

+0

NON, n'ajoutez pas de crochets écrits en code managé. Cela entraînera le chargement de l'exécution dans toutes les applications du système. Pire encore, si l'autre application est également gérée, vous risquez de vous retrouver avec la mauvaise version du runtime, que ce soit pour votre hook ou pour l'autre application. – erikkallen

0

pinvoke.net

Ceci est un bon site de référence pour l'utilisation de l'API Windows via PInvoke à partir des applications .NET.

+0

Merci pour le lien de pinvoke.net. Beaucoup de détails sur l'API à explorer! – Sprogz

0

Merci d'avoir pris le temps de répondre. Je vais commander en utilisant PInvoke. Je suppose que j'ai besoin de frapper l'API Windows à la fois pour l'accrochage dans les fenêtres ainsi que pour le déplacement/redimensionnement de la fenêtre déplacée?

+0

Oui - la meilleure façon d'apprendre ce genre de choses est en regardant bblean, selon mon expérience. Un ami travaillait sur un port de Bblean à Nemerle (un autre langage .NET) - si vous google autour, vous pourriez être en mesure de trouver la source. –

1

Si votre objectif est de créer un hook qui fonctionne sur toutes les applications et donc sur toutes les fenêtres du bureau, vous ne pouvez pas utiliser un assembly de code managé. Vous devrez écrire dans un langage qui produit des DLL traditionnelles telles que C++.

Afin d'accrocher au niveau du système qui se connecte alors dans toutes les applications en cours d'exécution, vous devez fournir une DLL qui peut être placée dans les espaces d'adresses de tous les aps en cours d'exécution. Je me risquerais à dire qu'un grand pourcentage des aps quotidiens de la plupart des gens ne sont pas gérés.

+0

C'est ce que j'avais peur après avoir lu au bas d'un [article MSDN sur le sujet de Windows crochets dans C# .NET] (http://support.microsoft.com/kb/318804/) qui a déclaré "Global Les hooks ne sont pas supportés dans le .NET Framework. " Quel est le dif entre un hook global et les hooks dans cet article MSDN? – Sprogz

+0

L'article MSDN configure les hooks locaux de l'application. Lorsque l'exemple de code appelle SetWindowsHookEx avec le AppDomain.GetCurrentThreadId() pour le paramètre dwThreadId, il rend son hook local. Changez ce paramètre à zéro et vous avez un hook global - ne le lancez pas dans .net il va exploser. – Bill

+0

Aussi, je recommande l'article http://www.codeproject.com/KB/system/WilsonSystemGlobalHooks.aspx comme indiqué par Nick. Nous avons fait quelque chose de similaire pour permettre à une application VB d'être le destinataire des activités d'entrée globales. Nous avons créé une DLL C++ qui renvoyait des messages d'erreur personnalisés à une fenêtre de l'application VB. – Bill

6

Il y a une façon officielle: Windows API Code Pack

Le code API Windows Pack pour Microsoft .NET Framework fournit une bibliothèque de code source qui peut être utilisé pour accéder à de nouvelles fonctionnalités de Windows 7 (et certains caractéristiques existantes des anciennes versions du système d'exploitation Windows) à partir du code managé. Ces fonctionnalités Windows ne sont pas disponibles pour les développeurs dans le .NET Framework.

Les caractéristiques individuelles prises en charge dans cette version (v1.0) de la bibliothèque sont les suivants:

Windows 7 Taskbar Jump Lists, icône de recouvrement, Barre de progression, Tabbed Vignettes et barres d'outils miniatures. Windows 7 Bibliothèques, dossiers connus, conteneurs sans système de fichiers. Prise en charge de l'API de recherche Windows Shell, hiérarchie d'entités Shell Namespace et fonctionnalité de glisser-déposer pour les objets Shell. Contrôle du navigateur de l'explorateur. Système de propriétés Shell. Windows Vista et Windows 7 Dialogues de fichiers communs, y compris les contrôles personnalisés. Dialogues de tâches Windows Vista et Windows 7.

+0

Ceci est la réponse. – Will