StrokesPlus.net Forum
»
General Discussion
»
Scripts
»
How to send RIGHT Control key Down and Up?
Rank: Newbie
Groups: Approved
Joined: 4/12/2022(UTC) Posts: 7
|
How to send RIGHT Control key Down and Up using the script? Tried sp.SendKeyDown(163) but that doesn't work.
|
|
|
|
Rank: Administration
Groups: Translators, Members, Administrators Joined: 1/11/2018(UTC) Posts: 1,382 Location: Tampa, FL Thanks: 28 times Was thanked: 430 time(s) in 363 post(s)
|
Have you tried this? Code:StrokesPlus.Input.Keyboard.Keys.Press(vk.RCONTROL);
sp.Sleep(50);
StrokesPlus.Input.Keyboard.Keys.Release(vk.RCONTROL);
|
|
|
|
Rank: Newbie
Groups: Approved
Joined: 4/12/2022(UTC) Posts: 7
|
Originally Posted by: Rob Have you tried this? Code:StrokesPlus.Input.Keyboard.Keys.Press(vk.RCONTROL);
sp.Sleep(50);
StrokesPlus.Input.Keyboard.Keys.Release(vk.RCONTROL);
That doesn't seem to work too.
|
|
|
|
Rank: Administration
Groups: Translators, Members, Administrators Joined: 1/11/2018(UTC) Posts: 1,382 Location: Tampa, FL Thanks: 28 times Was thanked: 430 time(s) in 363 post(s)
|
What keyboard language/layout are you using?
What is it you're trying to accomplish, and is what program?
|
|
|
|
Rank: Newbie
Groups: Approved
Joined: 4/12/2022(UTC) Posts: 7
|
Originally Posted by: Rob What keyboard language/layout are you using?
What is it you're trying to accomplish, and is what program? I use one of your scripts from this forum. This is a gesture to open a link in browser in a New Tab if mouse is over the link (cursor = hand), or open a new blank tab if it itsn't. Here is the code:
Code:action.Window.Activate();
sp.ConsumePhysicalInput(true);
var oppened = false;
var clicked = false;
var i = action.Start.Y; //action.Start is a Point, with .X and .Y properties
var i_end = i + 6;
while(i < i_end) {
sp.MouseMove(new Point(action.Start.X, i));
sp.Sleep(20);
if(sp.GetCurrentMouseCursor() == "Hand") {
oppened = true;
if(!clicked) {
StrokesPlus.Input.Keyboard.Keys.Press(vk.RCONTROL);
sp.Sleep(70);
sp.MouseClick(new Point(action.Start.X, i), MouseButtons.Middle, true, true);
sp.Sleep(70);
StrokesPlus.Input.Keyboard.Keys.Release(vk.RCONTROL);
}
} else {
}
i = i + 2;
}
if (!oppened) {
sp.SendModifiedVKeys([vk.LCONTROL], [vk.VK_T]);
}
sp.ConsumePhysicalInput(false);
sp.MouseMove(action.End); //action.End is also a Point
The reason I need to press the right Control key is that I have another CPP program running that catches mouse (LowLevelMouseProc). It scrolls the text (SendMessage (WM_MOUSEWHEEL)) on mouse move while middle mouse button is pressed. It uses the right Control as a modification key to disable the scrolling functionality: if (!(GetAsyncKeyState(VK_RCONTROL) & 0x8000)) {...} So, when I press the right Control on my keyboard (Eng layout) this program doesn't scroll anything and middle mouse button is just a middle button. However, when I run the StrokesPlus gesture script listed above it moves the mouse cursor while the middle key is pressed (~50ms) and the web page content is scrolled like RControl isn't pressed at all. I guess, the problem could be on both sides, so will try find the reason and the solution. But that would be great if you share any ideas you might have here. Edited by user Monday, February 12, 2024 11:19:24 AM(UTC)
| Reason: Not specified
|
|
|
|
Rank: Administration
Groups: Translators, Members, Administrators Joined: 1/11/2018(UTC) Posts: 1,382 Location: Tampa, FL Thanks: 28 times Was thanked: 430 time(s) in 363 post(s)
|
Ah, I see.
Do you have the source for this CPP program?
If so, it would probably be easiest to just have S+ post a message to it - since you're consuming input and dealing with key/mouse events in both, there's a good chance of odd behavior/conflicts.
But if you can have the CPP app accept message from S+ to toggle on/off, that would be the simplest and airtight method.
|
|
|
|
Rank: Newbie
Groups: Approved
Joined: 4/12/2022(UTC) Posts: 7
|
Originally Posted by: Rob Ah, I see. Do you have the source for this CPP program? If so, it would probably be easiest to just have S+ post a message to it - since you're consuming input and dealing with key/mouse events in both, there's a good chance of odd behavior/conflicts. But if you can have the CPP app accept message from S+ to toggle on/off, that would be the simplest and airtight method.
Yes, I have the source code, it's a tiny 6kb C code app. I've been using it with the S+Net (and with the previous version of S+ too) with no problem for mouse handling. The problem is that it doesn't catch keyboard input from the StrokesPlus.Input.Keyboard.Keys.Press(vk.RCONTROL) function. However, sp.SendControlDown() works fine and that seems to be the easiest point to stay on for this moment (loosing a bit of functionality of the left ctrl, but whatever). Anyway, it is not clear from your answer how to post a message from S+ to an external app. Do you mean sp.SendMessage(hwndTarget, messageID, wParam, lParam)? How do I get the hwnd of my process if it doesn't have any window initialized? Haven't found any documentation or examples on that for S+net.
|
|
|
|
Rank: Administration
Groups: Translators, Members, Administrators Joined: 1/11/2018(UTC) Posts: 1,382 Location: Tampa, FL Thanks: 28 times Was thanked: 430 time(s) in 363 post(s)
|
Are you calling RegisterClassEx in your app?
|
|
|
|
Rank: Newbie
Groups: Approved
Joined: 4/12/2022(UTC) Posts: 7
|
Originally Posted by: Rob Are you calling RegisterClassEx in your app? Ah, you are right. I create a message-only window to get external messages. Here is how I do it: Code:
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = GetModuleHandle(NULL);
wc.lpszClassName = L"MyMessageOnlyWindowClass";
RegisterClass(&wc);
// Create the message-only window
HWND hwnd = CreateWindowEx(
0,
L"MyMessageOnlyWindowClass",
NULL,
0,
0, 0, 0, 0,
HWND_MESSAGE,
NULL,
GetModuleHandle(NULL),
NULL
);
Should I use "MyMessageOnlyWindowClass" as the window title using sp.FindWindow()? Can you please provide a simple example of how to send the flag?
|
|
|
|
Rank: Administration
Groups: Translators, Members, Administrators Joined: 1/11/2018(UTC) Posts: 1,382 Location: Tampa, FL Thanks: 28 times Was thanked: 430 time(s) in 363 post(s)
|
Something kind of like below - I haven't tested any of it, but it should get you started anyway. CPP App:Code:// WM_USER == 1024, defined by existing windows includes
// and defines the starting point for custom message IDs
// WM_COMMAND == 273, defined by existing windows includes
#define WM_MYAPPCONTROL (WM_USER + 1)
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
// ......
case WM_COMMAND:
switch(LOWORD(wParam)) {
case WM_MYAPPCONTROL:
if((int)LOWORD(lParam) == 0)
{
//DisableHook();
} else {
//EnableHook();
}
break;
}
}
}
StrokesPlus:Code:const WM_COMMAND = 273;
const WM_MYAPPCONTROL = 1025;
var cApp = sp.WindowFromClassOrTitle("MyMessageOnlyWindowClass", "");
//Disable
cApp.PostMessageObj(WM_COMMAND, WM_MYAPPCONTROL, "0");
//Enable
cApp.PostMessageObj(WM_COMMAND, WM_MYAPPCONTROL, "1");
|
|
|
|
StrokesPlus.net Forum
»
General Discussion
»
Scripts
»
How to send RIGHT Control key Down and Up?
Forum Jump
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.
Important Information:
The StrokesPlus.net Forum uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close