On 2 Feb, 11:45, "Danny" <dNOSPAMMERSa.. .@sysNOSPAMMERS temc.com>
wrote:
Hi
I want to be able from my csharp button to start an application ( which I
can do) and then somehow send a message to the win32 application that says
"press the button"
The win32 application ( borland app) has a button on it that I need to click
in order for it to start correctly. Is this possible from csharp??
thanks
Danny
Here's some scraps of code from a technology demo I did a while ago.
It includes the Dllimports you'll need and the windows message type
enum after all the code.
The code itself is harvested from a number of buttons on a form, thus
the scrappy nature and I've left a gap between each of the buttons
code (with all the other rubbish taken out. It shows how to enter text
in a text box and press a button. You'll see ThuderRTCommand Button in
there, so you can tell I was trying to control a VB6 app.
In Visual studio you should have Spy++ this is essential for
identifying the names of controls and such like.
Right here's the code: have a play and shout if you get stuck. Random
code first, then a couple of helper methods and finally the imports
and enum. At the very least you'll have more specific terms to google
on :)
txt1.Text=FindW indow(null, "Window Title").ToStrin g();
int hWnd =
(int)FindWindow Ex((IntPtr)int. Parse(txt1.Text ) ,IntPtr.Zero,"T hunderRT6TextBo x","");//"Text1");
int hWnd =
(int)FindWindow Ex((IntPtr)int. Parse(txt1.Text ) ,IntPtr.Zero,"T hunderRT6TextBo x","");//"Text1");
PostMessage((In tPtr) hWnd,(UInt32) WindowsMessages .WM_SETFOCUS,0, 0);
txt2.Text = hWnd.ToString() ;
SendStream("Som e text to the text box",int.Parse( txt2.Text));
PostMessage((In tPtr) hWnd,(UInt32) WindowsMessages .WM_SETFOCUS,0, 0);
int hWnd = (int)FindWindow Ex((IntPtr)int. Parse(txt1.Text ) ,
(IntPtr)int.Par se(txt2.Text)," ThunderRT6TextB ox","");//"Text1");
PostMessage((In tPtr) hWnd,(UInt32) WindowsMessages .WM_SETFOCUS,0, 0);
txt3.Text = hWnd.ToString() ;
SendStream("tex t going to a text box",int.Parse( txt3.Text));
int hWnd =
(int)FindWindow Ex((IntPtr)int. Parse(txt1.Text ) ,IntPtr.Zero,"T hunderRT6Comman dButton",null);//"Text1");
hWnd = (int)FindWindow Ex((IntPtr)int. Parse(txt1.Text ) ,(IntPtr)
hWnd,"ThunderRT 6CommandButton" ,null);//"Text1");
txt4.Text=PostM essage((IntPtr) hWnd,
(UInt32)Windows Messages.WM_LBU TTONDOWN,0,0).T oString();
txt4.Text=PostM essage((IntPtr) hWnd,
(UInt32)Windows Messages.WM_LBU TTONUP,0,0).ToS tring();
private void SendStream(stri ng pMessage,int phWnd)
{
uint aKey;
ClearBox(phWnd) ;
foreach (char c in pMessage.ToChar Array())
{
aKey=MapVirtual Key((uint)c,1);
txt3.Text= PostMessage((In tPtr) phWnd,(UInt32)
WindowsMessages .WM_KEYDOWN,(in t)VkKeyScan(c) ,0).ToString();
//txt3.Text= PostMessage((In tPtr)int.Parse( txt2.Text),(uin t)
WindowsMessages .WM_KEYUP,(int) VkKeyScan(c) ,0).ToString();
}
}
private void ClearBox(int phWnd)
{
for (int c = 0;c <50 ; c++)
{
PostMessage((In tPtr) phWnd,(UInt32) WindowsMessages .WM_KEYDOWN,
(int)VkKeyScan( (char)8) ,0).ToString();
}
}
[DllImport("user 32.dll", SetLastError = true)]
static extern IntPtr FindWindow(stri ng lpClassName, string
lpWindowName);
[DllImport("user 32.dll", SetLastError = true)]
public static extern IntPtr FindWindowEx(In tPtr parentHandle, IntPtr
childAfter, string className, IntPtr windowTitle);
[DllImport("user 32.dll")]
private static extern bool PostMessage(
IntPtr hWnd, // handle to destination window
UInt32 Msg, // message
Int32 wParam, // first message parameter
Int32 lParam // second message parameter
);
[DllImport("user 32.dll", SetLastError = true)]
static extern IntPtr FindWindowEx(In tPtr hwndParent, IntPtr
hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("user 32.dll")]
static extern uint MapVirtualKey(u int uCode, uint uMapType);
[DllImport("user 32.dll")]
static extern short VkKeyScan(char ch);
private enum WindowsMessages
{
WM_SETFOCUS = 0x7,
WM_ACTIVATE = 0x6,
WM_ACTIVATEAPP = 0x1C,
WM_AFXFIRST = 0x360,
WM_AFXLAST = 0x37F,
WM_APP = 0x8000,
WM_ASKCBFORMATN AME = 0x30C,
WM_CANCELJOURNA L = 0x4B,
WM_CANCELMODE = 0x1F,
WM_CAPTURECHANG ED = 0x215,
WM_CHANGECBCHAI N = 0x30D,
WM_CHAR = 0x102,
WM_CHARTOITEM = 0x2F,
WM_CHILDACTIVAT E = 0x22,
WM_CLEAR = 0x303,
WM_CLOSE = 0x10,
WM_COMMAND = 0x111,
WM_COMPACTING = 0x41,
WM_COMPAREITEM = 0x39,
WM_CONTEXTMENU = 0x7B,
WM_COPY = 0x301,
WM_COPYDATA = 0x4A,
WM_CREATE = 0x1,
WM_CTLCOLORBTN = 0x135,
WM_CTLCOLORDLG = 0x136,
WM_CTLCOLOREDIT = 0x133,
WM_CTLCOLORLIST BOX = 0x134,
WM_CTLCOLORMSGB OX = 0x132,
WM_CTLCOLORSCRO LLBAR = 0x137,
WM_CTLCOLORSTAT IC = 0x138,
WM_CUT = 0x300,
WM_DEADCHAR = 0x103,
WM_DELETEITEM = 0x2D,
WM_DESTROY = 0x2,
WM_DESTROYCLIPB OARD = 0x307,
WM_DEVICECHANGE = 0x219,
WM_DEVMODECHANG E = 0x1B,
WM_DISPLAYCHANG E = 0x7E,
WM_DRAWCLIPBOAR D = 0x308,
WM_DRAWITEM = 0x2B,
WM_DROPFILES = 0x233,
WM_ENABLE = 0xA,
WM_ENDSESSION = 0x16,
WM_ENTERIDLE = 0x121,
WM_ENTERMENULOO P = 0x211,
WM_ENTERSIZEMOV E = 0x231,
WM_ERASEBKGND = 0x14,
WM_EXITMENULOOP = 0x212,
WM_EXITSIZEMOVE = 0x232,
WM_FONTCHANGE = 0x1D,
WM_GETDLGCODE = 0x87,
WM_GETFONT = 0x31,
WM_GETHOTKEY = 0x33,
WM_GETICON = 0x7F,
WM_GETMINMAXINF O = 0x24,
WM_GETOBJECT = 0x3D,
WM_GETSYSMENU = 0x313,
WM_GETTEXT = 0xD,
WM_GETTEXTLENGT H = 0xE,
WM_HANDHELDFIRS T = 0x358,
WM_HANDHELDLAST = 0x35F,
WM_HELP = 0x53,
WM_HOTKEY = 0x312,
WM_HSCROLL = 0x114,
WM_HSCROLLCLIPB OARD = 0x30E,
WM_ICONERASEBKG ND = 0x27,
WM_IME_CHAR = 0x286,
WM_IME_COMPOSIT ION = 0x10F,
WM_IME_COMPOSIT IONFULL = 0x284,
WM_IME_CONTROL = 0x283,
WM_IME_ENDCOMPO SITION = 0x10E,
WM_IME_KEYDOWN = 0x290,
WM_IME_KEYLAST = 0x10F,
WM_IME_KEYUP = 0x291,
WM_IME_NOTIFY = 0x282,
WM_IME_REQUEST = 0x288,
WM_IME_SELECT = 0x285,
WM_IME_SETCONTE XT = 0x281,
WM_IME_STARTCOM POSITION = 0x10D,
WM_INITDIALOG = 0x110,
WM_INITMENU = 0x116,
WM_INITMENUPOPU P = 0x117,
WM_INPUTLANGCHA NGE = 0x51,
WM_INPUTLANGCHA NGEREQUEST = 0x50,
WM_KEYDOWN = 0x100,
WM_KEYFIRST = 0x100,
WM_KEYLAST = 0x108,
WM_KEYUP = 0x101,
WM_KILLFOCUS = 0x8,
WM_LBUTTONDBLCL K = 0x203,
WM_LBUTTONDOWN = 0x201,
WM_LBUTTONUP = 0x202,
WM_MBUTTONDBLCL K = 0x209,
WM_MBUTTONDOWN = 0x207,
WM_MBUTTONUP = 0x208,
WM_MDIACTIVATE = 0x222,
WM_MDICASCADE = 0x227,
WM_MDICREATE = 0x220,
WM_MDIDESTROY = 0x221,
WM_MDIGETACTIVE = 0x229,
WM_MDIICONARRAN GE = 0x228,
WM_MDIMAXIMIZE = 0x225,
WM_MDINEXT = 0x224,
WM_MDIREFRESHME NU = 0x234,
WM_MDIRESTORE = 0x223,
WM_MDISETMENU = 0x230,
WM_MDITILE = 0x226,
WM_MEASUREITEM = 0x2C,
WM_MENUCHAR = 0x120,
WM_MENUCOMMAND = 0x126,
WM_MENUDRAG = 0x123,
WM_MENUGETOBJEC T = 0x124,
WM_MENURBUTTONU P = 0x122,
WM_MENUSELECT = 0x11F,
WM_MOUSEACTIVAT E = 0x21,
WM_MOUSEFIRST = 0x200,
WM_MOUSEHOVER = 0x2A1,
WM_MOUSELAST = 0x20A,
WM_MOUSELEAVE = 0x2A3,
WM_MOUSEMOVE = 0x200,
WM_MOUSEWHEEL = 0x20A,
WM_MOVE = 0x3,
WM_MOVING = 0x216,
WM_NCACTIVATE = 0x86,
WM_NCCALCSIZE = 0x83,
WM_NCCREATE = 0x81,
WM_NCDESTROY = 0x82,
WM_NCHITTEST = 0x84,
WM_NCLBUTTONDBL CLK = 0xA3,
WM_NCLBUTTONDOW N = 0xA1,
WM_NCLBUTTONUP = 0xA2,
WM_NCMBUTTONDBL CLK = 0xA9,
WM_NCMBUTTONDOW N = 0xA7,
WM_NCMBUTTONUP = 0xA8,
WM_NCMOUSEHOVER = 0x2A0,
WM_NCMOUSELEAVE = 0x2A2,
WM_NCMOUSEMOVE = 0xA0,
WM_NCPAINT = 0x85,
WM_NCRBUTTONDBL CLK = 0xA6,
WM_NCRBUTTONDOW N = 0xA4,
WM_NCRBUTTONUP = 0xA5,
WM_NEXTDLGCTL = 0x28,
WM_NEXTMENU = 0x213,
WM_NOTIFY = 0x4E,
WM_NOTIFYFORMAT = 0x55,
WM_NULL = 0x0,
WM_PAINT = 0xF,
WM_PAINTCLIPBOA RD = 0x309,
WM_PAINTICON = 0x26,
WM_PALETTECHANG ED = 0x311,
WM_PALETTEISCHA NGING = 0x310,
WM_PARENTNOTIFY = 0x210,
WM_PASTE = 0x302,
WM_PENWINFIRST = 0x380,
WM_PENWINLAST = 0x38F,
WM_POWER = 0x48,
WM_PRINT = 0x317,
WM_PRINTCLIENT = 0x318,
WM_QUERYDRAGICO N = 0x37,
WM_QUERYENDSESS ION = 0x11,
WM_QUERYNEWPALE TTE = 0x30F,
WM_QUERYOPEN = 0x13,
WM_QUEUESYNC = 0x23,
WM_QUIT = 0x12,
WM_RBUTTONDBLCL K = 0x206,
WM_RBUTTONDOWN = 0x204,
WM_RBUTTONUP = 0x205,
WM_RENDERALLFOR MATS = 0x306,
WM_RENDERFORMAT = 0x305,
WM_SETCURSOR = 0x20,
WM_SETFONT = 0x30,
WM_SETHOTKEY = 0x32,
WM_SETICON = 0x80,
WM_SETREDRAW = 0xB,
WM_SETTEXT = 0xC,
WM_SETTINGCHANG E = 0x1A,
WM_SHOWWINDOW = 0x18,
WM_SIZE = 0x5,
WM_SIZECLIPBOAR D = 0x30B,
WM_SIZING = 0x214,
WM_SPOOLERSTATU S = 0x2A,
WM_STYLECHANGED = 0x7D,
WM_STYLECHANGIN G = 0x7C,
WM_SYNCPAINT = 0x88,
WM_SYSCHAR = 0x106,
WM_SYSCOLORCHAN GE = 0x15,
WM_SYSCOMMAND = 0x112,
WM_SYSDEADCHAR = 0x107,
WM_SYSKEYDOWN = 0x104,
WM_SYSKEYUP = 0x105,
WM_TCARD = 0x52,
WM_TIMECHANGE = 0x1E,
WM_TIMER = 0x113,
WM_UNDO = 0x304,
WM_UNINITMENUPO PUP = 0x125,
WM_USER = 0x400,
WM_USERCHANGED = 0x54,
WM_VKEYTOITEM = 0x2E,
WM_VSCROLL = 0x115,
WM_VSCROLLCLIPB OARD = 0x30A,
WM_WINDOWPOSCHA NGED = 0x47,
WM_WINDOWPOSCHA NGING = 0x46,
WM_WININICHANGE = 0x1A
}