;;;高级对话框 (defun C:MyDlg (/ myCommand wsh res) (setq myCommand (strcat "powershell.exe -Command " "Add-Type -AssemblyName System.Windows.Forms;" "Add-Type -AssemblyName System.Drawing;" ;;添加对话框 "$form = New-Object System.Windows.Forms.Form;" "$form.Text = 'powershell 窗口示例';" "$form.Size = New-Object System.Drawing.Size(600,500);" "$form.StartPosition = 'CenterScreen';" ;;添加选项卡 "$tabControl = New-Object System.Windows.Forms.TabControl;" "$tabControl.Dock = 'Fill';" "$form.Controls.Add($tabControl);" "$tab1 = New-Object System.Windows.Forms.TabPage;" "$tab1.Text = '基础';" "$tabControl.Controls.Add($tab1);" "$tab2 = New-Object System.Windows.Forms.TabPage;" "$tab2.Text = '进阶';" "$tabControl.Controls.Add($tab2);" "$tab3 = New-Object System.Windows.Forms.TabPage;" "$tab3.Text = '高级';" "$tabControl.Controls.Add($tab3);" ;;添加菜单 "$menuStrip = New-Object System.Windows.Forms.MenuStrip;" "$fileMenu = New-Object System.Windows.Forms.ToolStripMenuItem('文件(&F)');" "$exitMenuItem = New-Object System.Windows.Forms.ToolStripMenuItem('退出(&X)');" "$fileMenu.DropDownItems.Add($exitMenuItem);" "$helpMenu = New-Object System.Windows.Forms.ToolStripMenuItem('帮助(&H)');" "$aboutMenuItem = New-Object System.Windows.Forms.ToolStripMenuItem('关于(&A)');" "$helpMenu.DropDownItems.Add($aboutMenuItem);" "$menuStrip.Items.AddRange(@($fileMenu, $helpMenu));" "$exitMenuItem.Add_Click({ $form.Close() });" "$aboutMenuItem.Add_Click({[System.Windows.Forms.MessageBox]::Show('PowerShell 综合示例 v1.0 作者: Highflybird', '关于')});" ;;添加表格 "$dataGridView = New-Object System.Windows.Forms.DataGridView;" "$dataGridView.Location = New-Object System.Drawing.Point(10, 10);" "$dataGridView.Size = New-Object System.Drawing.Size(560, 300);" "$dataGridView.Anchor = [System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Left -bor [System.Windows.Forms.AnchorStyles]::Right;" "$dataGridView.ColumnCount = 3;" "$dataGridView.ColumnHeadersVisible = $true;" "$dataGridView.Columns[0].Name = 'ID';" "$dataGridView.Columns[0].Width = 100;" "$dataGridView.Columns[1].Name = '名称';" "$dataGridView.Columns[1].Width = 200;" "$dataGridView.Columns[2].Name = '状态';" "$dataGridView.Columns[2].Width = 200;" "for ($i=1; $i -le 5; $i++) {$dataGridView.Rows.Add($i,'项目'+ $i, '进行中')};" "$form.Controls.Add($dataGridView);" "$tab1.Controls.Add($dataGridView);" ;;添加进度条 "$progressBar = New-Object System.Windows.Forms.ProgressBar;" "$progressBar.Location = New-Object System.Drawing.Point(10, 320);" "$progressBar.Size = New-Object System.Drawing.Size(550, 20);" "$progressBar.Style = 'Continuous' ;" "$progressBar.Minimum = 0;" "$progressBar.Maximum = 100;" "$form.Controls.Add($progressBar);" "$tab1.Controls.Add($progressBar);" ;;添加状态条 "$statusLabel = New-Object System.Windows.Forms.Label;" "$statusLabel.Location = New-Object System.Drawing.Point(10, 350);" "$statusLabel.Size = New-Object System.Drawing.Size(550, 20);" "$statusLabel.Text = '等待定时器启动...' ;" "$form.Controls.Add($statusLabel);" "$tab1.Controls.Add($statusLabel);" ;;添加定时器 "$delayTimer = New-Object System.Windows.Forms.Timer;" "$delayTimer.Interval = 3000;" "$delayTimer.Add_Tick({$script:countdown--; $statusLabel.Text = '定时器将在 '+$script:countdown+' 秒后启动...'; if ($script:countdown -le 0) {$mainTimer.Start(); $delayTimer.Stop();$statusLabel.Text = '定时器已启动,运行时间:0 秒'}});" "$mainTimer = New-Object System.Windows.Forms.Timer;" "$mainTimer.Interval = 1000;" "$counter = 0;" "$progressValue = 0;" "$mainTimer.Add_Tick({$script:counter++;$script:progressValue += 5; $statusLabel.Text = '系统已运行 '+$script:counter+' 秒';if($script:progressValue -ge 100) { $script:progressValue = 0;}$progressBar.Value = $script:progressValue;if ($script:counter % 5 -eq 0) { $randomIndex = Get-Random -Minimum 0 -Maximum 5;$newStatus = if ((Get-Random) % 2 -eq 0) { '完成' } else { '进行中' };$dataGridView.Rows[$randomIndex].Cells[2].Value = $newStatus}});" "$form.Add_Shown({$delayTimer.Start()});" ;;添加按钮 "$button = New-Object System.Windows.Forms.Button;" "$button.Location = New-Object System.Drawing.Point(250, 370);" "$button.Size = New-Object System.Drawing.Size(80, 30);" "$button.Text = '确定';" "$button.Add_Click({$form.Close()});" "$form.Controls.Add($button);" "$tab1.Controls.Add($button);" "$form.Controls.Add($menuStrip);" ;;日期选择 "$datePicker = New-Object System.Windows.Forms.DateTimePicker;" "$datePicker.Location = New-Object System.Drawing.Point(10, 10);" "$datePicker.Format = [System.Windows.Forms.DateTimePickerFormat]::Long;" "$datePicker.Width = 190 ;" "$tab2.Controls.Add($datePicker);" ;;添加面板 "$panel = New-Object System.Windows.Forms.Panel;" "$panel.Location = New-Object System.Drawing.Point(10, 40);" "$panel.Size = New-Object System.Drawing.Size(550, 360);" "$panel.BorderStyle = 'FixedSingle';" "$tab2.Controls.Add($panel);" ;;树状图 "$treeView = New-Object System.Windows.Forms.TreeView;" "$treeView.Dock = 'Right';" "$treeView.Width = 200 ;" "$rootNode = $treeView.Nodes.Add('根节点');" "$rootNode.Nodes.Add('子节点1') | Out-Null;" "$rootNode.Nodes.Add('子节点2') | Out-Null;" "$panel.Controls.Add($treeView);" ;;列表视图 "$listView = New-Object System.Windows.Forms.ListView;" "$listView.Dock = 'Fill';" "$listView.View = 'Details';" "$listView.Columns.Add('项目', 300) | Out-Null;" "$listView.Columns.Add('造价', 300) | Out-Null;" "$listView.Items.Add('项目1').SubItems.Add('值1') | Out-Null;" "$listView.Items.Add('项目2').SubItems.Add('值2') | Out-Null;" "$panel.Controls.Add($listView);" ;;图片 "$pictureBox = New-Object System.Windows.Forms.PictureBox;" "$pictureBox.Size = New-Object System.Drawing.Size(550,380);" "$pictureBox.Location = New-Object System.Drawing.Point(10,10);" "$pictureBox.BorderStyle = 'Fixed3D';" "$pictureBox.SizeMode = 'Zoom';" "$imagePath = 'C:\\Windows\\Web\\Wallpaper\\Windows\\img0.jpg' ;" "$pictureBox.Image = [System.Drawing.Image]::FromFile($imagePath);" "$tab3.Controls.Add($pictureBox);" ;;右键菜单 "$contextMenu = New-Object System.Windows.Forms.ContextMenuStrip;" "$menuItem1 = $contextMenu.Items.Add('复制');" "$menuItem2 = $contextMenu.Items.Add('粘贴');" "$dataGridView.ContextMenuStrip = $contextMenu;" ;;显示对话框 "[void]$form.ShowDialog();" "$mainTimer.Stop();" "$delayTimer.Stop()" ) ) (setq wsh (vlax-create-object "wscript.shell")) (setq res (vlax-invoke wsh 'exec myCommand)) (vlax-release-object wsh) (princ) )