我如何知道一个当前运行的程序在操作系统中通过 rust ?[已关闭]

mnemlml8  于 2023-01-26  发布在  其他
关注(0)|答案(1)|浏览(234)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

2天前关闭。
Improve this question
我创建了一个小脚本来将一些文本保存到剪贴板。我想在Photoshop中使用它,但每次尝试时,我都必须手动单击Photoshop窗口并按“ctrl+v”来粘贴它。我认为可以自动执行,但我不确定如何执行。我需要找出两条信息:操作系统中当前运行的程序列表(特别是在Windows上),以及如何聚焦(或单击)程序窗口。你能帮我吗?

g9icjywg

g9icjywg1#

您可以使用“winapi”crate来检索有关Windows上正在运行的程序的信息。此crate提供对Windows API的访问,例如,允许您检索打开的窗口列表。下面是如何获取打开的窗口标题列表的示例:

extern crate winapi;
use winapi::um::winuser::*;
use std::ffi::OsString;
use std::os::windows::ffi::OsStringExt;

fn main() {
    let mut window_list: Vec<String> = Vec::new();
    let mut window_handle = GetWindow(GetDesktopWindow(), GW_CHILD);
    while window_handle != 0 {
        let mut window_title = vec![0; GetWindowTextLengthW(window_handle) as usize + 1];
        GetWindowTextW(window_handle, window_title.as_mut_ptr(), window_title.len() as i32);
        let window_title = OsString::from_wide(&window_title).to_string_lossy().into_owned();
        window_list.push(window_title);
        window_handle = GetWindow(window_handle, GW_HWNDNEXT);
    }
    println!("Open windows: {:?}", window_list);
}

要关注程序窗口,您可以使用winapi中的“SetForegroundWindow”函数。该函数将您要选择的窗口的句柄作为参数。例如,您可以使用窗口标题来获取与“FindWindowW”函数对应的句柄。以下是一个示例:

extern crate winapi;
use winapi::um::winuser::*;
use std::ffi::OsString;
use std::os::windows::ffi::OsStringExt;

fn main() {
    let window_title = OsString::from("My Photoshop Window");
    let window_handle = unsafe { FindWindowW(std::ptr::null(), window_title.as_ptr()) };
    if window_handle != 0 {
        unsafe { SetForegroundWindow(window_handle) };
    }
}

相关问题