Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Арсенал форумистов, Выкладывайте свои работы! 
:(
    Опции темы
p0s0l
Дата 15.4.2004, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Не раз уже встречал случаи, когда кто-нибудь хотел выложить какие-то свои наработки в Delphi: модули, исходники, компоненты, может еще что-то. Предлагалось создавать отдельный раздел, но пока не понятно, будет ли от этого толк. Пока что создаю эту тему. В дальнейшем же будет видно насчёт отдельного раздела исходников по тому, какая тут будет активность, и как к этому отнесётся Admin.

Единственное правило - в этой теме не флеймить, тут оставлять только краткое описание модулей и ссылки к ним.

Можно скинуть мне на мыло (кнопка E-Mail под моим постом) файл, и я его прикреплю к вашему сообщению при первой же возможности...



--------------------
С уважением, г-н Посол.
PM   Вверх
ДЫМ
Дата 23.9.2004, 02:45 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 6.1.2004

Репутация: 8
Всего: 8



Компонент LSVGauge является альтернативой стандартным
компонентам Gauge и ProgressBar
При помощи этого компонента можно создавать графические индикаторы с
оригинальным визуальным оформлением:
1) управление цветом частей текста на полосе и на фоне;
2) заполнение фона и полосы изображениями;
3) установка прозрачности заливки;
4) произвольная форма индикатора;
5) полоса с краями;
6) вывод целых блоков (в стиле ProgressBar, причем конфигурация
блоков может быть практически любой);
7) режим "бегущей полосы", когда число повторений цикла неизвестно
(возможность анимации полосы, титры на фоне см. пример);
8) простейшая трехмерная круговая диаграмма (Kind=Pie3D);
9) индикатор в стиле Partition Magic (текст центруется по текущей ширине
(высоте) полосы)
Может пригодиться тем, кто использует в своих приложениях сменные шкуры.


http://www.lsvhost.narod.ru/LSVGauge.zip
PM MAIL WWW   Вверх
p0s0l
Дата 28.9.2004, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Модератор: Прошу не флеймить и не оффтопить в этой теме! Левые посты в скоре будут удалены. Все личные сообщения пишите через PM.
Также прошу не выкладывать огроменные тексты прямо тут - либо присоединяйте файл к ответу, либо давайте ссылку на исходник! Иначе неудобно просматривать тему!
Кто не может присоединить файл к ответу (т.е. не является участником клуба), или не знает как выложить в инете свой файл - просто пока запостите в эту тему пост про свой исходник и по мылу вышлите мне сам исходник - я его присоединю к вашему посту при первой же возможности.
Чтобы написать мне письмо, жмите кнопку "E-Mail" внизу под моим постом...



--------------------
С уважением, г-н Посол.
PM   Вверх
Akella
  Дата 1.10.2004, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



Отправка файлов в корзину
в секцию private
Код
procedure Recycle1(const FileNames:TStrings;Wnd:HWND=0);

в секцию USES
Код
ShellAPI


Код
procedure TForm1.Recycle1(const FileNames:TStrings;Wnd:HWND=0);
var SHF:_SHFileOpStructA;
Name:PChar;
SizeName:Cardinal;
u:integer;
begin
For u:=0 to FileNames.Count-1 do
begin
SizeName:=Length(FileNames.Strings[u])+2;
GetMem(Name,SizeName);
FillChar(Name^,SizeName,0);
StrCopy(Name,PChar(FileNames.Strings[u]));
FillChar(SHF,SizeOf(SHF),0);
with SHF do
begin
 if Wnd=0 then Wnd:=Application.Handle;
 wFunc:=FO_DELETE;
 pFrom:=Name;
 fFlags:=FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_NOCONFIRMATION;
end;
try
SHFileOperation(SHF);
except
end;
FreeMem(Name,SizeName);
end;
end;


использование
Код
Recycle1(od1.Files, Handle);
od1-TOpenDialog(закладка Dialogs)

