2012-09-18 5 views
2

S'il vous plaît aidez-moi à créer un crochet pour la fonction AP.I GetSystemMetrics. Je veux que lorsque certaines applications (par exemple calc.exe) appellent GetSystemMetrics ils reçoivent ma valeur (par exemple 500x500) et d'autres applications obtiennent la taille d'écran correcte. Et si quelqu'un peut me dire comment je peux utiliser C# et .net CF 2.0, je serai très heureux.Crochet pour la fonction API GetSystemMetrics

Merci et espérons pour votre aide.

+2

[Pourquoi?] (Http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) – tenfour

Répondre

0

Vous ne pouvez pas faire cela, même en code natif (du moins pas sans hacks de mémoire moche, mauvaise idée, vtable/kernel qui peuvent ou ne peuvent pas continuer à travailler à travers les versions du système d'exploitation). GetSystemMetrics appelle le système d'exploitation pour obtenir des informations sur la plate-forme. À moins de recompiler le système d'exploitation et de modifier ces valeurs, il est impossible de "remplacer" ces valeurs et de demander au système d'exploitation de signaler d'autres nombres (à moins que le système d'exploitation ne soit déjà construit quelque part votre application peut modifier - comme le registre).

EDIT

Sur la base de vos commentaires, votre problème réel est que vous essayez de créer une forme d'application de type « barre des tâches » et vous aimeriez que d'autres applications en dehors de votre contrôle pour ne pas superposer votre barre des tâches quand ils maximisent. C'est exactement comme cela fonctionne la barre des tâches Explorer existante, donc ma suggestion est d'aller voir dans le code source de l'interpréteur de commandes par défaut et voir comment cela est accompli ici. Le résultat final sera probablement de cloner le code shell existant et de modifier la barre des tâches existante pour répondre à vos besoins, ou vous allez créer une application shell entièrement nouvelle qui a le comportement souhaité, mais vous presque certainement vont devoir remplacer le shell, et cela ne peut être fait avec du code natif.

+0

Bien sûr, vous pouvez le faire; ça va juste être terrible. – tenfour

+0

Peut-être que je peux créer quelque chose comme la région de l'écran et exécuter cette application dans cette région/sandbox? –

+0

Si vous essayez de créer une chose de type "barre des tâches" personnalisée, vous avez juste besoin d'écrire un remplacement de la coque. – ctacke

0

Je ne pense pas qu'il soit possible de faire en C#/.NET sans écrire de code natif. Cependant, les bonnes nouvelles sont qu'il ya une bibliothèque merveilleuse appelée madCodeHook qui est vraiment facile à utiliser. Jetez un oeil à http://madshi.net/

Questions connexes