Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: [1] 2 3 4 ... 10
 1 
 : 09-10-2024 21:32 
Автор GrabbeR - Последний ответ от GrabbeR
Доброго времени суток, ув. форумчане!

Delphi 11 Update 3

Имеется рабочая процедура вывода результата выполнения консольной команды из PowerShell (отрисовка консоли) в RichEdit.
Задача: выполнить приостановку/запуск нескольких ВМ на Hyper-V при условии проверки их статуса:
- если статус "Running" - приостановить;
- если статус "Paused" - запустить.

Прошу помощи. Возможно, реализуемо через WMI, например? У кого есть наработки, поделитесь, пожалуйста.

Процедура:
Код:
procedure RunDosInMemo(CmdLine: widestring; AMemo: TRichEdit);
const
  ReadBuffer = 2400;
var
  sa: PAnsiChar;
  Security: TSecurityAttributes;
  ReadPipe, WritePipe: THandle;
  start: TStartUpInfo;
  ProcessInfo: TProcessInformation;
  Buffer: PAnsiChar;
  BytesRead: DWord;
  Apprunning: DWord;
begin
  Screen.Cursor := CrHourGlass;
 
  with Security do
  begin
    nlength := SizeOf(TSecurityAttributes);
    binherithandle := true;
    lpsecuritydescriptor := nil;
  end;
  if Createpipe(ReadPipe, WritePipe,
    @Security, 0) then
  begin
    Buffer := AllocMem(ReadBuffer + 1);
    FillChar(Start, Sizeof(Start), #0);
    start.cb := SizeOf(start);
    start.hStdOutput := WritePipe;
    start.hStdInput := ReadPipe;
    // start.dwFlags := STARTF_USESHOWWINDOW;
    start.dwFlags := STARTF_USESTDHANDLES +
      STARTF_USESHOWWINDOW;
    start.wShowWindow := SW_HIDE;
 
    if CreateProcess(nil,
      PChar(CmdLine),
      @Security,
      @Security,
      true,
      NORMAL_PRIORITY_CLASS,
      nil,
      nil,
      start,
      ProcessInfo) then
    begin
      repeat
        Apprunning := WaitForSingleObject
          (ProcessInfo.hProcess, 100);
        ReadFile(ReadPipe, Buffer[0],
          ReadBuffer, BytesRead, nil);
        Buffer[BytesRead] := #0;
 
        sa := PAnsiChar(Buffer);
        OemToCharA(sa, sa);
        AMemo.Text := AMemo.text + sa;
 
        Application.ProcessMessages;
      until (Apprunning <> WAIT_TIMEOUT);
    end;
    FreeMem(Buffer);
    CloseHandle(ProcessInfo.hProcess);
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ReadPipe);
    CloseHandle(WritePipe);
  end;
  Screen.Cursor := CrDefault;
end;

Вызов:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  RichEdit1.Clear;
  RunDosInMemo('powershell.exe' + ' /c ' + 'Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State', RichEdit1);
end;

Листинг PowerShell:
Код:
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State
 
Running
Running
 
 
PS C:\Windows\system32> Suspend-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false
ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины "S2.W2022.Test".
ПОДРОБНО: Suspend-VM приостановит работу виртуальной машины "S2.ACPA.16".
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State
 
Paused
Paused
 
 
PS C:\Windows\system32> Resume-VM -Name S2.ACPA.16,S2.W2022.Test -Verbose -Confirm:$false
ПОДРОБНО: Resume-VM возобновит работу виртуальной машины "S2.W2022.Test".
ПОДРОБНО: Resume-VM возобновит работу виртуальной машины "S2.ACPA.16".
PS C:\Windows\system32> Get-VM -Name S2.ACPA.16,S2.W2022.Test | Format-Table -HideTableHeaders State
 
Running
Running

 2 
 : 02-09-2024 11:47 
Автор NikVE - Последний ответ от Ochkarik
RXL, привет! кстати тут у нас Пенни Орвик лежит- вполне актуально мне думается. не думаю что что то после нее появлялось переводное и такое же обширное.

кстати "Внутреннее устройство Microsoft Windows. Марк Руссинович,  Дэвид Соломон. "
оказывается!!!! на 2018год уже переведено 7-е издание с упоминаниями win10. и ее можно купить в электронном за 800рэ, на сайте издательства Питер!
https://www.piter.com/collection/windows-ustanovka-i-nastroyka/product/vnutrennee-ustroystvo-windows-7-e-izd




 3 
 : 30-08-2024 20:37 