Это сообщение отредактировал(а) dsergey - 1.10.2004, 09:44
PM MAIL   Вверх
Girder
Дата 11.10.2004, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



 Универсальная функция для обращения к любым экспортируем функциям DLL, внутри адресного пространства чужого процесса.

При этом возвращает как результат работы функции так и обработает все указатели на данные (т.е. к примеру в function ImageList_GetIconSize(ImageList: HIMAGELIST; var CX, CY: Integer): Bool - также вернет CX и CY).

Идею обращения к функции, внутри чужого процесса, предложил p0s0lно к сожалению код был реализован только под одну функцию.
 
Функция:
Код
function InjectPID_DLL(PID:Cardinal;LibHandle:HMODULE;fName:String;
                       CountParam:integer;Params:TParams;
                       var Res:Cardinal):Boolean;
{Универсальная функция для обращения к любым экспортируем функциям DLL,
внутри адресного пространства чужого процесса.

***При этом возвращает как результат работы функции так
  и обработает все указатели на данные (т.е. к примеру
  в function ImageList_GetIconSize(ImageList: HIMAGELIST; var CX, CY: Integer): Bool - также вернет CX и CY).

*** Идея инъекции: p0s0l; Оптимизированный вариант: Girder ***
Входные данные InjectPID_DLL:
- PID - идентификатор чужого процесса;
- LibName - Имя(при необходимости плюс путь) вызываемой DLL;
- fName - Имя экспортируемой функции DLL;
- CountParam - количество параметров;
- Params - параметры вызываемой функции DLL
 - Params[i].Param - Значение или указатель на данные;
 - Params[i].SizePointer - размер данных на который указывает указатель.
                           Если он равен нулю, то Params.Param - значение(иначе указатель на данные);
- Res - результат работы функции DLL
Выходные данные InjectPID_DLL:
Вслучаи успешного обрашения возвращается True иначе False;}

PS: Писал ночью...  smile т.ч. могут быть ошибки  smile (если найдете - пишите в PM).

В архиве:
Inject.pas - сама функция
Example.pas -Пример использования:
- Выдираем в WinXP иконки из трея и добавляем их в ImageList и отображаем их в TreeView... 

13 октября 2006: Поправил пример smile

Присоединённый файл ( Кол-во скачиваний: 126 )
Присоединённый файл  Girder2.zip 3,47 Kb


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Pathfider
Дата 11.10.2004, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.7.2004
Где: все там же

Репутация: -1
Всего: 1



Накатал тут програмку от нечего делать. Можно использовать в качестве дневника или для ведения конфеденциальных записей. Применял свой алгоритм шифрования. Работает везде (по идее), тестировалась на WinXP SP2. Если будут какие либо предложения или замечания, пожалуюста напишите!

Присоединённый файл ( Кол-во скачиваний: 271 )
Присоединённый файл  Diry.zip
--------------------
Trust is a weakness
PM MAIL   Вверх
p0s0l
Дата 12.10.2004, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



И я выложу (раз уж доделал) свою версию smile...
В модуле две основых функции:
RemoteCall и AsyncRemoteCall - вторая асинхронная (работа потока не останавливается), результатов не возвращает.
Код
function RemoteCall (PID : DWORD; const FuncName, LibName : string; Params : array of TCallParam) : DWORD;
PID - ID процесса, в контексте которого будет вызвана функция
FuncName - имя функции, LibName - имя DLL
Params - параметры вызываемой функции. Передача параметров осуществляется двумя способами:
ByVal - по значению, и ByRef - по ссылке
Функция возвращает результат вызова функции в чужом процессе.
Пример 1:
Код
RemoteCall (GetCurrentProcessID, 'MessageBoxA', 'user32.dll', [ByVal(0), ByVal('Hello!'), ByVal('Caption'), ByVal(MB_ICONINFORMATION)]);

Пример 2:
Код
var s : AnsiString;
begin
 SetLength(s, 1024);
 RemoteCall (<ProcessID>, 'GetWindowTextA', 'user32.dll', [ByVal(Handle), ByRef(s), ByVal(1024)]);
 Form1.Caption := s;
