gv Δημοσ. 11 Αυγούστου 2007 Δημοσ. 11 Αυγούστου 2007 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 ============================================
Directx Δημοσ. 11 Αυγούστου 2007 Δημοσ. 11 Αυγούστου 2007 Εδώ 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 οπότε ξέχασε τις.
ntaryl Δημοσ. 11 Αυγούστου 2007 Δημοσ. 11 Αυγούστου 2007 καλησπερα Φιλε Με ενα προχειρο Ψαξιμο βρηκα κατι που ισως ενδιαφερει http://www.pscode.com/vb/scripts/BrowseCategoryOrSearchResults.asp?optSort=Alphabetical&txtCriteria=sendkeys+&blnWorldDropDownUsed=TRUE&txtMaxNumberOfEntriesPerPage=10&blnResetAllVariables=TRUE&lngWId=1&B1=Quick+Search Απο εκει και περα αν χρειαστεις κατι αλλο εδω ειμαστε καλο απογευμα
gv Δημοσ. 11 Αυγούστου 2007 Μέλος Δημοσ. 11 Αυγούστου 2007 @Directx sta VK_MENU VK_F4 KEYEVENTF_KEYUP ti times dineis ? VK_MENU = &H12 VK_F4 = &H73 KEYEVENTF_KEYUP = &H291 ????
Directx Δημοσ. 11 Αυγούστου 2007 Δημοσ. 11 Αυγούστου 2007 Μπορείς να δεις τις τιμές των 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).
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.