Полезные вещи

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _kREveDKo_, 12 Feb 2006.

  1. _kREveDKo_

    _kREveDKo_ _kREveDKo_

    Joined:
    4 Dec 2005
    Messages:
    778
    Likes Received:
    620
    Reputations:
    1,040
    Справочники и хелпы по программированию ТУТ

    Предлагаю скинуть сюда полезные для программиста вещи (желательно не сильно весомые). Лучше на Си =) Потому что я на нём кодю =)
    Вот что я выкладываю:

    Вот сборник функций языка Си, довольно удобный - мне понравился и я решил выложить:
    http://boozeland.narod.ru/c_func.rar


    Вот классная прожка по реестру:
    http://boozeland.narod.ru/registry.rar

    Пакет русификации средства MFC AppWizard для Visual C++ 6.0:
    http://boozeland.narod.ru/vc60rus_1.5.rar

    Справочник по API:
    http://boozeland.narod.ru/Api_Help.rar

    Ещё один(по массивнее будет):
    http;//boozeland.narod.ru/agsetup.rar


    Давайте, народ, выкладывайте что можете!!!
     
    #1 _kREveDKo_, 12 Feb 2006
    Last edited: 1 Mar 2006
    1 person likes this.
  2. Ak3lla

    Ak3lla New Member

    Joined:
    14 Feb 2006
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    #2 Ak3lla, 14 Feb 2006
    Last edited: 14 Feb 2006
  3. RekRut

    RekRut Elder - Старейшина

    Joined:
    27 Feb 2006
    Messages:
    116
    Likes Received:
    26
    Reputations:
    0
    Я кодю на С++, сначала тоже так парился искал всякие книги в интернете, а когда понял что ничего нормального не найду то купил себе книгу "Программирование в С++ Builder 6" автор Архангельский А.Я., офигенная книга в ней есть все для начинающего и более менее знающего программиста.
    В нете нормальное что можно найти так это только справочники
     
  4. drmist

    drmist Member

    Joined:
    8 Oct 2005
    Messages:
    307
    Likes Received:
    94
    Reputations:
    80
    Фигня все это.
    Кроме msdn'а и своих мозгов особенно ничего не требуется.
    Масса полезных статей есть на wasm.ru.
     
  5. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ёёёё... Напишите побольше приколов я эту тему засуну в сборник "темы-приколюхи" для растаманов...

    Чувак, я тебе поддерживаю полностью, но после одного твоего поста про то что снифать данные лучше всего перехватом WinAPI, из ring0 - я сильно засомневался что ты читаешь статьи с WASM.RU...
     
    #5 KEZ, 9 Mar 2006
    Last edited: 9 Mar 2006
  6. Utochka

    Utochka Elder - Старейшина

    Joined:
    21 Dec 2005
    Messages:
    495
    Likes Received:
    106
    Reputations:
    54
    Вырубаем комп:

    Code:
    procedure Shutdown; 
    var 
      hToken: THandle; 
      tkp: TTokenPrivileges; 
      ReturnLength: Cardinal; 
    begin 
       if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then 
        begin 
         LookupPrivilegeValue(nil, 'SeShutdownPrivilege',tkp.Privileges[0].Luid); 
         tkp.PrivilegeCount:=1; 
         tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; 
         if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength)then 
          ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0); 
        end; 
    end;
    
    
     
  7. Utochka

    Utochka Elder - Старейшина

    Joined:
    21 Dec 2005
    Messages:
    495
    Likes Received:
    106
    Reputations:
    54
    Delphi и ресурсы компьютера
    Иногда Delphi-приложениям может не хватать функциональной полноты стандартной библиотеки компонентов и
    тогда бывает необходимо
    обратиться к Microsoft Win32 API (Application Programming Interface - интерфейса взаимодействия
    прикладной программы с операционной системой).
    Почти все функции из Microsoft Win32 API описаны в модуле windows.pas (который по умолчанию включается
    в cекцию uses новых модулей). Cледует
    заметить, что часть из этих функции ведет себя по разному в зависимости от текущей операционной
    cистемы (Windows 95, 98, NT).
    Разработаем программу, показывающую нам некоторую системную информацию о компьютере. В частности,
    хотелось бы получить информацию о
    версии ОС, ее директориях, свойствах экрана, ресурсах памяти, имени пользователя и компьютера, дате BIOS.
    Помимо этого, разрешим
    пользователю изменять настройки клавиатуры, встроенного динамика и хранителя экрана.

    Процесс визуального проектирования описывать не будем; рассмотрим лишь страницу «Параметры».
    Для удобства управления параметрами
    клавиатуры положим на нее две компоненты TTrackBar. Изменим свойство Name на tbKeyboardDelay и
    tbKeyboardSpeed. Изменим свойство PageSize
    на 1. Для tbKeyboardDelay установим Max=3 и для tbKeyboardSpeed. Max=31. Для управления
    свойствами хранителя экрана используем TCheckBox
    (свойство Name сменим на cbScreenSaverActive, Caption на ‘Хранитель экрана’)
    и TMaskEdit (свойство Name=’edSSTimeOut’ и
    EditMask=’!999;1;’). Аналогично добавим TCheckBox (свойство Name=’
    cbSpeaker’, Caption=’Использование встроенного
    динамика’ ).

    Рассмотрим текст программы. В список включаемых модулей uses добавим registry.
    Добавим описание процедур в раздел public описания TfmMain.

    type
    TfmMain = class(TForm)
    ...
    procedure FormCreate(Sender: TObject);
    procedure Change(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    KeyboardDelay,
    KeyboardSpeed,
    ScreenSaveTimeOut : integer;
    procedure ParametersInfo;
    procedure ShowSomeInfo;
    procedure BIOSInfo(OS : string);
    procedure HardwareInfo;
    procedure MemoryInfo;
    procedure VideoInfo;
    procedure OSInfo;
    end;

    var fmMain: TfmMain;

    implementation
    uses Registry;
    {$R *.DFM}

    Сначала получим информацию о компьютере. Используем функцию GetComputerName для
    получения имени компьютера, функцию GetUserName для
    получения имени пользователя и функцию GetSystemInfo для получения информации о
    процессоре (наиболее полно данная функция реализована в
    Windows NT, где она возвращает и кол-во процессоров и их тип и т.д.).

    // Информация о компьютере.
    procedure TfmMain.HardwareInfo;
    var Size : cardinal;
    PRes : PChar;
    BRes : boolean;
    lpSystemInfo : TSystemInfo;
    begin
    // Имя компьютера
    Size := MAX_COMPUTERNAME_LENGTH + 1;
    PRes := StrAlloc(Size);
    BRes := GetComputerName(PRes, Size);
    if BRes then laCompName_.Caption := StrPas(PRes);
    // Имя пользователя
    Size := MAX_COMPUTERNAME_LENGTH + 1;
    PRes := StrAlloc(Size);
    BRes := GetUserName(PRes, Size);
    if BRes then laUserName_.Caption := StrPas(PRes);
    // Процессор
    GetSystemInfo(lpSystemInfo);
    laCPU_.Caption := 'класса x' + IntToStr
    (lpSystemInfo.dwProcessorType);
    end;

    Перейдем к параметрам экрану. Здесь мы будем использовать и Win32 API функции и
    стандартные объекты VCL. Так для получения разрешения
    экрана нам понадобится объект TScreen (его свойства Width и Height). Остальные
    параметры мы получим через контекст драйвера устройства DC
    используя функцию GetDeviceCaps.

    // Информация о видеосистеме.
    procedure TfmMain.VideoInfo;
    var DC : hDC;
    c : string;
    begin
    // Разрешение экрана
    laWidth_.Caption := IntToStr(Screen.Height);
    laHeight_.Caption := IntToStr(Screen.Width);
    // Информация о глубине цвета.
    DC := CreateDC('DISPLAY',nil,nil,nil);
    laBitsPerPixel_.Caption :=
    IntToStr(GetDeviceCaps(DC,BITSPIXEL));
    laPlanes_.Caption :=
    IntToStr(GetDeviceCaps(DC,PLANES));
    case GetDeviceCaps(DC,BITSPIXEL) of
    8 : c := '256 цветов';
    15 : c := 'Hi-Color / 32768 цветов';
    16 : c := 'Hi-Color / 65536 цветов';
    24 : c := 'True-Color / 16 млн цветов';
    32 : c := 'True-Color / 32 бит';
    end;
    laColors_.Caption := c;
    DeleteDC(DC);
    end;

    Также будет интересна информация о памяти. Здесь нам поможет функция GlobalMemoryStatus,
    возвращающая информацию по объему
    физической и виртуальной памяти.

    // Информация о памяти.
    procedure TfmMain.MemoryInfo;
    var lpMemoryStatus : TMemoryStatus;
    begin
    lpMemoryStatus.dwLength := SizeOf(lpMemoryStatus);
    GlobalMemoryStatus(lpMemoryStatus);
    with lpMemoryStatus do begin
    laFreeMemory.Caption :=
    laFreeMemory.Caption +
    IntToStr(dwMemoryLoad) + '%';
    laRAM_.Caption := Format('%0.0f Мбайт',
    [dwTotalPhys div 1024 / 1024]);
    laFreeRAM_.Caption := Format('%0.3f Мбайт',
    [dwAvailPhys div 1024 / 1024]);
    laPF_.Caption := Format('%0.0f Мбайт',
    [dwTotalPageFile div 1024 / 1024]);
    laPFFree_.Caption := Format('%0.0f Мбайт',
    [dwAvailPageFile div 1024 / 1024]);
    end;
    end;

    Узнаем информацию о ОС. Функция GetWindowsDirectory вернет путь к каталогу,
    где установлена система, функция GetSystemDirectory - к
    системному каталогу. Для определения версии ОС воспользуемся функцией GetVersionEx.

    // Информация о Windows.
    procedure TfmMain.OSInfo;
    var PRes : PChar;
    Res : word;
    BRes : boolean;
    lpVersionInformation : TOSVersionInfo;
    c : string;
    begin
    // Каталог, где установлена Windows
    PRes := StrAlloc(255);
    Res := GetWindowsDirectory(PRes, 255);
    if Res > 0 then laWinDir_.Caption :=
    StrPas(PRes);
    // Системный каталог Windows
    Res := GetSystemDirectory(PRes, 255);
    if Res > 0 then laSysDir_.Caption :=
    StrPas(PRes);
    // Имя ОС
    lpVersionInformation.dwOSVersionInfoSize :=
    SizeOf(TOSVersionInfo);
    BRes := GetVersionEx(lpVersionInformation);
    if BRes then
    with lpVersionInformation do case dwPlatformId of
    VER_PLATFORM_WIN32_WINDOWS :
    if dwMinorVersion=0 then c := 'Windows 95'
    else c := 'Windows 98';
    VER_PLATFORM_WIN32_NT : c := 'Windows NT';
    VER_PLATFORM_WIN32s : c := 'Win 3.1 with Win32s'
    end;
    laVersion_.Caption := c;
    // Дата создания BIOS-а
    if c='Windows NT' then BIOSInfo('NT') else BIOSInfo('95');
    end;

    В предыдущем отрывке программы внимательный читатель заметил вызов функции
    BIOSInfo с параметром, характеризующем текущую ОС.
    Опишем эту функцию. Важно отметить, что способ получения информации о дате
    BIOS различен. Для NT получим информацию из реестра, а для
    Windows 95/98 из соответствующего участка памяти. Эти два способа взаимоисключаемы,
    так как у Windows 95/98 нет соответствующего раздела
    реестра, а прямой доступ к памяти в NT невозможен.

    // Информация о дате создания BIOS-а.
    procedure TfmMain.BIOSInfo(OS : string);
    var p : pointer;
    s : string[255];
    begin
    if OS='NT' then begin with TRegistry.Create do
    try RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly
    ('HARDWARE\DESCRIPTION\System')
    then laBIOSDate_.Caption :=
    ReadString('SystemBiosDate')
    finally Free;
    end;
    end
    else try
    s[0] := #8;
    p := Pointer($0FFFF5);
    Move(p^,s[1],8);
    laBIOSDate_.Caption :=
    copy(s,1,2) + '/' + copy(s,4,2) + '/' +copy (s,7,2);
    except laBIOSDate_.Caption := 'XX.XX.XXXX';
    end;
    end;

    Рассмотрим функцию SystemParametersInfo, которая позволяет управлять
    некоторыми настройками системы. Область применения данной функции
    для NT и Windows 95/98 различна. Умышленно выберем некоторую общую часть для обеих систем.

    // Информация о параметрах
    procedure TfmMain.ParametersInfo;
    var Bl : boolean;
    begin
    // Разрешен ли PC Speaker
    SystemParametersInfo(SPI_GETBEEP,0,@Bl,0);
    cbSpeaker.Checked := Bl;
    // Активен ли хранитель экрана
    SystemParametersInfo
    (SPI_GETSCREENSAVEACTIVE,0,@Bl,0);
    cbScreenSaverActive.Checked := Bl;
    // Интервал вызова хранителя экрана
    SystemParametersInfo
    (SPI_GETSCREENSAVETIMEOUT,0,
    @ScreenSaveTimeOut,0);
    // Настройки клавиатуры
    SystemParametersInfo
    (SPI_GETKEYBOARDDELAY,0,
    @KeyboardDelay,0);
    SystemParametersInfo
    (SPI_GETKEYBOARDSPEED,0,
    @KeyboardSpeed,0);
    end;

    // Отображение настроек
    procedure TfmMain.ShowSomeInfo;
    begin
    tbKeyboardDelay.Position := 3 - KeyboardDelay;
    tbKeyboardSpeed.Position := KeyboardSpeed;
    edSStimeOut.EditMask := IntToStr
    (ScreenSaveTimeOut div 60);
    end;

    Также позволим пользователю изменять и сохранять настройки системы по своему вкусу.
    Здесь также будем использовать функцию
    SystemParametersInfo. Для компонентов tbKeyboardSpeed, tbKeyboardDelay,
    cbScreenSaverActive, cbSpeaker, edSSTimeOut в ObjectInspector перейдем на
    закладку Events и изменим событие OnChange (для tbKeyboardSpeed, tbKeyboardDelay) ,
    OnClick (для cbScreenSaverActive, cbSpeaker) и OnExit для
    edSSTimeOut на Change. Таким образом, все пять вышеперечисленных компонент после
    изменений состояний передадут управление
    нижеприведенной процедуре.

    // Сохранение изменений параметров системы
    procedure TfmMain.Change(Sender: TObject);
    var Sen : TComponent;
    begin
    Sen := Sender as TComponent;
    // Вкл/Выкл PC Speaker-а.
    if (Sen.Name='cbSpeaker') and cbSpeaker.Checked
    then SystemParametersInfo
    (SPI_SETBEEP,1,nil,SPIF_UPDATEINIFILE)
    else SystemParametersInfo
    (SPI_SETBEEP,0,nil,SPIF_UPDATEINIFILE);
    // Вкл/Выкл активности хранителя экрана.
    if (Sen.Name='cbScreenSaver') and cbScreenSaverActive.Checked
    then SystemParametersInfo
    (SPI_SETSCREENSAVEACTIVE,1,nil,SPIF_UPDATEINIFILE)
    else SystemParametersInfo
    (SPI_SETSCREENSAVEACTIVE,0,nil,SPIF_UPDATEINIFILE);
    // Изменение значения задержки перед повтором с клавиатуры
    if (Sen.Name='tbKeyboardDelay') then SystemParametersInfo(
    SPI_SETKEYBOARDDELAY,3-tbKeyboardDelay.Position,nil,
    SPIF_SENDWININICHANGE);
    // Изменение значения скорости ввода с клавиатуры
    if (Sen.Name='tbKeyboardSpeed') then SystemParametersInfo(
    SPI_SETKEYBOARDSPEED,tbKeyboardSpeed.Position,nil,
    SPIF_SENDWININICHANGE);
    // Изменение интервала запуска хранителя экрана
    if (Sen.Name='edSSTimeOut') then SystemParametersInfo(
    SPI_SETSCREENSAVETIMEOUT,StrToInt(edSSTimeOut.Text)
    *60,nil,SPIF_UPDATEINIFILE);
    end;

    И ,наконец, вызовем все эти процедуры при создании формы.

    // Вызов информационных процедур при создании формы.
    procedure TfmMain.FormCreate(Sender: TObject);
    begin
    HardwareInfo;
    MemoryInfo;
    VideoInfo;
    ParametersInfo;
    ShowSomeInfo;
    OSInfo;
    end;

    Использование Delphi совместно c фунциями Microsoft Win32 API позволит программисту
    создать более функционально богатые и гибкие
    приложения.
     
    1 person likes this.
  8. drmist

    drmist Member

    Joined:
    8 Oct 2005
    Messages:
    307
    Likes Received:
    94
    Reputations:
    80
    KEZ
    Да, согласен, плохо написал.
    В ring0 это конечно SDT, а не WINAPI. :))))
     
  9. tclover

    tclover nobody

    Joined:
    13 Dec 2005
    Messages:
    741
    Likes Received:
    682
    Reputations:
    287
    Неплохой справочник по функциям си. Включает примеры кода. Показана переносимость на различные (хехе)платформы. Удобный поиск.
    http://www.megaupload.com/?d=B4CJT1TZ
    928 КБ