end;


Присоединённый файл ( Кол-во скачиваний: 149 )
Присоединённый файл  PSL_RemoteCall.zip


--------------------
С уважением, г-н Посол.
PM   Вверх
Dr Smth
Дата 28.10.2004, 14:36 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.10.2004
Где: New Podrezkovo

Репутация: нет
Всего: 1



При составлении программ часто возникает ситуация, когда нужно что-нибудь подсчитать, и вывести результат в виде: ЧИСЛО + СЛОВО. Причём СЛОВО обозначает то, что, собственно, и нужно подсчитать. Например, нужно вывести число строк в списке TListBox в формате: 'N слов'. Благодаря особенностям великого и могучего русского языка и тому, что число N заранее неизвестно, может меняться и вычисляется самой программой, заранее также неясно в каком падеже нужно ставить следующее за числом слово.

Если плюнуть на это и написать просто: N + ' слово', то при расчётах получим малограмотные конструкции типа '17 слово' и '3 слово'.

Между тем избавиться от данной ситуации довольно просто. Я тут поразмыслил, и написал функцию, выбирающую из трёх падежей нужный. Возможно не самый оптимальный вариант, но всё же... Для более детального ознакомления смотрите комментарии в коде.

Код
program FndCase;

{$APPTYPE CONSOLE}

uses
 SysUtils;


{Функция возвращает строку, содержащую введённое число плюс введённое сцуществительное
в падеже, согдасующимся с этим числом (порядковым числительным)

Передаваемые параметры:

 i : Integer - целое число, представляющее нужное порядковое числительное;
 e_ip : String - именительный пажед единственного числа вводимого существительного
                 (кто? что?);
 e_rp : String - родительный падеж единственного числа вводимого существительного
                 (кого? чего?);
 mn_rp : String - родительный падеж множественного числа вводимого существительного
                 (кого? чего?);

Результатом является выбор между этих трёх вариантов в соответствии с порядковым
числительным}

function ChooseCase (i : Integer; e_ip, e_rp, mn_rp: String): String;
 var
   end_w : Integer;
 begin
   end_w := StrToInt(Copy(IntToStr(i), Length(IntToStr(i)) - 1, 2));
    if (end_w > 10) and (end_w < 20)
     then
       begin
        Result := IntToStr(i) + ' ' + mn_rp;
       end
     else
       begin
        end_w := StrToInt(Copy(IntToStr(end_w), Length(IntToStr(end_w)), 1));
        case end_w of
        0 : Result := IntToStr(i) + ' ' + mn_rp;
        1 : Result := IntToStr(i) + ' ' + e_ip;
        2..4 : Result := IntToStr(i) + ' ' + e_rp;
        5..9 : Result := IntToStr(i) + ' ' + mn_rp;
        end;
       end;
 end;

begin

 //Несколько примеров
 
 Randomize;
 WriteLn(ChooseCase(Random(1000), 'slovo', 'slova', 'slov'));
 WriteLn(ChooseCase(Random(1000), 'bukva', 'bukvy', 'bukv'));
 WriteLn(ChooseCase(Random(1000), 'programmist', 'programmista', 'programmistov'));
 WriteLn(ChooseCase(Random(1000), 'Andrey', 'Andreya', 'Andreev'));
 WriteLn(ChooseCase(Random(1000), 'Svetlana', 'Svetlany', 'Svetlan'));
 WriteLn(ChooseCase(Random(6000000000), 'chelovek', 'cheloveka', 'chelovek'));
 ReadLn;
end.

PM MAIL WWW   Вверх
Girder
Дата 12.11.2004, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Функция поворота изображения на заданный угол через DIB.

Функция:
Код
function HBitMapRotate(BitMap:HBitMap;Angle:Extended;var X_Y:TPoint):HBitmap;
{Входные данные: BitMap - Источник рисунка
                Angle - Угол на который будет повернут BitMap
Выходные данные: HBitMapRotate - Идентификатор точечного повернутого рисунка
                 X_Y - Размеры повернутого изображения}


В архиве: Сама функция и пример использования

Это сообщение отредактировал(а) Girder - 12.11.2004, 23:56

Присоединённый файл ( Кол-во скачиваний: 133 )
Присоединённый файл  rGirder.zip


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
p0s0l
Дата 19.11.2004, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



С помощью этого модуля можно прочитать или записать в файл, который уже открыт, даже эксклюзивно! (Но файл и не обязательно должен быть открыт smile )
Но:
* работает в NT (тестил в XP, в 2k - не тестил)
* нужны права администратора
* к файлу должен быть разрешен доступ FILE_READ_ATTRIBUTES (единственное, что не получилось пока прочитать - это файлы подкачек)
* тестил на: NTFS, FAT32 (FAT16 теоретически должен поддерживаться)
* при записи нужно учитывать работу кэша...
* также, следует понимать, что размер файла нельзя изменить, т.е. дописать что-то в конец файла, или обрезать файл...

В модуле 3 функции (названия говорят сами за себя):
Код
function DF_Read (const FileName : string; Offset, Size : Cardinal; Buf : Pointer) : Boolean;
function DF_Write (const FileName : string; Offset, Size : Cardinal; Buf : Pointer) : Boolean;
function DF_GetFileSize (const FileName : string) : Int64;
FileName - имя файла
Offset - смещение внутри файла в байтах, откуда будет происходить чтение/запись
Size - размер данных для записи/чтения (в байтах)
Buf - указатель на буфер

В архиве лежит этот модуль и пример. В примере .exe сам себя изменяет - считается количество запусков программы...

Присоединённый файл ( Кол-во скачиваний: 320 )
Присоединённый файл  DFA.ZIP


--------------------
С уважением, г-н Посол.
PM   Вверх
RA
  Дата 22.11.2004, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Пример реализации Русско-Английского KeyLoggera Средствами WinApi


Присоединённый файл ( Кол-во скачиваний: 287 )
Присоединённый файл  xKeyLoger.rar
PM   Вверх
RA
Дата 26.11.2004, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



* Пример внедрения длл в чужой процесс
* Пример перехвата функций Api:

FindNextFile...,
RegEnumValue...,
FormatMessage...,
WinExec...,
ShellExecute...,
CreateProcess... .

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

Присоединённый файл ( Кол-во скачиваний: 428 )
Присоединённый файл  ApiHook.rar
PM   Вверх
BSV_Sergey
Дата 26.11.2004, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 19.11.2004
Где: г. Москва

Репутация: нет
Всего: 3



Привет всем.
Пока не разобрался как добавить к сообщению файлы.
Если кто-нибудь озадачится вызовом отчетов Crystal Reports из приложения без установленного Crystal-а то для этого необходимо:
1. К проекту подключить модуль CRDelphi.pas,содержащий описание функций и типов для работы с Crystal Report Engine API. Модуль включен в дистрибутив CR 9.0 \\Tools\Developers
2. Библиотека содержащая функции CR API – crpe32.dll
3. Кроме того для работы программы без Crystal-а необходимы следующие библиотеки: crqe.dll, Implode.dll, querybuilder.dll, ufmanager.dll и также библиотеки используемые отчетом для подключения к источнику данных.
4. Так же необходимо внести изменения в реестр, чтобы программа могла использовать функции Crystal Report Engine. В разделы:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{BDE2D224-27E0-4925-A4E1-F5F38A191ABC}]
[HKEY_CLASSES_ROOT\CLSID\{BDE2D224-27E0-4925-A4E1-F5F38A191ABC}]
5. Пример использования функций CR API в программе (Пример урезанный):

Код

if PEOpenEngine then
 begin
   nPrintJob := PEOpenPrintJob(PChar(sReportName));//Путь и имя файла отчета
   if nPrintJob = 0 then
       ShowMessage('Error Open Report')
   else
     begin
       //Получаем информацию о параметрах соединения отчета с БД
       vLogOnInfo.StructSize := PE_SIZEOF_LOGON_INFO;
       PEGetNthTableLogOnInfo(nPrintJob,0,vLogOnInfo);
       //Присваиваем необходимые значения для соединения
       vLogOnInfo.ServerName := '';
       StrPCopy(vLogOnInfo.ServerName , sServerName);//Имя сервера БД для отчета
       vLogOnInfo.Password := '';
      StrPCopy(vLogOnInfo.Password , sPassword);//Пароль для пользователя БД
       vLogOnInfo.DatabaseName := '';
      StrPCopy(vLogOnInfo.DatabaseName , sDBName);//Имя БД
       //Передаем параметры в отчет  
       if not PESetNthTableLogOnInfo(nPrintJob,0,vLogOnInfo,true) then
         ShowMessage('Mistake of transfer parameters of connection.');
        //Парамерты окна просмотра отчета
       PEOutputToWindow(nPrintJob, PChar(sRepPuth), 0,0,0,0,  WS_MAXIMIZE+ WS_MINIMIZEBOX+WS_MAXIMIZEBOX+WS_SYSMENU,0);
           vViewerOption.hasGroupTree := 1;
           vViewerOption.canDrillDown := 1;
           vViewerOption.hasNavigationControls := 1;
           vViewerOption.hasCancelButton := 1;
           vViewerOption.hasPrintButton := 1;
           vViewerOption.hasExportButton := 1;
           vViewerOption.hasZoomControl := 1;
           vViewerOption.hasCloseButton := 1;
           vViewerOption.hasProgressControls := 1;
           vViewerOption.hasSearchButton := 1;
           vViewerOption.hasPrintSetupButton := 1;
           vViewerOption.hasRefreshButton := 0;
          //Применение параметров окна просмотра
           vViewerOption.StructSize := PE_SIZEOF_WINDOW_OPTIONS;
           PESetWindowOptions(nPrintJob,vViewerOption);
        End;
       PEStartPrintJob(nPrintJob, true);
     end;
 end
else
   ShowMessage('CR Report Engine not started');



6. !!!!! ВАЖНО. При завершении работы приложения или во время его работы (зависит от того, сколько отчетов пользователь может просматривать одновременно) необходимо организовать выполнение процедуры PECloseEngine, иначе выдастся ошибка. При этом PECloseEngine нужно вызвать столько раз, сколько раз был запущен PEOpenEngine.

Я постарался сделать описание крадким, если данная тема интересна и нужна подробная информация, пишите на E-mail.

Это сообщение отредактировал(а) BSV_Sergey - 2.12.2004, 14:24
PM MAIL   Вверх
Alex
Дата 30.11.2004, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Получение длинного пути из короткого:

Код

function ShortToLongFileName(FileName: string): string;
var
 KernelHandle: THandle;
 FindData: TWin32FindData;
 Search: THandle;
 GetLongPathName: function(lpszShortPath: PChar; lpszLongPath: PChar;
                           cchBuffer: DWORD): DWORD; stdcall;
