Board logo

标题: [问题求助] 给powershell的窗体中的控件添加热键 [打印本页]

作者: 小白龙    时间: 2022-9-4 10:34     标题: 给powershell的窗体中的控件添加热键

本帖最后由 小白龙 于 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. # 而不是建立一个字符串 'Shift + Control + Alt', 像上面,你也可以使用
  53. # $_.Modifiers 属性,并将逗号替换为加号,如下所示:
  54. # $modkeys = $_.Modifiers -replace ', ', ' + '
  55. #这些是您想要作为示例做出反应的关键
  56. #在这里,按下的所有键都只是做同样的事情,即显示按下的内容,
  57. #因此,我们可以缩短代码,以简单地测试
  58. #数组与用户按下的键相对应。
  59. if ('Q', 'A', 'F1', 'Escape', 'NumLock' -contains $_.KeyCode)
  60. {
  61. # 我们通过在 POwershell 中使用 '-f' Format 运算符来创建输出字符串。
  62. Write-Host ('{0}{1} pressed' -f $modkeys, $_.KeyCode)
  63. #同样的事情也可以用这样的东西来完成:
  64. # Write-Host ($modkeys + ' ' + $_.KeyCode + ' pressed')
  65. #或者
  66. # Write-Host "$modkeys $($_.KeyCode) pressed"
  67. }
  68. })
  69. $form1.showdialog()
复制代码

作者: flashercs    时间: 2022-9-4 11:46

  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.     # 而不是建立一个字符串 'Shift + Control + Alt', 像上面,你也可以使用
  53.     # $oArgs.Modifiers 属性,并将逗号替换为加号,如下所示:
  54.     # $modkeys = $oArgs.Modifiers -replace ', ', ' + '
  55.     #这些是您想要作为示例做出反应的关键
  56.     #在这里,按下的所有键都只是做同样的事情,即显示按下的内容,
  57.     #因此,我们可以缩短代码,以简单地测试
  58.     #数组与用户按下的键相对应。
  59.     if ('Q', 'A', 'F1', 'Escape', 'NumLock' -contains $oArgs.KeyCode) {
  60.       # 我们通过在 POwershell 中使用 '-f' Format 运算符来创建输出字符串。
  61.       Write-Host ('{0}{1} pressed' -f $modkeys, $oArgs.KeyCode)
  62.       #同样的事情也可以用这样的东西来完成:
  63.       # Write-Host ($modkeys + ' ' + $oArgs.KeyCode + ' pressed')
  64.       #或者
  65.       # Write-Host "$modkeys $($oArgs.KeyCode) pressed"
  66.     }
  67.   })
  68. $form1.showdialog()
  69. $Form1.Dispose()
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2