 - (defun CreateMessageBox (title msg 是否关闭上次对话框 / tempDir psPath psFile fileHandle WshShell Process)
- (if 是否关闭上次对话框
- (CloseLastMessageBox)
- )
- (setq tempDir (getenv "TEMP"))
- (if (not tempDir)
- (setq tempDir "C:\\Temp")
- )
-
- (setq psPath (strcat tempDir "\\message_box.ps1"))
-
- (setq psFile (open psPath "w"))
- (if psFile
- (progn
- ;; 创建PowerShell脚本实现精确定位
- (write-line "Add-Type -AssemblyName System.Windows.Forms" psFile)
- (write-line "[System.Windows.Forms.Application]::EnableVisualStyles()" psFile)
- (write-line "$form = New-Object System.Windows.Forms.Form" psFile)
- (write-line (strcat "$form.Text = "" title """) psFile)
- (write-line "$form.Size = New-Object System.Drawing.Size(300,150)" psFile)
- (write-line "$form.StartPosition = [System.Windows.Forms.FormStartPosition]::Manual" psFile)
- (write-line "$screen = [System.Windows.Forms.Screen]::PrimaryScreen" psFile)
- (write-line "$form.Location = New-Object System.Drawing.Point(($screen.WorkingArea.Width - $form.Width), ($screen.WorkingArea.Height - $form.Height))" psFile)
- (write-line "$form.TopMost = $true" psFile)
- (write-line "$label = New-Object System.Windows.Forms.Label" psFile)
- (write-line "$label.Location = New-Object System.Drawing.Point(10,20)" psFile)
- (write-line "$label.Size = New-Object System.Drawing.Size(260,50)" psFile)
- (write-line (strcat "$label.Text = "" msg """) psFile)
- (write-line "$form.Controls.Add($label)" psFile)
- (write-line "$button = New-Object System.Windows.Forms.Button" psFile)
- (write-line "$button.Location = New-Object System.Drawing.Point(110,80)" psFile)
- (write-line "$button.Size = New-Object System.Drawing.Size(75,23)" psFile)
- (write-line "$button.Text = "确定"" psFile)
- (write-line "$button.DialogResult = [System.Windows.Forms.DialogResult]::OK" psFile)
- (write-line "$form.AcceptButton = $button" psFile)
- (write-line "$form.Controls.Add($button)" psFile)
- (write-line "$timer = New-Object System.Windows.Forms.Timer" psFile)
- (write-line "$timer.Interval = 3000" psFile)
- (write-line "$timer.Add_Tick({$form.Close()})" psFile)
- (write-line "$timer.Start()" psFile)
- (write-line "$result = $form.ShowDialog()" psFile)
-
- (close psFile)
-
- ;; 启动PowerShell进程
- (setq WshShell (vlax-create-object "WScript.Shell"))
- (setq Process (vlax-invoke WshShell 'Exec (strcat "powershell -WindowStyle Hidden -ExecutionPolicy Bypass -File "" psPath """)))
- (setq *LastMessageBoxPID* (vlax-get-property Process 'ProcessID))
-
- (vlax-release-object WshShell)
- )
- (progn
- (alert msg)
- nil
- )
- )
- )
|