C# - l'Envoi de messages à Google Chrome à partir de C# de l'application
J'ai cherché partout, et je n'ai pas trouvé comment je pourrais le faire à partir de C#.
Que je voulais faire donc je pourrais dire à Google Chrome pour aller Avant, Retour, Ouvrir un Nouvel Onglet, Fermer l'Onglet, Ouvrir une Nouvelle Fenêtre, et Fermer la Fenêtre à partir de mon application en C#.
J'ai fait quelque chose de similaire avec WinAmp à l'aide de
[DllImport("user32", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);
et quelques autres. Mais je ne sais pas ce message à envoyer ou comment trouver ce que la fenêtre de la passer, ou quoi que ce soit.
Si quelqu'un pourrait-il me montrer comment je pourrais envoyer les 6 commandes de google Chrome à partir de C#? grâce
EDIT:
Ok, je suis arriver a voté vers le bas, donc peut-être que je n'étais pas assez claire, ou les gens sont en supposant que je n'ai pas essayer de comprendre cela sur mon propre.
Tout d'abord, je ne suis pas très bon avec l'ensemble de l'DllImport choses. Je suis encore à apprendre comment tout cela fonctionne.
J'ai trouvé comment faire la même idée dans winamp il y a quelques années, et je regardais mon code. Je l'ai fait afin que je puisse sauter une chanson, revenir en arrière, de lecture, de pause et d'arrêter de winamp à partir de mon code C#. J'ai commencé par l'importation:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr FindWindow([MarshalAs(UnmanagedType.LPTStr)] string lpClassName, [MarshalAs(UnmanagedType.LPTStr)] string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SendMessageA(IntPtr hwnd, int wMsg, int wParam, uint lParam);
[DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
public static extern int GetWindowText(IntPtr hwnd, string lpString, int cch);
[DllImport("user32", EntryPoint = "FindWindowExA")]
private static extern int FindWindowEx(int hWnd1, int hWnd2, string lpsz1, string lpsz2);
[DllImport("user32", EntryPoint = "SendMessageA")]
private static extern int SendMessage(int Hwnd, int wMsg, int wParam, int lParam);
Ensuite le code que j'ai trouvé pour utiliser ce utilisé ces constantes pour les messages que j'envoie.
const int WM_COMMAND = 0x111;
const int WA_NOTHING = 0;
const int WA_PREVTRACK = 40044;
const int WA_PLAY = 40045;
const int WA_PAUSE = 40046;
const int WA_STOP = 40047;
const int WA_NEXTTRACK = 40048;
const int WA_VOLUMEUP = 40058;
const int WA_VOLUMEDOWN = 40059;
const int WINAMP_FFWD5S = 40060;
const int WINAMP_REW5S = 40061;
Je voudrais obtenir le hwnd (le programme pour envoyer le message) par:
IntPtr hwnd = FindWindow(m_windowName, null);
alors je voudrais envoyer un message à ce programme:
SendMessageA(hwnd, WM_COMMAND, WA_STOP, WA_NOTHING);
Je suppose que je ferais quelque chose de très similaire à ce pour Google Chrome. mais je ne sais pas ce que certaines de ces valeurs doivent être, et j'ai googlé autour d'essayer de trouver la réponse, mais je ne pouvais pas, c'est pourquoi j'ai demandé ici. Donc ma question est comment puis-je obtenir les valeurs pour:
m_windowName et WM_COMMAND
et puis, les valeurs pour les différentes commandes, avant, retour, nouvel onglet, fermer l'onglet, nouvelle fenêtre, fermer la fenêtre?
Vous devez vous connecter pour publier un commentaire.
Commencer votre recherche à http://dev.chromium.org/developers
MODIFIER: Envoi d'un message à une fenêtre est seulement la moitié du travail. La fenêtre doit répondre à ce message et agir en conséquence. Si cette fenêtre ne sais pas à propos d'un message ou n'a pas fait attention à tout ce que vous n'avez aucune chance de le contrôler par la fenêtre d'envoi de messages.
Vous êtes à la recherche à la mise en œuvre de détails sur la façon dont vous contrôlé à distance Winamp. L'envoi de messages est juste une façon de le faire et c'est la façon dont la Winamp, les développeurs ont choisi. Ces messages que vous utilisez sont définis par l'utilisateur des messages qui ont un sens particulier seulement à Winamp.
Ce que vous avez à faire dans la première étape est de trouver si Chrome prend en charge un certain type de contrôle à distance et ce que ces mécanismes sont.
Vous pouvez obtenir le nom de la fenêtre facilement à l'aide de Visual Studio Spy++ et en appuyant sur les touches CTRL+F, puis la recherche de chrome. Je l'ai essayé et obtenu
"Chrome_VistaFrame" de la fenêtre. La fenêtre réelle avec la page web est "Chrome_RenderWidgetHostHWND".
Autant que WM_COMMAND va - vous aurez besoin d'expérimenter. Vous aurez évidemment voulez envoyer des clics sur le bouton (WM_MOUSEDOWN du haut de ma tête). À l'arrière,de l'avant boutons ne sont pas leurs propres windows, vous aurez besoin de comprendre comment faire cela avec de simuler un clic de souris à une position x,y de sorte chrome sait ce que vous faites. Ou vous pouvez envoyer le raccourci clavier équivalent pour l'arrière/vers l'avant et ainsi de suite.
Un exemple, j'ai écrit tout à l'heure le fait avec trillian et winamp: l'envoi de messages de windows via c# et winapi
Il y a aussi des outils pour la macro de ce genre de chose déjà, à l'aide d'un langage de script - autoit est celui que j'ai utilisé: autoit.com
Ok, voici ce que j'ai eu jusqu'à présent... j'ai un peu de savoir ce que je dois faire, mais c'est juste une question de le faire maintenant...
Voici la fenêtre de Spy++, j'ai bloqué sur la Chrome_RenderWidgetHostHWND et cliqué sur le bouton de Retour sur mon clavier. Voici ce que j'ai:
Voici donc mes hypothèses, et j'ai été jouer avec cela pour toujours maintenant, je ne peux pas trouver le valeurs.
Maintenant, je ne sais pas ce que je dois faire l'WM_KEYDOWN/valeurs ou les VK_BROWSER_BACK/en AVANT les valeurs de...
J'ai essayé ceci:
Les deux dernières valeurs que j'ai reçu de l'image j'ai juste montré, les ScanCodes pour ces deux clés. Je ne sais pas si je l'ai fait juste. Le premier des deux valeurs que j'ai obtenu après une recherche google pour les WM_KEYDOWN valeur, et que quelqu'un a utilisé &H100 et &H101 pour les deux valeurs. J'ai essayé plusieurs autres aléatoire des idées que j'ai vu flottant autour. Je ne peux pas comprendre cela.
Oh, et voici la méthode SendMessage
C'est un excellent site pour l'interopérabilité des constantes:
pinvoke
Une autre façon de trouver des valeurs est à la recherche koders.com, à l'aide de C# comme langage pour WM_KEYDOWN, ou la constante que vous êtes après:
Koders.com recherche
&H valeurs ressembler, à partir de VB(6). pinvoke et koders à la fois le retour des résultats pour VK_BROWSER_FORWARD,
(Il est drôle de voir comment beaucoup de mauvaises définitions de VK constantes sont flottant au sujet, compte tenu de VK_* sont 1 octet 0 à 255 valeurs, et les gens ont fait d'eux des nombres uint compris).
Ressemble un peu différent de votre consts. Je pense que la fonction que vous êtes après est SendInput (mais je n'ai pas essayé) car c'est une clé virtuelle.
Explication sur les paramètres:
Paramètres
Il a besoin d'un KEYBOARD_INPUT type:
Et enfin un échantillon, je n'ai pas testé si ça marche:
Aussi, vous aurez besoin de se concentrer le Chrome de la fenêtre à l'aide de SetForegroundWindow