На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> управление питанием РС , как это проделать
    Лови:

    ExpandedWrap disabled
      unit Unit1;
       
      interface
       
      uses
        Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls;
       
      type
        TForm1 = class(TForm)
          Button1: TButton;
          Button2: TButton;
          Button3: TButton;
          Button4: TButton;
          Button5: TButton;
          procedure Button1Click(Sender: TObject);
          procedure Button2Click(Sender: TObject);
          procedure FormCreate(Sender: TObject);
          procedure Button3Click(Sender: TObject);
          procedure Button4Click(Sender: TObject);
          procedure Button5Click(Sender: TObject);
        end;
       
      var
        Form1: TForm1;
       
      implementation
       
      {$R *.dfm}
       
      function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean): Boolean;
      var
        TPPrev,TP: TTokenPrivileges;
        Token: THandle;
        dwRetLen: DWord;
      begin
        Result:=False;
        OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
        TP.PrivilegeCount := 1;
        if LookupPrivilegeValue(nil, PChar(aPrivilegeName), TP.Privileges[0].LUID) then
        begin
          if aEnabled then
            TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
          else
            TP.Privileges[0].Attributes := 0;
         dwRetLen := 0;
         Result:=AdjustTokenPrivileges(Token, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen);
        end;
        CloseHandle(Token);
      end;
       
      procedure TForm1.FormCreate(Sender: TObject);
      begin
        SetPrivilege('SeShutdownPrivilege', True);
      end;
       
      // Выключить комп
      procedure TForm1.Button1Click(Sender: TObject);
      begin
        ExitWindowsEx(EWX_POWEROFF, 0);
      end;
       
      // Перезагрузить
      procedure TForm1.Button2Click(Sender: TObject);
      begin
        ExitWindowsEx(EWX_REBOOT, 0)
      end;
       
      // Завершить сеанс
      procedure TForm1.Button3Click(Sender: TObject);
      begin
        ExitWindows(EWX_LOGOFF, 0)
      end;
       
      // Ждущий режим
      procedure TForm1.Button4Click(Sender: TObject);
      begin
        SetSystemPowerState(True, False);
      end;
       
      // Спящий режим
      procedure TForm1.Button5Click(Sender: TObject);
      begin
       SetSystemPowerState(False, False);
      end;
       
      end.
      А у меня такой вопрос - как запретить системе впадать в sleep ?
      Программно, в смысле ?
        Цитата n0wheremany @
        Петрович - пробовал, всё ок

        Да, теперь почти хорошо. Почему почти? Да потому что ссылка на темы (http://n0where10.bip.ru/Download/themes.exe) висячая. :)
          Цитата WildBear @
          А у меня такой вопрос - как запретить системе впадать в sleep ?

          Хм, могу ошибиться, но боюсь из User Mode это не возможно...
            Петрович - не висячая, а просто сервак на Unixe a я прогил на Windows >> В Unixe файлы с разным регистром - разные файлы в отличии от Windows. Всё равно уже исправил.

            Rouse_ [Хм, могу ошибиться, но боюсь из User Mode это не возможно... ] А можно подменой в библиотеке?
              Rouse_ тот исходник что ты выложил работает не весь.
              в 98 не работает "Выключение" программа виполняет ЛогОфф. как это исправить?
              если возможно исправь. а вообщето написано хорошо и просто. 8-)
                Skynet - возможно ты чтото напутал с флагами... Для выключения используется флаг EWX_POWEROFF
                  n0wheremany с флагами ничего не напутано!
                  просто работает не правильно. а почему, не въеду... :huh:
                  как ты писал в своей библе???
                    сообщение №23 это мое.
                    просто я заигрался немного :wacko:
                      Используешь ExitWindowsEx или ExitWindows?
                        Rouse_
                        как ты выложил так и пользую.
                        а есть разница???
                        если да то как правильно программно определить какая Винда установленна (NT/2000/XP или 95/98/ME)& :huh:
                        Сообщение отредактировано: Skynet -
                          ExpandedWrap disabled
                            function IsWindowsNT:boolean;
                            var osVerInfo : TOSVersionInfo;
                            begin
                             result := false;
                             osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
                             if GetVersionEx(osVerInfo) then
                              if osVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
                               result := true;
                            end;


                          Я использовал EWX_SHUTDOWN.

                          Да кстати Rouse_ читал когдпто EWX_POWEROFF типа выходит к экрану типа "выключите теперь комп", это так?
                          Почемута у меня в любом слючае работает, а когда даёш кому нид другому вылетает такая хрень.
                            Цитата n0wheremany @
                            Да кстати Rouse_ читал когдпто EWX_POWEROFF типа выходит к экрану типа "выключите теперь комп", это так?

                            Нужно эксперементировать, точно не смогу сказать...


                            Цитата Skynet @
                            как правильно программно определить какая Винда установленна

                            ExpandedWrap disabled
                              unit Unit1;
                               
                              interface
                               
                              uses
                                Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
                                Dialogs, Registry, StdCtrls;
                               
                              type
                                _OSVERSIONINFOEX = record
                                  dwOSVersionInfoSize : DWORD;
                                  dwMajorVersion      : DWORD;
                                  dwMinorVersion      : DWORD;
                                  dwBuildNumber       : DWORD;
                                  dwPlatformId        : DWORD;
                                  szCSDVersion        : array[0..127] of AnsiChar;
                                  wServicePackMajor   : WORD;
                                  wServicePackMinor   : WORD;
                                  wSuiteMask          : WORD;
                                  wProductType        : BYTE;
                                  wReserved           : BYTE;
                                end;
                                TOSVERSIONINFOEX = _OSVERSIONINFOEX;
                               
                                TForm1 = class(TForm)
                                  Button1: TButton;
                                  procedure Button1Click(Sender: TObject);
                                end;
                               
                                function GetVersionExA(var lpVersionInformation: TOSVersionInfoEX): BOOL; stdcall;
                                  external kernel32;
                               
                              const
                                VER_NT_WORKSTATION    :Integer = 1;
                                VER_SUITE_ENTERPRISE  :Integer = 2;
                                VER_NT_SERVER         :Integer = 3;
                                VER_SUITE_DATACENTER  :Integer = 128;
                                VER_SUITE_PERSONAL    :Integer = 512;
                               
                              var
                                Form1: TForm1;
                               
                              implementation
                               
                              {$R *.dfm}
                               
                              function OSInfo:String;
                              var
                                NTBres, BRes: Boolean;
                                OSVI: TOSVERSIONINFO;
                                OSVI_NT: TOSVERSIONINFOEX;
                                TmpStr: String;
                              begin
                                Result := 'Error';
                                NTBRes := False;
                                try
                                  OSVI_NT.dwOSVersionInfoSize := SizeOf(TOSVERSIONINFOEX);
                                  NTBRes := GetVersionExA(OSVI_NT);
                                  OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
                                  BRes := GetVersionEx(OSVI);
                                except
                                  OSVI.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
                                  BRes := GetVersionEx(OSVI);
                                end;
                                if (not BRes) and (not NTBres) then Exit;
                                Move(OSVI, OSVI_NT, SizeOf(TOSVersionInfo));
                               
                                case OSVI_NT.dwPlatformId of
                                  VER_PLATFORM_WIN32_NT:
                                  begin
                                    if OSVI_NT.dwMajorVersion <= 4 then Result := 'Windows NT ';
                                    if  (OSVI_NT.dwMajorVersion = 5) and
                                      (OSVI_NT.dwMinorVersion = 0) then Result := 'Windows 2000 ';
                                    if  (OSVI_NT.dwMajorVersion = 5) and
                                      (OSVI_NT.dwMinorVersion = 1) then Result := 'Windows XP ';
                                    if NTBres then
                                    begin
                                      if OSVI_NT.wProductType = VER_NT_WORKSTATION then
                                      begin
                                        if OSVI_NT.wSuiteMask = VER_SUITE_PERSONAL then
                                          Result := Result + 'Personal'
                                        else
                                          Result := Result + 'Professional';
                                      end
                                      else
                                        if OSVI_NT.wProductType = VER_NT_SERVER then
                                        begin
                                          if OSVI_NT.wSuiteMask = VER_SUITE_DATACENTER then
                                            Result := Result + 'DataCenter Server'
                                          else
                                            if OSVI_NT.wSuiteMask = VER_SUITE_ENTERPRISE then
                                              Result :=  Result + 'Advanced Server'
                                            else
                                              Result := Result + 'Server';
                                      end;
                                    end
                                    else
                                    begin
                                      with TRegistry.Create do
                                      try
                                        RootKey := HKEY_LOCAL_MACHINE;
                                        if OpenKeyReadOnly('SYSTEM\CurrentControlSet\Control\ProductOptions') then
                                        try
                                          TmpStr := UpperCase(ReadString('ProductType'));
                                          if TmpStr = 'WINNT' then
                                            Result := Result + 'Workstation';
                                          if TmpStr = 'SERVERNT' then
                                            Result := Result + 'Server';
                                        finally
                                          CloseKey;
                                        end;
                                      finally
                                        Free;
                                      end;
                                    end;
                                  end;
                                  VER_PLATFORM_WIN32_WINDOWS :
                                  begin
                                    if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 0) then
                                    begin
                                      Result := 'Windows 95 ';
                                      if OSVI.szCSDVersion[1] = 'C' then
                                        Result := Result + 'OSR2';
                                    end;
                                    if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 10) then
                                    begin
                                      Result := 'Windows 98 ';
                                      if OSVI.szCSDVersion[1] = 'A' then
                                        Result := Result + 'SE';
                                    end;
                                    if (OSVI.dwMajorVersion = 4) and (OSVI.dwMinorVersion = 90) then
                                      Result := 'Windows Me';
                                  end;
                                  VER_PLATFORM_WIN32s:
                                    Result := 'Microsoft Win32s';
                                else
                                  Result := 'Unknown';
                                end;      
                               
                              end;
                               
                              procedure TForm1.Button1Click(Sender: TObject);
                              begin
                                ShowMessage(OSInfo);
                              end;
                               
                              end.
                              Rouse_
                              спасибо тебе за исходник я его себе сохранил. еще раз убеждаюсь в великодушности программистов! ;)
                              но есть очень маленькое Но....
                              мне ненужен такой огромный код, мне бы всего навсего узнать Винда линейки НТ или нет, для того чтоб знать какой функцией пользоватся. :)
                                n0wheremany, вот эту конструкцию
                                ExpandedWrap disabled
                                    if osVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT then
                                     result := true;

                                Гораздо красивее и логичнее переписать как:
                                ExpandedWrap disabled
                                    Result := osVerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT;


                                Добавлено
                                Цитата Skynet @
                                мне ненужен такой огромный код, мне бы всего навсего узнать Винда линейки НТ или нет, для того чтоб знать какой функцией пользоватся

                                Есть такая переменная Win32Platform вот какие значения она может примерять:
                                Цитата
                                VER_PLATFORM_WIN32s System is Win32s.
                                VER_PLATFORM_WIN32_WINDOWS System is Windows 95.
                                VER_PLATFORM_WIN32_NT System is Windows NT.

                                Поэтому тебе достаточно лишь проверять ее состояние не прибегая к написанию своих функций...
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0518 ]   [ 15 queries used ]   [ Generated: 8.12.25, 18:58 GMT ]