Findwindow and SendMessage

前端 未结 3 1802
北海茫月
北海茫月 2021-01-25 08:48

I am trying to figure out why this is not sending a ALT+F to notepad,

Private Declare Function FindWindow1 Lib \"user32\" Alias \"FindWindowA\" (ByVal lpClassNam         


        
相关标签:
3条回答
  • 2021-01-25 09:25

    You can try to send/post these messages all you want. Unfortunately they don't effect the return value of GetAsyncKeyState - which is what the system uses, while processing the VK_F message - to see if the alt is down.

    As a result you can't fake keystrokes with modifiers to other applications using this mechanism.

    To get around this, you need to use SendInput - but this requires that the application to receive the keystrokes is the foreground/focus window.

    0 讨论(0)
  • 2021-01-25 09:36

    I think this is the problem: you're sending your message to the frame around the notepad window, and need to send it to the menu window. Use your handle with FindWindowEx and the 32768 class name (that's a menu) to get the menu window, which is a child of the one you've got the handle to. Here are two pages: http://msdn.microsoft.com/en-us/library/ms633500(v=VS.85).aspx and http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx#class_name that should help.

    0 讨论(0)
  • 2021-01-25 09:47

    Use Postmessage instead of Sendmessage

    Public Const WM_SYSKEYDOWN = &H104
    
    PostMessage hwnd, WM_SYSKEYDOWN, vbKeyF, 2 ^ 29 
    
    'Simulates Alt + F (2^29 sets the 29 bit of lParam indicating Alt is being pressed.
    
    0 讨论(0)
提交回复
热议问题