Автор NikVE - Последний ответ от RXL
Наша коллекция древняя, но все же:
https://club.shelek.ru/viewfiles.php?id=9
https://club.shelek.ru/viewfiles.php?id=2

 4 
 : 30-08-2024 14:10 
Автор NikVE - Последний ответ от Ochkarik
NikVE, PS но лучше все таки читать с windows-2000. Windows 98-ой, WDM-драйвера поддерживал, но так же поддерживал и vxd-дрова от 3.x-95го, которые кардинально другие.
литература в прибитых темах висит список. бумажные варианты скорее уже не найти, хотя вон на озоне Пени Орвик печатают на заказ незадрого но это если WDF захочется.
Уолтер Они - скорее в электронном надо искать...
Руссинович вроде можно было найти в электронном виде.

 5 
 : 30-08-2024 01:13 
Автор NikVE - Последний ответ от Джон
Да и не понятно, что сейчас актуально - Винды меняются, как перчатки - пока будешь читать об одной, уже 3 раза выйдет новая Винда.

Нууу не так уж она и быстро меняется, хотя конечно, с какой скоростью читать... Ага

Может быть наводку какую сможете дать?

Так вот же она, наводка!

структура и идея драйвера с 98-2000го не менялась кординально. Так что очень многое, из ранее выпущенной литературы, вполне актуально и сейчас.

 6 
 : 29-08-2024 18:19 
Автор NikVE - Последний ответ от NikVE
NikVE, если прям интересно поизучать - то вполне реально. Вообще говоря в целом(ну очень грубо говоря в целом) структура и идея драйвера с 98-2000го не менялась кординально. Так что очень многое, из ранее выпущенной литературы, вполне актуально и сейчас. Тема очень обширная, начните с изучения ядра, полистайте книги, а дальше видно будет)
Увы, у меня нет ничего про "ядро". Да и не понятно, что сейчас актуально - Винды меняются, как перчатки - пока будешь читать об одной, уже 3 раза выйдет новая Винда. Может быть наводку какую сможете дать?

 7 
 : 27-08-2024 14:45 
Автор NikVE - Последний ответ от Ochkarik
NikVE, если прям интересно поизучать - то вполне реально. Вообще говоря в целом(ну очень грубо говоря в целом) структура и идея драйвера с 98-2000го не менялась кординально. Так что очень многое, из ранее выпущенной литературы, вполне актуально и сейчас. Тема очень обширная, начните с изучения ядра, полистайте книги, а дальше видно будет)

 8 
 : 27-08-2024 14:37 
Автор NikVE - Последний ответ от Ochkarik
RXL, в режиме отладки можно -  загрузить, залогинится админом, перезагрузить с зажатым шифтом, выбрать - отключение проверки подписи. для разработки в принципе хватит. а вот пользователю с этим жить не очень будет....
ну есть еще отдельные классы драйверов пользовательского режима (UMDF) . там кое что тоже можно, но кажется оно тоже требует подписи....хотя тут не уверен на 100%!

 9 
 : 27-08-2024 07:38 
Автор NikVE - Последний ответ от RXL
Если чисто развлечься, то можно все. А если писать программы, то нужно придерживаться правил. Иначе либо платить не будут, либо коллеги уважать не будут. Меньше заумностей, больше смысла!

 10 
 : 27-08-2024 03:09 
Автор NikVE - Последний ответ от Finch
В добавок к ответу Джона Чуть чуть практики:
Код: (C++)
#include <stdio.h>
print() {
    printf("Hello world \n");
}

int main() {
   print();
    return 0;
}
Компилятор выдает:
]
$ g++ main.cpp -c
main.cpp:2:1: error: ISO C++ forbids declaration of ‘print’ with no type [-fpermissive]
    2 | print() {
      | ^~~~~
main.cpp: In function ‘int print()’:
main.cpp:4:1: warning: no return statement in function returning non-void [-Wreturn-type]
    4 | }
      | ^
Т.е. Компидятор сначало выдает ошибку, что не определен тип. Потом выдает предупреждение, что нету возврашаемого значения.  При этом по умолчанию выдает тип int.

Страниц: [1] 2 3 4 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines