pub struct SelectedItem { /* private fields */ }Expand description
A menu item that was selected by the user via
ContextMenu::show or
ContextMenu::show_at.
Call execute to run the associated shell command,
or inspect menu_item to decide first.
The SelectedItem keeps the hidden helper window alive until it is dropped
or consumed by execute, ensuring the owner HWND
remains valid for commands that display UI (e.g., Properties dialog).
Implementations§
Source§impl SelectedItem
impl SelectedItem
Get the menu item metadata (label, verb, flags, etc.).
Examples found in repository?
3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let path = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows\notepad.exe".to_string());
9
10 println!("Showing context menu for: {}", path);
11
12 let items = ShellItems::from_path(&path)?;
13 let menu = ContextMenu::new(items)?;
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}More examples
3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let folder = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows".to_string());
9
10 println!("Showing background context menu for folder: {}", folder);
11
12 let items = ShellItems::folder_background(&folder)?;
13 let menu = ContextMenu::new(items)?;
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let path = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows\notepad.exe".to_string());
9
10 println!("Showing extended context menu (Shift+right-click) for: {}", path);
11
12 let items = ShellItems::from_path(&path)?;
13 let menu = ContextMenu::new(items)?.extended(true);
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let args: Vec<String> = std::env::args().skip(1).collect();
7 let paths: Vec<String> = if args.is_empty() {
8 vec![
9 r"C:\Windows\notepad.exe".to_string(),
10 r"C:\Windows\regedit.exe".to_string(),
11 ]
12 } else {
13 args
14 };
15
16 println!("Showing context menu for {} items:", paths.len());
17 for p in &paths {
18 println!(" - {}", p);
19 }
20
21 let items = ShellItems::from_paths(&paths)?;
22 let menu = ContextMenu::new(items)?;
23
24 match menu.show()? {
25 Some(selected) => {
26 println!(
27 "Selected: {} (verb: {:?})",
28 selected.menu_item().label,
29 selected.menu_item().command_string
30 );
31 selected.execute()?;
32 }
33 None => println!("No item selected."),
34 }
35
36 Ok(())
37}Sourcepub fn command_id(&self) -> u32
pub fn command_id(&self) -> u32
Get the raw command ID that was returned by TrackPopupMenu.
Sourcepub fn execute(self) -> Result<()>
pub fn execute(self) -> Result<()>
Execute the selected command with default parameters.
This is equivalent to the user clicking the menu item in Explorer.
Consumes self because a command can only be invoked once.
Examples found in repository?
3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let path = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows\notepad.exe".to_string());
9
10 println!("Showing context menu for: {}", path);
11
12 let items = ShellItems::from_path(&path)?;
13 let menu = ContextMenu::new(items)?;
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}More examples
3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let folder = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows".to_string());
9
10 println!("Showing background context menu for folder: {}", folder);
11
12 let items = ShellItems::folder_background(&folder)?;
13 let menu = ContextMenu::new(items)?;
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let path = std::env::args()
7 .nth(1)
8 .unwrap_or_else(|| r"C:\Windows\notepad.exe".to_string());
9
10 println!("Showing extended context menu (Shift+right-click) for: {}", path);
11
12 let items = ShellItems::from_path(&path)?;
13 let menu = ContextMenu::new(items)?.extended(true);
14
15 match menu.show()? {
16 Some(selected) => {
17 println!(
18 "Selected: {} (verb: {:?})",
19 selected.menu_item().label,
20 selected.menu_item().command_string
21 );
22 selected.execute()?;
23 }
24 None => println!("No item selected."),
25 }
26
27 Ok(())
28}3fn main() -> win_context_menu::Result<()> {
4 let _com = init_com()?;
5
6 let args: Vec<String> = std::env::args().skip(1).collect();
7 let paths: Vec<String> = if args.is_empty() {
8 vec![
9 r"C:\Windows\notepad.exe".to_string(),
10 r"C:\Windows\regedit.exe".to_string(),
11 ]
12 } else {
13 args
14 };
15
16 println!("Showing context menu for {} items:", paths.len());
17 for p in &paths {
18 println!(" - {}", p);
19 }
20
21 let items = ShellItems::from_paths(&paths)?;
22 let menu = ContextMenu::new(items)?;
23
24 match menu.show()? {
25 Some(selected) => {
26 println!(
27 "Selected: {} (verb: {:?})",
28 selected.menu_item().label,
29 selected.menu_item().command_string
30 );
31 selected.execute()?;
32 }
33 None => println!("No item selected."),
34 }
35
36 Ok(())
37}Sourcepub fn execute_with(self, params: InvokeParams) -> Result<()>
pub fn execute_with(self, params: InvokeParams) -> Result<()>
Execute the selected command with custom parameters.
Use this to override the working directory or window show state.