簡體   English   中英

如何在C ++中將密鑰發送到最小化窗口

[英]How to send keys to a minimized window in C++

我剛開始學習C ++。 目前我堆疊在一個小東西,我找不到解決方案。 我希望有人可以幫我解決這個問題。

我的目標:我想向正在運行的應用程序發送幾次擊鍵。 但是當應用程序沒有焦點,即最小化或者什么時候,應該仍然將鍵擊發送到應用程序。

我的問題:當我使用函數sendkey()VK_KEY或者什么(不記得大聲笑)然后它工作但只有在窗口最大化(聚焦),但當我嘗試使用PostMessage(GameWindow, WM_KEYDOWN, 'G', 0); 什么都沒發生。

我在記事本上嘗試過,但也在我想讓它工作的應用程序上,但沒有。

我想我需要掛鈎進程然后發送密鑰,不幸的是我對C ++沒有任何問題(除非你完全沒有問題)但是我沒有經歷任何關於鈎子和那種東西的經歷。

任何人都可以向我發送正確的方向或給我一個關於如何做這樣的事情的小教程,例如使用其中一個Windows游戲?

if( amount != 0 )
{
    // bring the window to the front
    HWND GameWindow = FindWindow(0, L"Naamloos - Kladblok");
    SetForegroundWindow(GameWindow);

    // execute the loop
    for( int i = 0; i < amount; i++ ){
    // not the last loop so add a pause at the end
    if( i < (amount-1))
    {
        PostMessage(GameWindow, WM_KEYDOWN, 'G', 0);
        PostMessage(GameWindow, WM_KEYUP, 'G', 0);
        Sleep(2000);
    }
    // last loop so dont add a pause at the end
    else
    {
        PostMessage(GameWindow, WM_KEYDOWN, 'G', 0);
        PostMessage(GameWindow, WM_KEYUP, 'G', 0);
    }
    }
}

Win32應用程序對Windows消息的行為完全由其自行決定。 所以可能是你的目標窗口/應用程序正在接收消息而只是選擇忽略它們。 您可以使用Microsoft Spy ++(隨Visual Studio一起提供)來查看目標應用程序消息隊列並查看其收到的內容。

值得注意的是,Notepad(v5.1)選擇監聽WM_CHAR消息(而不是WM_KEYDOWN / WM_KEYUP),即使在最小化時也是如此(下面的示例代碼)。

#include "stdafx.h"
#include "Windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
    HWND hwndWindowTarget;
    HWND hwndWindowNotepad = FindWindow(NULL, L"Untitled - Notepad");
    if (hwndWindowNotepad)
    {
        // Find the target Edit window within Notepad.
        hwndWindowTarget = FindWindowEx(hwndWindowNotepad, NULL, L"Edit", NULL);
        if (hwndWindowTarget)
        {
            PostMessage(hwndWindowTarget, WM_CHAR, 'G', 0);
        }
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM