SAP GUI scripting - Button press fails - vba

I am using a macro in an Excel file that runs the SAP GUI. There is a step where, when I click a button in SAP there will be another window that pops up.
For that I have written a code like this:
session.findbyid("wnd[0]/XX/btnXX").press
session.findbyid("wnd[1]/XX/btnXXX").press
There is a button (btnXXX) in the window (wnd[1]). But when I execute this query, I am getting an error object not found for findbyid.
When I keep the break point and execute it, it is throwing error on 2nd line in the above code. I try to pick the activewindow.name and it shows wnd[0] still. Here the issue is wnd[1] is not getting opened.
Does somebody know why the 2nd "button press" doesn't work?

You should be able to replace all mouse clicks with keyboard strokes.
Replace:
session.findbyid("wnd[0]/XX/btnXX").press
With:
session.findById("wnd[0]").sendVKey(N)
Where N is the linked hot-key ID.
To get the exact command, use SAP script recording and only use the keyboard to transition between views and windows. The easiest way to determine how is to hover your mouse over the buttons you would normally click to learn the hot-key then record the hot-key.
Note 1) So far I have found that btn[XX] always maps to sendVKey(XX), but I can't be certain this is always the case.
Note 2) sendVKey always appears to be referenced off the window (wnd[Y]) even if a button is another layer down (/tbar, /usr, etc.).

Related

How to hide the separate error log window in DBeaver?

A few weeks ago I detached the error log within the editor as a separate window; I was just seeing what was going to happen.
Now I can't put it back and I get two separate error log windows. One that is the original detached window and another that's still within the editor. I can't find any option to reattach it to the single Dbeaver window/editor in attempt to revert it to what it was before.
The yellow bar in the picture is the window I'm referring to. It's just a little annoying for a new window to be produced every time I get an error. I've tried to look for toggles in the preferences menu but haven't seen anything that stands out to be the problem. Nor can I just drag and drop back it into the editor.
Looks like after an update you can't merge it to any of the bottom windows , but can keep it as a tabbed window like this.

IntelliJ - Debug info window shortcut?

In IntelliJ, when a breakpoint suspends an a program.. If I hover over a variable with the mouse cursor and wait for a second or two, a tooltip appears, which lets me inspect the variable by clicking the + sign. For example in the below image, I kept my mouse cursor over three for a second or two and the tooltip saying Main$Die#452 appeared.
Is there a way to show this tooltip only by using the keyboard and the current cursor location? In other words, in the screenshot above, how would I see the tooltip for the variable one (where my keyboard cursor is) without moving the mouse cursor over the variable one? (And how would I expand it once I see the tooltip?)
While debugging code, I realized I end up inspecting objects like this very often and moving around the mouse and waiting for the tooltip to appear starts to slow down the process a little.
The action is called "Quick evaluate expression":
You can invoke it via alt+⌘+F8 on macOS, or ctrl+alt+F8 on Windows

Sikuli click is not effect

I'm using SikulixIDE 1.1.0 to write a script playing Yugioh game (run on Windows 10 x64).
See the main screen:
I start the game manually and then run the script as below:
switchApp("Yu-Gi-Oh! PC")
click("1477213591920.png")
My expectation is that the link named "DUEL MODE" is clicked to go to the next screen. The cursor always moves to that link, but sometimes it works, sometimes does not.
I check the log and see that Sikuli has sent click command but for some reason, the game not accept it. This is the log:
[log] App.focus: [8020:Yu-Gi-Oh!]
[log] CLICK on L(687,488)#S(0)[0,0 1366x768]
I've already tried:
doubleClick instead of click
sleep a few seconds
hover and click
But all do not work, neither.
I would expect that some of the things you have tried will help but if that's not the case you will need to identify whether the button was actually triggered or not. To do that you have to capture the next screen or any part of it that uniquely identifies it. Then you will use it a loop with a predefined number of attempts and some wait time between them and click more than once if the click didn't work. So generally something like that (pseudo code):
attempts = 3
for attempt in attempts:
click(button)
if (nextScreen is available):
break
sleep(time)
I know it's been a while but I ran into a similar problem recently.
The image was found but the click didn't work.
I'm also working on Windows 10 x86_64.
The solution was simply to execute the program as administrator.
Don't know why but now it's working..
I also had to use the double click instead of simple click for some patterns.
In adition to Eugene S Answers, if you are using SikuliX, you can try to Run in Slow Motion. Also, if the image have some effects (like brightness), you can try to use Pattern inside of exists():
if exists(Pattern("DualMode.png").similar(0.6), time_in_seconds):
click(Pattern("DualMode.png").similar(0.6))
By default, the similar() value is 0.8, so if the image have some effect and for example, the color change every second, you can set a lower value between 0 and 1.
PS: Don't forget to put the pattern inside if exists and click, because if you don't put inside of click(), could throw an Image not found error message.

Autoit script not working

I have an AutoIt script that works.
I need to update the script to open an application and to press some buttons in some windows.
The only thing that works is running the application: RunWait(exe file).
When the application is running I need to click an OK button on the window that pops up and then click another button on the next windows but all of that is not working.
RunWait(exe file)
WinWaitActive("win title","",10)
ControlCommand("win title","",1,"check","")
This is the part that is not working.
First of,
Dot use RunWait() , instead use Run().
RunWait will wait until the application is closed.
Use AutoItWindowInfo tool in order to find the info on the control you want to manipulate.
Example:
ControlClick("[CLASS:Notepad]", "", "[CLASS:Edit; INSTANCE:1]")
Also use
Opt("WinSearchChildren", 1) ;0=no, 1=search children also
This will make sure your script can see the child windows.

Copy text to an external program, click somewhere on the screen, then save a screenshot

I picked vb.net for this question since it's the only prgramming language I am fairly familair with, but if C++ or something else is more suited for this, I am willing to learn something new.
What I am trying to do is:
Retrieve text from database (this already works in vb.net) and copy it to clipboard
Switch primary screen to the external application I want to work with (example: word or open office)
Emulate key-press Enter
Paste text and hit Enter again
Emulate key-press Ctrl and then emulate a click on a pre-defined spot on the screen (like 500pixels from left, 740pixels from top).
Save screenshot, using a second value from the database as the filename (the naming part should be easy)
Emulate another click on another pre-defined spot
Repeat for next text in database.
I wouldn't know where to start, though. I guess the most important part of what I'm trying to achieve is; switching focus to an external application and emulate keypresses and mouse clicks on it.
use http://www.autohotkey.com/
write a console app to get the value from the database
1 - get autohotkey to run the console app and put the return into the clipboard
then continue as described in your list.