Современные решения

для защиты Windows приложений

и восстановления исходного кода

Обсуждение программирования на Delphi в конференции ru.delphi


Hет звука, а должен быть.

From: "Anatoly Podgoretsky" <anatoly [@] podgoretsky.com>


Hello, Igor Dolgov!
You wrote to All on Sun, 10 Jul 2005 22:16:34 +0400:

ID> PlaySound('SND.WAV', 0, SND_ASYNC or SND_PURGE);

ID> Под Вин2000 все в порядке, а под Вин98 тишина,

ID> хотя в хелпе написано, что должно работать даже под Вин95.

ID> Почему не работает?


Что такое 'SND.WAV'

--
С уважением,
Анатолий Подгорецкий

* Origin: Demos online service (2:5020/400)

Отладка

Пpивет, Yura!

Вcк Июл 10 2005 18:40, Yura Balyuk отписал к Slava Antonov следyющее:

SA>> По твоему ошибка, это когда программа не компилится? А то что она

SA>> валится при нажатии кнопки, например, это не ошибка, а фича такая,

SA>> да?


YB> это "последствие игнорирования предупреждения"! о как! ;-)


Кстати запросто. Так что зря смеешься.

Удачи тебе, Yura.
* Origin: Каждой тваре по NetWare. (2:5020/2013.20)

Re: марка проца, частота и свободная память

Доброго времени суток, Slava!

03 Jul 05 5:54, Slava Antonov -> Andrew Cherepanoff:


SA> См. фак и гугль.


Конкретизируйте, плз. Куда конкретно?

Страшно? Я и не так умею!!! Всего.
Andrew
* Origin: Да куда он денется... С подводной-то лодки... (2:5055/168.29)

Re: запустить процесс из службы

From: "Andrey Ryazanov" <rash [@] northnet.ru>


"Andrew O. Shadoura" <Andrew.O.Shadoura [@] p25.f143.n450.z2.fidonet.org> wrote in message news:2584418603 [@] p25.f143.n450.z2.ftn...

> Куда копать?


Потому что у сервиса в общем виде нет своего десктопа. Копать в OpenDesktop, SetProcessWindowStation и иже с ними, далее по ссылкам. В MSDN есть статья "Interacting with the User in a Service" вот из нее начало: For a noninteractive service application to interact with the user, it must open the user's window station ("WinSta0") and desktop ("Default"). By default, only the logged-on user and service applications running in the LocalSystem account are granted access to the user's window station and desktop. This means that services running in other accounts must either impersonate the user when opening the interactive window station and desktop, or have access granted to those accounts by the user.

Если не найдешь, пиши aust (тут собака) rin.ru - вышлю.

* Origin: MTU-Intel ISP (2:5020/400)

Re: Hет звука, а должен быть.

From: "Andrey Ryazanov" <rash [@] northnet.ru>


"Igor Dolgov" <Igor.Dolgov [@] p20.f2013.n5020.z2.fidonet.org> wrote in message news:1121037400 [@] p20.f2013.n5020.z2.ftn...

> Почему не работает?


SND_FILENAME

* Origin: MTU-Intel ISP (2:5020/400)

уничтожение пpоцесса

Пpиветствую, All

1.Как осуществить сабж, зная только его имя?

2.Как pешить такую пpоблему:
Пpоэкт состоит из 2х фоpм и 2х потоков(Thread).
Пpичем потоки создаются и уничтожаются пpактически в случайном поpядке.

Если завеpшить пpогу пpи помощи Application.Terminate, то если ни один поток еще не был создан, то всё в поpядке.

Если завеpшать потоки пpи помощи Thread.Terminate, то пpи завешении пpоги вылетает ошибка:
>Exeption EOSError in module Project1.exe at 0000CD62

>System Error. Code: 1440

>Hедопустимый дескpиптоp окна.


Если же после обpаботки потока осуществлять Thread.Destroy, то пpи Application.Terminate безо всяких ошибок фоpма закpывается, а пpоцесс остается в памяти на неопpеделенное вpемя.

Всего хоpошего, All.
* Origin: Чем больше воТки, тем лучше (2:5057/19.127)

Высота TComboBox

* Originally in RU.DELPHI
Приятного тебе дня и незабываемой ночи, Anton!

Sunday July 10 2005, Anton Ivlenov writes to All:
AI> А есть ли возможность уменьшить высоту TComboBox (всего-то на один

AI> пиксел), не изменяя pазмеpа его шpифта? А то для 8го шpифта четко 22

AI> пиксела, а мне 21 надо.


можно попытаться положить его в фрейм высотой в 21 пиксел. тогда этот фрейм просто будет обрезать его изображение

Bulat, mailto:bulat_z-AT-mail.ru

* Origin: Пикап - лучший способ познакомиться с удовольствием ; (2:5093/4.126)

Re: уничтожение пpоцесса

From: "Slava Antonov" <deadbeef [@] so.yandex.ru>


Hello Roman Alexeev, you wrote:

> 1.Как осуществить сабж, зная только его имя?


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

--
Всего хорошего, Слава.
slava.fateback.com
* Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003 [@] fidonet)






Re: Как отловить начало работы с удалённым подключением?

From: "Slava Antonov" <deadbeef [@] so.yandex.ru>


Hello Oleg Lazukin, you wrote:

