No uses SendKeys()
Usa la API:
Virtual Key
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, _
ByVal bScan As Byte, _
ByVal dwflags As Long, ByVal dwExtraInfo As Long)
Private Declare Function GetKeyboardState Lib "user32" _
(pbKeyState As Byte) As Long
Private Declare Function SetKeyboardState Lib "user32" _
(lppbKeyState As Byte) As Long
http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx
Un ejemplo de la MSDN (en C, pero al ser algo muy simple te puedes dar una idea muy clara como si fuera vb6 no difiere en prácticamente nada solo el array BYTE).
#include <windows.h>
void SetNumLock( BOOL bState )
{
BYTE keyState[256];
GetKeyboardState((LPBYTE)&keyState);
if( (bState && !(keyState[VK_NUMLOCK] & 1)) ||
(!bState && (keyState[VK_NUMLOCK] & 1)) )
{
// Simulate a key press
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );
// Simulate a key release
keybd_event( VK_NUMLOCK,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0);
}
}
void main()
{
SetNumLock( TRUE );
}
DDE o también algo mas nuevo OLE, COM u OLE Automation
Dulces Lunas!¡.