Προς το περιεχόμενο

send combination keystrokes to external application


gv

Προτεινόμενες αναρτήσεις

Δημοσ.

pos stelnoume syndiasmo pliktron se alli efarmogi me to "postmessage" i to "sendmessage"? px (Alt + F4) i (Ctrl + C)

to parakato den douleuei ... 3erete giati ?

 

ps

den 9elo na xrisimopoiiso to "SENDKEYS" !!!

 

=====================================

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _

ByVal hwnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

LPARAM As Any) As Long

 

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" ( _

ByVal hwnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

LPARAM As Any) As Long

 

Const VK_ENTER As Long = &HD

Const WM_KEYDOWN As Long = &H290

Const WM_KEYUP As Long = &H291

Const VK_ALT = &H12

Const VK_F4 = &H73

Const VK_DOWN = &H28

Const VK_TAB = &H9

Const WM_CHAR = &H102

Const WM_CLOSE = &H10

Const WM_SETTEXT = &HC

 

Private Sub Workbook_Open()

....

sendmessage hwnd, WM_KEYDOWN, VK_ALT, 0

sendmessage hwnd, WM_KEYDOWN, VK_F4, 0

sendmessage hwnd, WM_KEYUP, VK_F4, 0

sendmessage hwnd, WM_KEYUP, VK_ALT, 0

....

End Sub

============================================

Δημοσ.

Εδώ http://www.insomnia.gr/vb3/showpost.php?p=1680570&postcount=7 είχα δημοσιεύσει κώδικα που πατούσε πλήκτρα με την βοήθεια της ρουτίνας keybd_event.

 

Αν θες να τα στέλνεις σε μια συγκεκριμένη εφαρμογή φρόντισε να την φέρεις στο προσκήνιο (foreground/activate) πρώτα.

 

Για να φέρουμε ένα παράθυρο στο προσκήνιο χρησιμοποιούμε την SetForegroundWindow -αν το παράθυρο είναι minimized φροντίζουμε να το κάνουμε restore με την OpenIcon.

 

Ακολουθεί κώδικας σε CodeGear Turbo C++ Explorer που δοκιμάζει να βρει το παράθυρο της εφαρμογής Calc.exe (Calculator στα Αγγλικά Windows) και ύστερα να το κλείσει με ALT+F4.

 

Visual BASIC δεν γνωρίζω, όμως μιας το ζήτημα άπτεται εξ' ολοκλήρου του Windows API νομίζω ότι ο παρακάτω κώδικας μπορεί να σε βοηθήσει:

 

>
/* Send ALT+F4 to "Calculator" window (English Windows) demo
* (C) by Directx.
*
* Tested: 	Under Windows XP SP2) 
* Compiler:CodeGear Turbo C++ Explorer.
*/

#include <stdio.h>
#include <windows.h>
#ifdef __BORLANDC__
#pragma hdrstop
#pragma argsused
#endif

int main(int argc, char* argv[])
{
/*
 * Locate "Calculator" Top Level Window (assumes English Windows)
 */
HWND hWnd = FindWindow(NULL,"Calculator");
if(hWnd==NULL)
	printf(" FindWindow failed!\n");
else
 {
	/*
	 * Attempt to activate window:
	 *
	 *	If window minimized (Icon) attempt to restore it (OpenIcon) then
	 *	set it to foreground to receive keyboard events.
	 */
	if(IsIconic(hWnd))
		OpenIcon(hWnd);
	if(SetForegroundWindow(hWnd))
	 {
		/*
		 * Send ALT+F4 keyboard event to window after 1'' and close
		 * our application after 2''.
		 */
		printf(" Window on foreground - wait for 1' ...");
		Sleep(1000);
			printf("\n ALT+F4 send to window\n");			
			keybd_event(VK_MENU,0,0,0);
			keybd_event(VK_F4,0,0,0);
			keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0);
			keybd_event(VK_F4,0,KEYEVENTF_KEYUP,0);
		Sleep(1000);			
	 }
	else
		printf(" SetForegroundWindow failed!\n");
 }		

printf(" Press any key to quit..");
getchar();

return 0;
}

 

Υ.Γ.

Οι SendMessage & PostMessage δεν αρκούν για Keyboard Events οπότε ξέχασε τις.

Δημοσ.

καλησπερα Φιλε

Με ενα προχειρο Ψαξιμο βρηκα κατι που ισως ενδιαφερει

http://www.pscode.com/vb/scripts/BrowseCategoryOrSearchResults.asp?optSort=Alphabetical&txtCriteria=sendkeys+&blnWorldDropDownUsed=TRUE&txtMaxNumberOfEntriesPerPage=10&blnResetAllVariables=TRUE&lngWId=1&B1=Quick+Search

Απο εκει και περα αν χρειαστεις κατι αλλο εδω ειμαστε

καλο απογευμα

Δημοσ.

Μπορείς να δεις τις τιμές των VK codes από εδώ http://api.farmanager.com/en/winapi/virtualkeycodes.html

 

Τώρα όσον αφορά τα VK_MENU και VK_F4 είναι πράγματι, 12 και 73 στο δεκαεξαδικό σύστημα (0x12 και 0x73 στην C).

 

Το KEYEVENTF_KEYUP είναι, από ότι βλέπω στο winuser.h, δηλωμένο ως 2 (0x0002).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...