0

hi, i need to send keystrokes an application (including, "enter", "left arrow", "right arrow", etc).

but how do i do that? i do not see any short and useful examples to doing it.

all i have got at the current moment is to get the foreground window using

HWND foregroundWindow = GetForegroundWindow();

i see the PostMessage function takes in HWND, UINT, WPARAM and LPARAM... but i have no idea which is for what. can somebody pls explain and teach me how to send keystrokes to an arbitrary application?

thanks.

2
Contributors
9
Replies
10
Views
7 Years
Discussion Span
Last Post by VilePlecenta
0

the thing is, i dun understand whatever's said in the MSDN website. lol.

0

the thing is, i dun understand whatever's said in the MSDN website. lol.

If you do not understand how a window procedure works, then i would recommend start studying there since it is too extensive to explain here.

I will however give you a little insight.

Syntax

    WM_KEYDOWN // Window message sent to window procedure

        WPARAM wParam; // Word Parameter( DWORD )
        LPARAM lParam; // Long Parameter ( long )
        

Parameters

    wParam // holds the key number - see into Virtual keys for the list

    lParam
        Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.

        0-15
            Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
        16-23
            Specifies the scan code. The value depends on the OEM.
        24
            Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
        25-28
            Reserved; do not use.
        29
            Specifies the context code. The value is always 0 for a WM_KEYDOWN message.
        30
            Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is zero if the key is up.
        31
            Specifies the transition state. The value is always zero for a WM_KEYDOWN message.
0

from your program in the link, i wrote the following

HWND foregroundWindow = GetForegroundWindow();
	char testChar [2];
	testChar[0] = 'h'; testChar[1] = 'i';
	for(int i = 0; i < strlen(testChar); i++){
		SendMessage(foregroundWindow, WM_CHAR, testChar[i], NULL);
	}

but it doesnt work... why?

0

kk, w.e. app you're sending it to is receiving the characters, but most likely chooses not to accept them as input.

0

kk, w.e. app you're sending it to is receiving the characters, but most likely chooses not to accept them as input.

hmm... this is odd. because i had Notepad, and then CodeBlocks at the foreground when calling the function...

i had this send message function called when i press "Enter" (using the GetAsyncKeyState() function)

the program told me the function to send message ran (via cout).

Edited by TheGhost: n/a

0

Child Windows, The hwnd you are getting is not the topmost.
its practicly a window within a window ( which I used the ChildWindowFromPoint() )

Edited by VilePlecenta: n/a

0

AH! that did it.

many thanks. :D

EDIT:

ah, it worked for Notepad but...

it doesnt work for text fields inside the browser, CodeBlocks IDE and others... =\

Edited by TheGhost: n/a

0

AH! that did it.

many thanks. :D

EDIT:

ah, it worked for Notepad but...

it doesnt work for text fields inside the browser, CodeBlocks IDE and others... =\

Have you tried changing the point?
Also you could enumerate all the child windows.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.