> Мне нужно при начале работы с удалённым соединением запустить

> программу. Это не возможно, да?


RasConnectionNotification

> Сразу говорю - варианты с программами, висящие в памяти и

> отлавливающие появление определённых окон или самих соединений не

> предлагать за их очевидностью.


Вам шашечки, или ехать?

--
Всего хорошего, Слава.
slava.fateback.com
* Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003 [@] fidonet)






Re[2]: марка проца, частота и свободная память

From: "Slava Antonov" <deadbeef [@] so.yandex.ru>


Hello Andrew Cherepanoff, you wrote:

function GetCPUSpeed: Double;
const DelayTime = 500;
var TimerHi : DWORD;
TimerLo : DWORD;
PriorityClass : Integer;
Priority : Integer;
begin
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);
SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread, THREAD_PRIORITY_TIME_CRITICAL);
Sleep(10);
asm
DW 310Fh // rdtsc
MOV TimerLo, EAX
MOV TimerHi, EDX
end;
Sleep(DelayTime);
asm
DW 310Fh // rdtsc
SUB EAX, TimerLo
SBB EDX, TimerHi
MOV TimerLo, EAX
MOV TimerHi, EDX
end;
SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000.0 * DelayTime);
end;

// Usage ...

LabelCPUSpeed.Caption := Format('CPU speed: %f MHz', [GetCPUSpeed]);

Взято с Vingrad.ru forum.vingrad.ru



function GetCPUSpeed: real;

function IsCPUID_Available: Boolean; assembler; register;
asm
PUSHFD { прямой доступ к флагам невозможен, только через стек }
POP EAX { флаги в EAX }
MOV EDX,EAX { сохраняем текущие флаги }
XOR EAX,$200000 { бит ID не нужен }
PUSH EAX { в стек }
POPFD { из стека в флаги, без бита ID }
PUSHFD { возвращаем в стек }
POP EAX { обратно в EAX }
XOR EAX,EDX { проверяем, появился ли бит ID }
JZ [@] exit { нет, CPUID не доступен }
MOV AL,True { Result=True }
[@] exit:
end;

function hasTSC: Boolean;
var
Features: Longword;
begin
asm
MOV Features,0 { Features = 0 }

PUSH EBX
XOR EAX,EAX
DW $A20F
POP EBX

CMP EAX,$01
JL [@] Fail

XOR EAX,EAX
MOV EAX,$01
PUSH EBX
DW $A20F
MOV Features,EDX
POP EBX
[@] Fail:
end;

hasTSC := (Features and $10) <> 0;

end;

const
DELAY = 500;
var
TimerHi, TimerLo: Integer;
PriorityClass, Priority: Integer;
begin
Result := 0;
if not (IsCPUID_Available and hasTSC) then Exit;
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriority(GetCurrentThread,
THREAD_PRIORITY_TIME_CRITICAL);

SleepEx(10, FALSE);

asm
DB $0F { $0F31 op-code for RDTSC Pentium инструкции }
DB $31 { возвращает 64-битное целое (Integer) }
MOV TimerLo,EAX
MOV TimerHi,EDX
end;

SleepEx(DELAY, FALSE);

asm
DB $0F { $0F31 op-code для RDTSC Pentium инструкции }
DB $31 { возвращает 64-битное целое (Integer) }
SUB EAX,TimerLo
SBB EDX,TimerHi
MOV TimerLo,EAX
MOV TimerHi,EDX
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);
Result := TimerLo / (1000 * DELAY);
end;

Взято из forum.sources.ru







const
ID_BIT=$200000; // EFLAGS ID bit

function GetCPUSpeed: Double;
const
DelayTime = 500;
var
TimerHi, TimerLo: DWORD;
PriorityClass, Priority: Integer;
begin
try
PriorityClass := GetPriorityClass(GetCurrentProcess);
Priority := GetThreadPriority(GetCurrentThread);

SetPriorityClass(GetCurrentProcess, REALTIME_PRIORITY_CLASS);
SetThreadPriorit(GetCurrentThread,THREAD_PRIORITY_TIME_CRITICAL);

Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;

SetThreadPriority(GetCurrentThread, Priority);
SetPriorityClass(GetCurrentProcess, PriorityClass);

Result := TimerLo / (1000.0 * DelayTime);
except end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var cpuspeed:string;
begin
cpuspeed:=Format('%f MHz', [GetCPUSpeed]);
edit1.text := cpuspeed;
end;

Взято из forum.sources.ru






function RdTSC : int64; register;
asm
db $0f, $31
end;

function GetCyclesPerSecond : int64;
var
hF, T, et, sc : int64;
begin
QueryPerformanceFrequency(hF); // HiTicks / second
QueryPerformanceCounter(T); // Determine start HiTicks
et := T + hF; // (Cycles are passing, but we can still USE them!)
sc := RdTSC; // Get start cycles
repeat // Use Hi Perf Timer to loop for 1 second
QueryPerformanceCounter(T); // Check ticks NOW
until (T >= et); // Break the moment we equal or exceed et

Result := RdTSC - sc; // Get stop cycles and calculate result
end;


--
Всего хорошего, Слава.
slava.fateback.com
* Origin: (http://news.cca.usart.ru/) USURT's FidoNET<-> (2:5080/1003 [@] fidonet)