gpt4 book ai didi

windows - 如何通过 Win32 API 函数激活 cmd.exe windows "Scroll mode"?

转载 作者:可可西里 更新时间:2023-11-01 10:03:52 27 4
gpt4 key购买 nike

在 cmd.exe 窗口中有一个名为“滚动模式”的状态。在 this site有关于如何激活它的描述;通过键盘:Alt-Space,然后是 Edit,然后是 scroLl;或通过鼠标:右键单击标题栏,然后选择编辑和滚动。

我的问题很简单:什么 Win-32 API 函数用于激活此状态?

我查看了 SetConsoleMode功能,但它不管理此模式(也不管理 console functions 的其余部分)。我在网上搜索“cmd.exe 滚动模式”,但多个结果中没有一个是指 this 模式...

最佳答案

经过一些挖掘和测试,“似乎”这种行为并未被任何公共(public) API 函数暴露。虽然有人找到了一种不明显的方法(或者更好的是一种明显的方法),但可以使用此解决方法

#define _WIN32_WINNT   0x0500
#include <windows.h>

#define SC_SCROLL 0xFFF3

int main(void) {
HWND hWnd;

// Search current console
if (!(
hWnd = GetConsoleWindow()
)) return 1;

// Set scroll mode
if (
SendMessage(
hWnd
, WM_SYSCOMMAND
, (WPARAM) SC_SCROLL
, (LPARAM) NULL
) != 0
) return 2;

// Done
return 0;
}

编辑以适应评论

要禁用滚动,我们只需要按EnterEscCtrl-C

#define _WIN32_WINNT   0x0500
#include <windows.h>

#define KEYEVENTF_KEYDOWN 0

int main(void) {
INPUT ip;

// Keyboard input structure initialize
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

// Control key down
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYDOWN;
SendInput( 1, &ip, sizeof(INPUT) );

// C key down
ip.ki.wVk = 'C';
ip.ki.dwFlags = KEYEVENTF_KEYDOWN;
SendInput( 1, &ip, sizeof(INPUT) );

// C key up
ip.ki.wVk = 'C';
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &ip, sizeof(INPUT) );

// Control key up
ip.ki.wVk = VK_CONTROL;
ip.ki.dwFlags = KEYEVENTF_KEYUP;
SendInput( 1, &ip, sizeof(INPUT) );

// Done
return 0;
}

这段代码发送了一个Ctrl+C,但是你不能指明按键的目标。为避免焦点丢失问题,最好将 Esc 直接发送到窗口

#define _WIN32_WINNT   0x0500
#include <windows.h>

int main(void) {
int KEY = VK_ESCAPE;
unsigned int lParamKeyDown = 0;
unsigned int lParamKeyUp = 0;

HWND hWnd;

// Search current console
if (!(
hWnd = GetConsoleWindow()
)) return 1;

// Configure lParam for key down event
lParamKeyDown |= 1;
lParamKeyDown |= 1 << 24;
lParamKeyDown |= MapVirtualKey(KEY, 0) << 16;

// Configure lParam for key up event
lParamKeyUp |= 1 << 30;
lParamKeyUp |= 1 << 31;
lParamKeyUp |= MapVirtualKey(KEY, 0) << 16;

// Send the key
SendMessage( hWnd, WM_KEYDOWN, KEY, lParamKeyDown );
SendMessage( hWnd, WM_KEYUP, KEY, lParamKeyUp );

// Done
return 0;
}

关于windows - 如何通过 Win32 API 函数激活 cmd.exe windows "Scroll mode"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com