So this week I've been play with System.Diagnositics and System.Reflection... fun stuff... lot's of potential but I'm having some problems doing what I want to do. Using System.Diagnostics.Process I can open, run, and close another program; but otherwise pretty useless - can really do anything with the program once it's open other than check to see if it's still open and/or close it. Using System.Reflection I can get all the member, methods, properties, values (well the values is being a pain but anyway) and expose the functionality of another program and by using InvokeMember can even get the start up form to display, but doesn't do anything unless I constantly invoke the Refresh member but it's more like I'm painting rather that starting a process as I do with StartProcess even though I'm using the CreateInstance binding flag. Anyway the whole point is I'm trying to control another program with my program without using such primative methods as SendKey's which you're really doing things blindly; whereas if I could determine the value of lables and buttons I'd know what screen I am on and be able to invoke methods and members correctly rather than hoping that the user hasn't closed the other program and that I'm on the right screen and that I've tabbed the right number of times...etc.... follow what I'm trying to do? There's a lot of theory behind the Reflection and Process classes and the documentation is lengthy but not the best... so advise, hints, tricks, etc would be helpful.