begin
 KernelHandle := GetModuleHandle('KERNEL32');
 if KernelHandle <> 0 then
   @GetLongPathName := GetProcAddress(KernelHandle, 'GetLongPathNameA');

 // Использю GetLongPathName доступную в windows 98 и выше чтобы
 // избежать проблем доступа к путям UNC в системах NT/2K/XP
 if Assigned(GetLongPathName) then begin
   SetLength(Result, MAX_PATH + 1);
   SetLength(Result, GetLongPathName(PChar(FileName), @Result[1], MAX_PATH));
 end
 else begin
   Result := '';

   // Поднимаюсь на одну дирректорию выше от пути к файлу и запоминаю
   // в result.  FindFirstFile возвратит длинное имя файла полученное
   // из короткого.
   while (True) do begin
     Search := Windows.FindFirstFile(PChar(FileName), FindData);

     if Search = INVALID_HANDLE_VALUE then Break;

     Result := String('\') + FindData.cFileName + Result;
     FileName := ExtractFileDir(FileName);
     Windows.FindClose(Search);

     // Нахожу имя диска с двоеточием.
     if Length(FileName) <= 2 then Break;
   end;

   Result := ExtractFileDrive(FileName) + Result;
 end;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Girder
Дата 3.12.2004, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



OpenThread - Функция получения дескриптора потока по его идентификатору для Win 9X,ME,WinNT All.

PS: данная функция присутствует только в старших версиях NT и ME, в младших версиях есть NTOpenThread. При этом в Win 9X - её вообще нет... smile

Функция:
Код

const
 THREAD_TERMINATE               =$0001;
 THREAD_SUSPEND_RESUME          =$0002;
 THREAD_GET_CONTEXT             =$0008;
 THREAD_SET_CONTEXT             =$0010;
 THREAD_SET_INFORMATION         =$0020;
 THREAD_QUERY_INFORMATION       =$0040;
 THREAD_SET_THREAD_TOKEN        =$0080;
 THREAD_IMPERSONATE             =$0100;
 THREAD_DIRECT_IMPERSONATION    =$0200;
 THREAD_ALL_ACCESS              = STANDARD_RIGHTS_REQUIRED or
                                  SYNCHRONIZE or $3FF; // == $1F03FF;

function OpenThread(dwDesiredAccess:DWord;bInheritHandle:Bool;dwThreadId:DWord):Cardinal;
//Функция получения дескриптора потока по его идентификатору для Win 9X,ME,WinNT All
//dwDesiredAccess - флаги доступа к потоку
//bInheritHandle - флаг наследования дескриптора
//dwThreadId - идентификатор потока


В примере рассматривается алгоритм поиска потока отвечающий за панель задач. Основан он на том что если поток остановить(а для этого мы должны получить дескриптор потока с соответствующими правами) и обратится к его любым методам и свойствам из другого потока, то поток инициатор обращения тоже "как бы уснет"... smile. Для этого используется SendMessage(TrayWnd,SW_Show,0,0) - которая будет ждать результат smile обработки сообщения... smile

В архиве: сама функция и пример её использования... smile

Это сообщение отредактировал(а) Girder - 3.12.2004, 13:27

Присоединённый файл ( Кол-во скачиваний: 110 )
Присоединённый файл  OpenThread.zip


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Dr Smth
Дата 18.12.2004, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.10.2004
Где: New Podrezkovo

Репутация: нет
Всего: 1



Модуль позволяющий, любые конвертации между темперетурными шкалами Цельсия, Фаренгейта, Ренкина и Реомюра.

Всего 20 функций, названия которых гроворят сами за себя:

Код

function CToK (Celsium_degree: Extended): Extended; // - Перевод градусов Цельсия в Кельвины и т. д.
function KToC (Kelvin_degree: Extended): Extended;
function FToC (Farengheit_degree : Extended): Extended;
function CToF (Celsium_degree : Extended) : Extended;
function RenToC (Renkin_degree : Extended): Extended;
function CToRen (Celsium_degree : Extended) : Extended;
function ReoToC (Reomur_degree : Extended): Extended;
function CToReo (Celsium_degree : Extended) : Extended;
function KToF (Kelvin_degree: Extended): Extended;
function FToK (Farengheit_degree: Extended): Extended;
function KToRen (Kelvin_degree: Extended): Extended;
function RenToK (Renkin_degree: Extended): Extended;
function KToReo (Kelvin_degree: Extended): Extended;
function ReoToK (Reomur_degree: Extended): Extended;
function RenToF (Renkin_degree: Extended): Extended;
function FToRen (Farengheit_degree: Extended): Extended;
function RenToReo (Renkin_degree: Extended): Extended;
function ReoToRen (Reomur_degree: Extended): Extended;
function FToReo (Farengheit_degree: Extended): Extended;
function ReoToF (Reomur_degree: Extended): Extended;



Присоединённый файл ( Кол-во скачиваний: 103 )
Присоединённый файл  Temperature.zip
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2047 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.