找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 13294|回复: 1

[问题求助] 给powershell的窗体中的控件添加热键

[复制链接]
发表于 2022-9-4 10:34:05 | 显示全部楼层 |阅读模式
本帖最后由 小白龙 于 2022-9-4 11:28 编辑

拼凑了两段代码,
一段是在form中添加和显示组合框combobox控件
另一段是给form添加按键按下事件
合二为一之后, 发现按键事件触发不起作用, 对Ps和c#都不太懂, 卡壳了
如果上面搞定了, 还有个高难度的要求, 不知能不能实现, 感觉应该可以:
就是想用 英文的逗号和句号 分别选择 combobox组合框中的下一项和上一项, 用上下方向键,手要移动位置有点不方便
  1. Add-Type -AssemblyName System.Windows.Forms
  2. Add-Type -AssemblyName System.Drawing

  3. $Form1 = New-Object System.Windows.Forms.Form
  4. $Form1.ClientSize = New-Object System.Drawing.Size(407, 390)
  5. $form1.topmost = $true

  6. #组合框1
  7. $computerNames = @("中国", "日本", "美国")
  8. $comboBox1 = New-Object System.Windows.Forms.ComboBox
  9. $comboBox1.Location = New-Object System.Drawing.Point(25, 55)
  10. $comboBox1.Size = New-Object System.Drawing.Size(350, 310)
  11. foreach ($computer in $computerNames)
  12. {
  13.         $comboBox1.Items.add($computer)
  14. }
  15. $Form1.Controls.Add($comboBox1)

  16. #组合框2
  17. $computerNames2 = @("北京", "上海", "广州")
  18. $comboBox2 = New-Object System.Windows.Forms.ComboBox
  19. $comboBox2.Location = New-Object System.Drawing.Point(25, 120)
  20. $comboBox2.Size = New-Object System.Drawing.Size(350, 310)
  21. foreach ($computer in $computerNames2)
  22. {
  23.         $comboBox2.Items.add($computer)
  24. }
  25. $Form1.Controls.Add($comboBox2)

  26. #按钮
  27. $Button = New-Object System.Windows.Forms.Button
  28. $Button.Location = New-Object System.Drawing.Point(25, 20)
  29. $Button.Size = New-Object System.Drawing.Size(98, 23)
  30. $Button.Text = "输出所选"
  31. $Button.add_Click({ $label.Text = $comboBox1.SelectedItem.ToString() })
  32. $Form1.Controls.Add($Button)

  33. #标签
  34. $label = New-Object System.Windows.Forms.Label
  35. $label.Location = New-Object System.Drawing.Point(70, 90)
  36. $label.Size = New-Object System.Drawing.Size(98, 23)
  37. $label.Text = ""
  38. $Form1.Controls.Add($label)

  39. #热键
  40. $form1.Add_KeyDown({
  41.                 # 创建一个小数组来捕获使用的修饰键
  42.                 $modifiers = @()
  43.                 if ($_.Shift) { $modifiers += "Shift" }
  44.                 if ($_.Alt) { $modifiers += "Alt" }
  45.                 if ($_.Control) { $modifiers += "Control" }
  46.                 # 使用该数组,构建部分输出文本
  47.                 $modkeys = ''
  48.                 if ($modifiers.Count)
  49.                 {
  50.                         $modkeys = '{0} ' -f ($modifiers -join ' + ')
  51.                 }
  52.                
  53.                 # 而不是建立一个字符串 'Shift + Control + Alt', 像上面,你也可以使用
  54.                 # $_.Modifiers 属性,并将逗号替换为加号,如下所示:
  55.                 # $modkeys = $_.Modifiers -replace ', ', ' + '
  56.                
  57.                 #这些是您想要作为示例做出反应的关键
  58.                 #在这里,按下的所有键都只是做同样的事情,即显示按下的内容,
  59.                 #因此,我们可以缩短代码,以简单地测试
  60.                 #数组与用户按下的键相对应。
  61.                
  62.                 if ('Q', 'A', 'F1', 'Escape', 'NumLock' -contains $_.KeyCode)
  63.                 {
  64.                        
  65.                         # 我们通过在 POwershell 中使用 '-f' Format 运算符来创建输出字符串。
  66.                         Write-Host ('{0}{1} pressed' -f $modkeys, $_.KeyCode)
  67.                        
  68.                         #同样的事情也可以用这样的东西来完成:
  69.                         # Write-Host ($modkeys + ' ' + $_.KeyCode + ' pressed')
  70.                         #或者
  71.                         # Write-Host "$modkeys $($_.KeyCode) pressed"
  72.                 }
  73.         })

  74. $form1.showdialog()
