Автор Тема: Секреты дяди Бора  (Прочитано 7646 раз)

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« : 08 Января 2007, 15:40:07 »
Напишите какие вы знаете интересные кусочки кода, чтоб стандартными средствами добиться нестандартных эффектов в Делфях.

Например необычный вид радиобаттона и чекбокса можно добиться:

procedure TForm1.FormCreate(Sender: TObject);
begin
 SetWindowLong(CheckBox1.Handle,GWL_STYLE,
 GetWindowLong(CheckBox1.Handle,GWL_STYLE) or BS_PUSHLIKE);
end;

[ Указанное вложение недоступно ] [ Указанное вложение недоступно ]

Или добиться многострочности кнопки

procedure TForm1.FormCreate(Sender: TObject);
begin
 Button1.Caption:='Многострочная'#13'кнопка';
 SetWindowLong(Button1.Handle,GWL_STYLE,
 GetWindowLong(Button1.Handle,GWL_STYLE) or BS_MULTILINE);
end;

[ Указанное вложение недоступно ]
« Последнее редактирование: 15 Января 2007, 14:30:44 от Funtik »
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

fil

  • Гость
Секреты дяди Бора
« Ответ #1 : 08 Января 2007, 16:12:25 »
Вот по поводу второго поста... А при чем тут секреты??? Просто взял и в кэпшн завел символ перехода на след. строку... :) не спортивно...

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« Ответ #2 : 08 Января 2007, 16:14:21 »
Многие и этого не знают)))) Просто нужно было написать не секреты, а Фишки дяди Бора...

Кстати попозже выложу интересный исходничек, тока вот сам допишу и потестю... простой троян никому не повредит.

З.Ы. там не просто переход, смотри внимательно.
« Последнее редактирование: 08 Января 2007, 16:16:31 от Белочкин »
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #3 : 09 Января 2007, 09:46:53 »
И что прикольно в этих кодах?
Сделал из Check'a и Radio обычную кнопку.

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« Ответ #4 : 09 Января 2007, 10:44:58 »
программно эмулировать нажатие на кнопку можно, но
для этого нужно послать сообщение Windows. Это можно сделать так:

ТButton1.Perform(WM_LBUTTONDOWN, 0, 0);

Для того чтобы узнать версию твоего мастдая есть API функция GetVersionEx. Вот пример её использования:

var
 os : TOSVERSIONINFO;
begin
  GetVersionEx(os);
  if os.dwPlatformId = VER_PLATFORM_WIN32s then
     ShowMessage('Это Win32 для Windows 3.1');
  if os.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then
     ShowMessage('Это Win9x');
  if os.dwPlatformId = VER_PLATFORM_WIN32_NT then
     ShowMessage('Это NT');
end;


Программно нажимаем на Num Lock, Caps Lock и Scroll Lock
(работает только в Win9x)


Программно нажимаем на Num Lock

procedure TForm1.Button7Click(Sender: TObject);
Var KeyboardState: TKeyboardState; //состояние клавиатуры-массив
begin
GetKeyboardState(KeyboardState); //получвем состояние клавиатуры
//изменяем состояние клавиши с номером 144
KeyboardState[144]:=KeyboardState[144] xor 1;
SetKeyboardState(KeyboardState); //устанавливаем новое состояние клавиатуры
end;


Чтобы изменить состояние клавиши Caps Lock и Scroll Lock нужно в предыдущей процедуре изменить только одну строчку:

Для Caps Lock:
//изменяем состояние клавиши с
номером 20
KeyboardState[020]:=
KeyboardState[020] xor 1;


Для Scroll Lock:
//изменяем состояние клавиши с
номером 145
KeyboardState[145]:=
KeyboardState[145] xor 1;


Вот... в принципе мелочь но иногда может пригодиться. Кстати если кто-то хочет то могу описать как работать с реестром, делать автозапуск и прочую фигню.

