How to do click on specific screen text? - c#

Do you know how to do click on a specific screen text?
I need to do click on a text inside a GUI Object from a external application; I need to automate this with C#. What is the reference that I need to this? I'm new in C#

You need to learn two tricks to accomplish this:
How to find the HWND (the handle) to the window that you want to send the click event to. There are some APIs in the Forms namespace to help with this or you can use PInvoke.
How to send the appropriate windows messages (WM_MOUSEDOWN, WM_MOUSEUP) using SendMessage.
Put these two together and you should be able to simulate a click event.

Related

How to handle an external HID button click in C#

I'm trying to integrate a third party hardware to one of my existing projects . Basically the hardware has two buttons with different color leds on each button.
I am able to open and close each led with the library/manual which is provided by the manufacturer without any problem. My problem is I can not handle its buttons click events from any kind of software C/C#/VB etc...
I mean when I press one of its buttons it acts like any input device and effects the cursors current position like a keyboard key or mouse click due the opened program(For example if Ms Word is opened currently it acts like space key?). The DLL or manual has no special function for this purpose (like a mouse click event?).
So what I'm asking is there any general way to handle any external device button click inside a C# program? How the currently running software suppose to understand a button is clicked and enter the desired method in the code?
Any clue or tip would be highly appreciated.
Thanks...

Getting the button text of WPF application from another application

Is it possible to get the text of a button , that has been clicked in a WPF application from another c# application.... Tried SendMessage with the button handle , but it does not seem to work
UI Automation will do what you want. WPF controls don't have HWNDs, so SendMessage won't work.
You dont provide much info but I will try to provide some possible solutions.
I assume by SendMessage you mean this:
SendMessage
You basically want that a c# application be able to get internal state information from a wpf application.
Or, in other words, 2 c# apps need to communicate data. Well, try this:
InterProcess Communication
Otherwise try reflection. Reflect the wpf app into your c# app and try to get the button text value, if that value is known at compile time. But I wouldnt use reflection for just sharing a text value.

How to list all the elements of an application?

I'm trying to click a button on a windows application from other application. Basically, I want to click app B's button from app A's code.
I can use winapi findWindow to get a handler. The problem is that I have no idea the name of the button on the app B. Is this possible to list all the names or ids of an application?
I'm using c# to make it happen.
Since you're looking at suggestions (it's a pretty generic question really, it might or might not work depending on what other app/window is, is it e.g. browser or a 3rd party app etc., does it support automation)
Take a look at this closely related answer (it might be a duplicate but you're kind of 'looking for' still so maybe note).
Accessing Elements from Other Processes
Also this one on how to 'access' other app's 'inputs'
Pinvoke SetFocus to a particular control
I have not tested this. But it looks like a intressting libary. Maybe there is some function you can use. It is called White. This is just a sample:
Application application = Application.Launch("foo.exe");
Window window = application.GetWindow("bar", InitializeOption.NoCache);
Button button = window.Get<Button>("save");
button.Click();
You can use tool such as Spy++ (included in any Visual Studio except Express editions) to find name and class of that button and then use these information as parameters of FindWindow().

how to get the control of the UI Element Clicked in a external application

How can i get the control (and possibly its text value) of a control which was clicked in another third party application (its not a .net or wpf application for which there are answers which did not solve my problem)
I can get the click event in my app (using the global hooks as mentioned here) i want the control/handle of that particular UI Element
Example : I have opened Notepad and when i click on File Menu, i want the control of that File button.
Look at the documentation for SetWindowsHookEx using the WH_CALLWNDPROC param. This will let you intercept messages in Notepad window procedure. You'll need to figure out which messages get generated from clicking the menu items in Notepad, you can use Spy++ for that. But there is no real control for the File button, it is part of a menu.

Opening an application inside a form - C# or VB.NET

I am writing an application and I would like to be able to display another application inside it. (Think like a windows form with a small box, or a tab that is displaying a totally seperate application.)
Is that something that can be done? If so, can anyone give some direction on how to go about doing it?
I am looking for something in the C# or VB.NET world.
THANKS!
You need a hWnd (handle) of window from another application.
Then you need a hWnd of container control in you application (System.Windows.Forms.Control.Handle property).
Then you need use a Win32API function SetParent, and that all you need.
On the SetParent page is little sample, which should do what you need.

Categories