复制代码
发表于 2022-9-4 11:46:58 | 显示全部楼层
  1. Add-Type -AssemblyName System.Windows.Forms
  2. Add-Type -AssemblyName System.Drawing

  3. $Form1 = New-Object System.Windows.Forms.Form
  4. $Form1.ClientSize = New-Object System.Drawing.Size(407, 390)
  5. $form1.topmost = $true

  6. #组合框1
  7. $computerNames = @("中国", "日本", "美国")
  8. $comboBox1 = New-Object System.Windows.Forms.ComboBox
  9. $comboBox1.Location = New-Object System.Drawing.Point(25, 55)
  10. $comboBox1.Size = New-Object System.Drawing.Size(350, 310)
  11. foreach ($computer in $computerNames) {
  12.   $comboBox1.Items.add($computer)
  13. }
  14. $Form1.Controls.Add($comboBox1)

  15. #组合框2
  16. $computerNames2 = @("北京", "上海", "广州")
  17. $comboBox2 = New-Object System.Windows.Forms.ComboBox
  18. $comboBox2.Location = New-Object System.Drawing.Point(25, 120)
  19. $comboBox2.Size = New-Object System.Drawing.Size(350, 310)
  20. foreach ($computer in $computerNames2) {
  21.   $comboBox2.Items.add($computer)
  22. }
  23. $Form1.Controls.Add($comboBox2)

  24. #按钮
  25. $Button = New-Object System.Windows.Forms.Button
  26. $Button.Location = New-Object System.Drawing.Point(25, 20)
  27. $Button.Size = New-Object System.Drawing.Size(98, 23)
  28. $Button.Text = "输出所选"
  29. $Button.add_Click( { $label.Text = $comboBox1.SelectedItem.ToString() })
  30. $Form1.Controls.Add($Button)

  31. #标签
  32. $label = New-Object System.Windows.Forms.Label
  33. $label.Location = New-Object System.Drawing.Point(70, 90)
  34. $label.Size = New-Object System.Drawing.Size(98, 23)
  35. $label.Text = ""
  36. $Form1.Controls.Add($label)

  37. #热键
  38. $Form1.KeyPreview = $true
  39. $Form1.Add_KeyDown( {
  40.     param($oSender, $oArgs)
  41.     # 创建一个小数组来捕获使用的修饰键
  42.     $modifiers = @()
  43.     # Write-Host $oArgs.KeyCode
  44.     if ($oArgs.Shift) { $modifiers += "Shift" }
  45.     if ($oArgs.Alt) { $modifiers += "Alt" }
  46.     if ($oArgs.Control) { $modifiers += "Control" }
  47.     # 使用该数组,构建部分输出文本
  48.     $modkeys = ''
  49.     if ($modifiers.Count) {
  50.       $modkeys = '{0} ' -f ($modifiers -join ' + ')
  51.     }
  52.                
  53.     # 而不是建立一个字符串 'Shift + Control + Alt', 像上面,你也可以使用
  54.     # $oArgs.Modifiers 属性,并将逗号替换为加号,如下所示:
  55.     # $modkeys = $oArgs.Modifiers -replace ', ', ' + '
  56.                
  57.     #这些是您想要作为示例做出反应的关键
  58.     #在这里,按下的所有键都只是做同样的事情,即显示按下的内容,
  59.     #因此,我们可以缩短代码,以简单地测试
  60.     #数组与用户按下的键相对应。
  61.                
  62.     if ('Q', 'A', 'F1', 'Escape', 'NumLock' -contains $oArgs.KeyCode) {
  63.                        
  64.       # 我们通过在 POwershell 中使用 '-f' Format 运算符来创建输出字符串。
  65.       Write-Host ('{0}{1} pressed' -f $modkeys, $oArgs.KeyCode)
  66.                        
  67.       #同样的事情也可以用这样的东西来完成:
  68.       # Write-Host ($modkeys + ' ' + $oArgs.KeyCode + ' pressed')
  69.       #或者
  70.       # Write-Host "$modkeys $($oArgs.KeyCode) pressed"
  71.     }
  72.   })

  73. $form1.showdialog()
  74. $Form1.Dispose()
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 23:50 , Processed in 0.016759 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表