ЗЫ. Ляль, такая умная, то напиши что-нить? или мы только из за угла пальцы веером, сопли пузырём?)
« Последнее редактирование: 09 Января 2007, 10:45:54 от Белочкин »
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #5 : 09 Января 2007, 11:51:54 »
Цитировать
ЗЫ. Ляль, такая умная, то напиши что-нить? или мы только из за угла пальцы веером, сопли пузырём?)
[snapback]16789[/snapback]
Не, Целкин.
Ой, прости, Белкин. Очепяталась.

Я как раз пальцы не гну. Просто спросила, как практическая польза от того что ты написал?
Просто лишний изврат.

Превращать ЧекБокс в Кнопку это изврат.

Да простят меня модераторы за оффтоп, Ляльками будешь своих девушек называть, когда им 5 рублей покажешь.
« Последнее редактирование: 09 Января 2007, 11:53:07 от alluvian »

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« Ответ #6 : 09 Января 2007, 13:15:52 »
Очепятывайся дальше, а какая польза... хм, да то что используя стандартные методы можно добиться нестандартных результатов... именно такие мелочи и являются залогом профессиональности программиста (есессно он должен знать много, лишь после этого увеличивает свои возможности за счёт таких мелочей). И большая просьба, не флудить у меня в теме. Показывай свю остроту, кто тебе заплатит 6 рублей, ибо мне даже 5 жалко на тебя)))) да откуда у бедного студента такие деньги?)

Продолжим:

Для того чтобы определить размер файла есть три способа. Первый - открыть файл и перейти в конец. Переход по файлу возвращает текущую позицию, а раз текущая позиция это конец, то это и будет размер:

var
 f:HFILE;
FileSize:Integer;
begin
// Открываем файл только для чтения (этого достаточно)
f:=_lopen(PChar(FileName), OF_READ);
// Получаем размер файла
FileSize :=_lseek(f,0, FILE_END);
//Закрываем файл
_lclose(f);
end;


Второй способ - через поиск, который так же возвращает размер.

var
 SearchRec:TSearchRec;
Begin
// Ищем файл
 if FindFirst(ExpandFileName(FileName),faAnyFile,SearchRec)=0
// Забираем размер
 FilrSize:=SearchRec.Size
//Закрываем поиск
 FindClose(SearchRec);
end;


Третий способ - это получить размер файла напрямую через функцию GetFileSize.

function GetFileSize(
hFile: THandle;
lpFileSizeHigh: Pointer)
: DWORD; stdcall;


В качестве первого параметра будет указатель на файл, а второй - указатель на число DWORD, куда засунут старший байт размера файла. Не пугайся, старший байт тебе врятли понадобиться, очень редко встречаются файлы больше 2 гига))))) если тока не файлики в ВоВке.... Поэтому можно смело использовать в качестве второго параметра nil.
« Последнее редактирование: 09 Января 2007, 13:16:21 от Белочкин »
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #7 : 09 Января 2007, 13:26:57 »
Хочу и флужу, милый.
Кто мне запретит?

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« Ответ #8 : 09 Января 2007, 13:55:58 »
Ляль, пиши по делу или вообще не пиши. Умнее будешь казаться. А то складывается мнение о тебе как о пустышке.
« Последнее редактирование: 09 Января 2007, 15:13:35 от Белочкин »
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

Оффлайн Белочкин

  • Завсегдатай
  • ****
  • Сообщений: 679
  • Карма: +0/-0
    • Просмотр профиля
    • http://www.inoi.ru
