2010-08-21 4 views
1
int x = 5; 
int y = 10; 

y = y << 16; 
int coord = x | y; 

NativeMethods.SendMessage(hwnd, WM_LBUTTONDOWN, new IntPtr(0), new IntPtr(coord)); 
NativeMethods.SendMessage(hwnd, WM_LBUTTONUP, new IntPtr(0), new IntPtr(coord)); 

En utilisant le code ci-dessus (ref: MSDN), je suis en mesure de sélectionner une ligne dans une datagridview dans une application externe. Je voudrais savoir comment je peux envoyer un ctrl-a et un ctrl-c au même datagridview.API Windows et SendMessage()

Toujours en train de vous connecter pour savoir pourquoi les variables x et y sont initialisées à 5,10, et pourquoi y est décalé de 16, puis | avec x.

+0

Êtes-vous accrocher cette application "externe"? Ou avez-vous tout le code source? – JustBoo

+0

référençant une application Windows Forms externe. – Gooose

Répondre

1

Qu'en est-ce:

SendMessage(hwnd, WM_KEYDOWN, VK_CTRL, 0); 
SendMessage(hwnd, WM_KEYDOWN, 0x43, 0); 
// Ctrl and C keys are both pressed. 
SendMessage(hwnd, WM_KEYUP, 0x43, 0); 
SendMessage(hwnd, WM_KEYUP, VK_CTRL, 0); 

0x43 étant la touche C (voir http://msdn.microsoft.com/en-us/library/dd375731(v=VS.85).aspx)


Edit: Si cela ne fonctionne pas, essayez d'envoyer WM_COPY, qui devrait être Meilleure idée.

SendMessage(hwnd, WM_COPY, 0, 0); 
+0

Merci. Test maintenant. – Gooose

+0

Pas de chance. J'ai essayé le suivant SendMessage (hwnd, WM_KEYDOWN, nouveau IntPtr (VK_CTRL), nouveau IntPtr (0)); SendMessage (hwnd, WM_KEYDOWN, nouveau IntPtr (0x43), nouveau IntPtr (0)); SendMessage (hwnd, WM_KEYDOWN, nouveau IntPtr (0x43), nouveau IntPtr (0)); SendMessage (hwnd, WM_KEYDOWN, nouveau IntPtr (VK_CTRL), nouveau IntPtr (0)); Je peux voir la ligne sélectionnée, mais quand je fais un ctrl-v dans le bloc-notes, je ne vois pas le texte copié – Gooose

+0

J'ai édité ma réponse, je viens de rencontrer 'WM_COPY' sur MSDN, essayez ça. –

1

Vous pourriez avoir besoin de Windows Subclassing. Notez que ce n'est pas un sous-classement C++.

Cette technique envoie des messages d'une procédure de fenêtre particulière (WndProc) à un autre WndProc, obtenant ainsi ce que vous semblez vouloir.

Une fois la configuration effectuée, cela fonctionne. MSDN est léger sur cette information, donc le lien ci-dessus comme un tutoriel.

Plus d'infos:

Subclassing Controls - MSDN

ActiveX Controls: Subclassing a Windows Control

** Subclassing Windows Forms Controls Peut être la plus pertinente.

+0

Merci. 1001. :-) – JustBoo

0

Liens supplémentaires pour "Windows Hooking". C'est une technique pour accrocher ou piéger des messages et des événements dans des applications externes.

Hooking

EasyHook

MSDN Hooks Bon aperçu.

HTH