相关疑难解决方法(0)

DirectX应用程序中Alt-Tab支持的最佳实践?

在编写DirectX应用程序时,显然需要支持用户暂停应用程序Alt- Tab以一种快速且无错误的方式.确保这一点的最佳做法是什么?需要解决的问题包括:

  1. 检测应用程序何时被退出选项以及何时返回的最佳方法.
  2. 用户alt-tabs时会丢失哪些DirectX资源,以及应对此问题的最佳方法.
  3. 应用程序体系结构中要执行的主要操作和要避免的事项,以支持alt-tab.
  4. 主要DirectX版本之间的任何显着差异,因为它们适用于上述.

有趣的技巧和陷阱也很好听.

windows directx alt-tab task-switching

38
推荐指数
1
解决办法
1万
查看次数

Alt Tab覆盖Win32标识符

我将来自外部传感器(例如键盘)的事件映射到键盘快捷键,我想使用快速切换覆盖窗口(即Alt- Tab菜单")切换应用程序,但我想继续显示切换菜单直到应用程序被选中.

基本上,我在做什么是这样的:

if(notInSwitchMenu) 
{   // Alt-Tab keystroke, but Alt remains pressed : the menu is still visible
    Press(VK_MENU); 
    Press(VK_TAB); 
    Release(VK_TAB);
}
else
{

    if(event1) //Tab keystroke : next app
    {
        Press(VK_TAB);
        Release(VK_TAB) ;
    } 
    else if(event2) //Shift-Tab keystroke  : previous app
    { 
        Press(VK_SHIFT); 
        Press(VK_TAB);
        Release(VK_TAB);
        Release(VK_SHIFT) 
    }
    else if(event3) // we get out of the menu : the selected app has the focus.
    {
        Release(VK_MENU);
    } 
}
Run Code Online (Sandbox Code Playgroud)

Press和Release只需使用正确的属性调用SendInput.

我的问题是我不知道一个可靠的方法来确定用户当前是否在Alt- Tab程序列表中.有谁知道如何使用Win32 API识别Alt-Tab覆盖菜单?

c++ windows winapi alt-tab

6
推荐指数
1
解决办法
1332
查看次数

SetWinEventHook 没有捕获任何事件

这是这个问题的后续:Alt Tab Overlay Win32 identificator

我尝试使用 Winuser API 中的 SetWinEventHook 函数捕捉 alt-tab 切换菜单打开(和退出)的时刻。但是,该钩子不会捕获任何事件(例如最小化窗口),因此不会调用 HandleWinEvent

下面的代码很大程度上受到MSDN页面上提供的代码的启发

#ifndef _WIN32_WINNT
    #define _WIN32_WINNT 0x0500
#endif

#ifndef WINVER
    #define WINVER 0x0501
#endif

#include "conio.h"
#include <windows.h>
#include <iostream>


// Global variable.
HWINEVENTHOOK g_hook;

// Prototype
void HandleWinEvent(HWINEVENTHOOK , DWORD , HWND ,
                         LONG , LONG ,
                         DWORD , DWORD );

// Initializes COM and sets up the event hook.
//
void InitializeMSAA()
{
    CoInitialize(NULL);
    g_hook = SetWinEventHook(
        EVENT_MIN ,EVENT_MAX,  // …
Run Code Online (Sandbox Code Playgroud)

c++ winapi event-handling event-hooking

4
推荐指数
1
解决办法
4636
查看次数

系统事件 EVENT_SYSTEM_SWITCHSTART 和 EVENT_SYSTEM_SWITCHEND 在 Windows 7 中有效,但在 Windows 10 中无效

添加信息:
当我在 Windows 7 中使用 .exe 文件时,一切都会正常工作。它在 Windows 10 中不起作用。我不明白为什么。

原帖:
也许我只是需要更多咖啡......但我正在尝试编写一个小程序来监听 Alt+Tab 事件。因此,我添加了SetWinEventHook来监听EVENT_SYSTEM_SWITCHSTARTEVENT_SYSTEM_SWITCHEND。因为这就是我认为根据 MSDN 执行此操作的方法:SetWinEventHookWinEventProc 回调Event 常量

由于某种原因,这些事件似乎从未发生过。但更可能的是我错过了一些东西。

当我没有让它在我的实际应用程序中工作时,我创建了这个小应用程序来测试它。它也在那里不起作用。但其他事件确实有效。EVENT_SYSTEM_FOREGROUNDEVENT_OBJECT_CREATEEVENT_OBJECT_DESTROY一直在发生。

我的小型测试应用程序的代码:

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

namespace
{
    HWINEVENTHOOK sTabHook;
    HWINEVENTHOOK sFocusHook;
    HWINEVENTHOOK sCreateHook;
}

void CALLBACK tabEventProc(HWINEVENTHOOK hook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime)
{
    printf("Never happens!");
    if (EVENT_SYSTEM_SWITCHSTART == event)
    {
        printf("Tab start\n");
    } …
Run Code Online (Sandbox Code Playgroud)

c++ events alt-tab windows-10 visual-studio-2017

4
推荐指数
1
解决办法
901
查看次数