Секреты дяди Бора
« Ответ #9 : 05 Марта 2007, 08:38:53 »
Народ, у кого есть пример в исходниках как на делфях забацать таск манагер, или что нить аналогичное! :4:
Oh, my God! They killed Kenny! You`ve bastard!!!
У меня дома нет телевизора, поэтому я ем грибы и смотрю ковёр!

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #10 : 18 Апреля 2007, 13:02:08 »
Как вставить какую-нибудь программу внутрь EXE файла?

Пишем в блокноте RC-файл, куда прописываем все нужные нам программы, например:

ARJ EXEFILE C:\UTIL\ARJ.EXE

Компилируем его в ресурс при помощи Brcc32.exe.
Получаем RES-файл. Далее в тексте нашей программы:

implementation

{$R *.DFM}
{$R test.res} // Это наш RES-файл

procedure ExtractRes(ResType, ResName, ResNewName : String);
var Res : TResourceStream;
begin
Res := TResourceStream.Create(Hinstance, Resname, Pchar(ResType));
Res.SavetoFile(ResNewName);
Res.Free;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
// Записывает в текущую папку ARJ.EXE
ExtractRes('EXEFILE', 'ARJ', 'ARJ.EXE');
end;

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #11 : 18 Апреля 2007, 13:02:26 »
Впринципе эти команды можно запускать в меню "Выполнить..." (Run), кнопки Пуск. Ну а в Delphi они запускаются путём всем извесной команды winexec(Pchar('ABCD'),sw_Show);
где 'ABCD' - одна из следующих команд ...

"rundll32 shell32,Control_RunDLL" - Запустить Панель Управления

"rundll32 shell32,OpenAs_RunDLL" - Открыть диалог "Открыть Как ..." ('Open With...')

"rundll32 shell32,ShellAboutA Info-Box" - Открыть 'About Window Window'

"rundll32 shell32,Control_RunDLL desk.cpl" - Открыть диалог "Свойства: Экран" (Display Properties)

"rundll32 user,cascadechildwindows" - Выстроить все окна каскадно

"rundll32 user,tilechildwindows" - Свернуть все окна

"rundll32 user,repaintscreen" - Обновить Десктоп

"rundll32 shell,shellexecute Explorer" - Перезапустить Проводник

"rundll32 keyboard,disable" - Заблокировать Клавиатуру

"rundll32 mouse,disable" - Запретить мышку

"rundll32 user,swapmousebutton" - Поменять кнопки мыши

"rundll32 user,setcursorpos" - Установить Курсор в позицию (0,0)

"rundll32 user,wnetconnectdialog" - Показать диалог "Подключить сетевой диск" ('Map Network Drive')

"rundll32 user,wnetdisconnectdialog" - Показать диалог "Отключить сетевой диск" ('Disconnect Network Disk')

"rundll32 user,disableoemlayer" - Отобразить окно BSOD ('''(BSOD) = Blue Screen Of Death ''')

"rundll32 diskcopy,DiskCopyRunDll" - Показать диалог копирования диска

"rundll32 rnaui.dll,RnaWizard" - Запустить 'Internet Connection Wizard'
"rundll32 shell32,SHFormatDrive" - Запустить окно форматирования дискеты ('Format Disk (A)')

"rundll32 shell32,SHExitWindowsEx -1" - "Холодный" перезапуск Проводника

"rundll32 shell32,SHExitWindowsEx 1" - Выключить компьютер

"rundll32 shell32,SHExitWindowsEx 0" - Завершить сеанс текущего пользователя

"rundll32 shell32,SHExitWindowsEx 2" Быстрый перезапуск Windows9x

"rundll32 krnl386.exe,exitkernel" - Выход из Windows 9x без потверждения

"rundll rnaui.dll,RnaDial "MyConnect" - Запустить диалог 'Net Connection'

"rundll32 msprint2.dll,RUNDLL_PrintTestPage" - Выбор и печать тестовой страницы текущего принтера

"rundll32 user,setcaretblinktime" - Усатновить скорость мигания курсора

"rundll32 user, setdoubleclicktime" - Установить скорость двойного нажатия

"rundll32 sysdm.cpl,InstallDevice_Rundll" - Поиск устройств не PnP.


В меню Project..Import Type Library

Выберите Microsoft Shell Controls & Automation (version 1.0).

Нажмите Install...

На панели компонентов, в закладке ActiveX появится несколько компонентов. Перетащите на форму компонент TShell. После этого, например, можно всё минимизировать:

Shell1.MinimizeAll;

/*********************************************************************
  Так же в этом компоненте присутствует давольно много забавных примочек.
*********************************************************************/
procedure TForm1.Shell(sMethod: Integer);
begin
  case sMethod of
  0:
     //Минимизируем все окна на рабочем столе
   begin
     Shell1.MinimizeAll;
     Button1.Tag := Button1.Tag + 1;
   end;
  1:
     //Показываем диалоговое окошко Run
   begin
     Shell1.FileRun;
     Button1.Tag := Button1.Tag + 1;
   end;
  2:
     //Показываем окошко завершения работы Windows
   begin
     Shell1.ShutdownWindows;
     Button1.Tag := Button1.Tag + 1;
   end;
  3:
     //Показываем окно поиска файлов
   begin
     Shell1.FindFiles;
     Button1.Tag := Button1.Tag + 1;
   end;
  4:
     //Отображаем окно настройки времени и даты
   begin
     Shell1.SetTime;
     Button1.Tag := Button1.Tag + 1;
   end;
  5:
     //Показываем диалоговое окошко настройки интернета (Internet Properties)
   begin
     Shell1.ControlPanelItem('INETCPL.cpl');
     Button1.Tag := Button1.Tag + 1;
   end;
  6:
     //Предлагаем пользователю выбрать директорию из Program Files
   begin
     Shell1.BrowseForFolder(0, 'My Programs', 0, 'C:\Program Files');
     Button1.Tag := Button1.Tag + 1;
   end;
  7:
     //Показываем диалоговое окошко настройки панели задач
   begin
     Shell1.TrayProperties;
     Button1.Tag := Button1.Tag + 1;
   end;
   8:
     //Восстанавливаем все окна на рабочем столе
   begin
     Shell1.UndoMinimizeAll;
     Button1.Tag := 0;
   end;
  end; {case}
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Shell(Button1.Tag);
end;


Dronus

  • Гость
Секреты дяди Бора
« Ответ #12 : 23 Апреля 2007, 16:35:37 »
По моему вы страдаете дежавю.
Есть грамотный сайт посвященный различным проблемам, фишкам и прочим вкусностям http://www.sources.ru/delphi/index.html  
Там и любители и профи. и есть готовая подборка советов.

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #13 : 23 Апреля 2007, 16:46:50 »
У меня побольше коллекция чем там

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #14 : 23 Апреля 2007, 16:56:21 »
:1:  :1:  :1:  :1:  :1:

Ой не могу смешно. Романтик жжешь.

Ты хочешь сказать что у тебя он-лайн коллекция, где ты вводишь вопрос, а тебе кучу знатоков сразу ответ дают???


А вот такие ресурсы  sql.ru и delphikingdom.ru

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #15 : 23 Апреля 2007, 16:57:18 »
Нет, у меня около 3 гигов своей инфы, которую реально можно использовать.

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #16 : 23 Апреля 2007, 17:01:29 »
Цитировать
Нет, у меня около 3 гигов своей инфы, которую реально можно использовать.
[snapback]24151[/snapback]

Это безусловно хорошо. Но иногда проще, чем искать в 3 гигах нужную строчку, задать вопрос на форуме, где тебе толково ответят и разъяснят, если не понятно

Оффлайн Романтик

  • Продвинутый
  • *****
  • Сообщений: 1182
  • Карма: +33/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #17 : 23 Апреля 2007, 17:03:37 »
Инет переполнен гавном и повтором, одни и теже исходники на всех форумах, про статьи молчу, такое ощущение что все кинулись к "плавающей" реламе и как резудьтат завал полный...

Оффлайн alluvian

  • Девушка
  • Бывалый
  • **
  • Сообщений: 193
  • Карма: +0/-0
    • Просмотр профиля
Секреты дяди Бора
« Ответ #18 : 23 Апреля 2007, 17:05:01 »
Тут ты прав. Но на форумах, на которых обычно бываю, я нахожу все что мне надо.
И советы дают там толковые.