能否调用API启动预填搜索文本的Windows 11内置搜索?
Windows 11 唤起内置搜索并预填内容的实现方案
Windows 11确实支持通过两种可靠方式实现你的需求,无需复杂的系统级API调用,就能达到和官方开始菜单一致的搜索触发效果:
1. 使用ms-search URI方案(推荐)
这是最简单直接的方法,Windows原生支持通过ms-search协议唤起内置搜索界面,并自动预填指定的查询内容。该方案兼容Win32、.NET(WPF/WinForms)等多种程序框架,且完全遵循系统搜索设置(包括你偏好的禁用网页搜索配置)。
示例代码
C++(Win32)
#include <windows.h> #include <shellapi.h> #include <swprintf.h> void TriggerWindowsSearch(const wchar_t* searchText) { wchar_t uriBuffer[1024]; wchar_t escapedQuery[1024]; // 转义特殊字符避免URI解析错误 if (!UrlEscape(searchText, escapedQuery, ARRAYSIZE(escapedQuery), URL_ESCAPE_UNSAFE)) { lstrcpyW(escapedQuery, searchText); } swprintf_s(uriBuffer, L"ms-search:query=%s", escapedQuery); ShellExecuteW(NULL, L"open", uriBuffer, NULL, NULL, SW_SHOWNORMAL); }
C#(.NET)
using System.Diagnostics; using System; public static void LaunchWindowsSearch(string searchQuery) { string encodedQuery = Uri.EscapeDataString(searchQuery); Process.Start(new ProcessStartInfo { FileName = $"ms-search:query={encodedQuery}", UseShellExecute = true }); }
调用时只需传入用户输入或粘贴的字符串,即可直接唤起内置搜索并预填内容。
2. 模拟系统搜索快捷键(备选方案)
如果需要更贴近“按下Win+S后输入内容”的原生体验,可以先发送Win+S快捷键唤起搜索框,再通过API模拟输入文本:
C++示例代码
#include <windows.h> void SendKey(WORD keyCode, bool isExtended = false) { INPUT input = {0}; input.type = INPUT_KEYBOARD; input.ki.wVk = keyCode; input.ki.dwFlags = isExtended ? KEYEVENTF_EXTENDEDKEY : 0; SendInput(1, &input, sizeof(INPUT)); input.ki.dwFlags |= KEYEVENTF_KEYUP; SendInput(1, &input, sizeof(INPUT)); } void TypeText(const wchar_t* text) { for (size_t i = 0; text[i] != L'\0'; ++i) { INPUT input = {0}; input.type = INPUT_KEYBOARD; input.ki.wScan = text[i]; input.ki.dwFlags = KEYEVENTF_UNICODE; SendInput(1, &input, sizeof(INPUT)); input.ki.dwFlags |= KEYEVENTF_KEYUP; SendInput(1, &input, sizeof(INPUT)); } } void TriggerSearchWithText(const wchar_t* searchText) { // 发送Win+S唤起搜索框 SendKey(VK_LWIN); SendKey('S'); SendKey(VK_LWIN, true); // 等待搜索框加载(可按需调整延迟) Sleep(100); // 输入预填文本 TypeText(searchText); }
该方案完全模拟手动操作,但需处理窗口加载延迟,兼容性略逊于URI方案。
内容的提问来源于stack exchange,提问作者Jacob Stamm
相关产品推荐
相关产品推荐

