Discussion:
Sprawdzenie czy program jest uruchomiony spod Delphi.
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
AbiX
2008-09-04 08:09:16 UTC
Permalink
Witam!!!
Jak można sprawdzić czy program jest uruchomiony spod Delphi.
Próbowałem szukać na grupie ale skończyły mi się pomysły na treść pytania.
Na razie stosuję coś w rodzaju...
{$IFDEF DEBUG}
lblDebug.Visible:=True;
e_IdentOper.Text:='ADMIN';
{$ENDIF}
...ale oczywiście działa to inaczej.

Pozdrawiam
AbiX
Piotr Bochaczyk
2008-09-04 08:51:49 UTC
Permalink
Post by AbiX
Jak można sprawdzić czy program jest uruchomiony spod Delphi.
Jeśli chodzi o inną instancję Twojego programu to najwygodniej użyć
mutexa. W pliku dpr dopisujesz.

var
Mutex:THandle;

begin
Mutex:=CreateMutex(nil,true,PChar('Unikalny identyfikator programu'));
if (Mutex<>0)and(GetLastError=0)then begin //Wykrycie innej instancji
Application.Initialize;
Application.Title := 'ble ble programu nazwa';
Application.CreateForm(TfoMain, foMain);
Application.Run;
end;
if Mutex<>0 then CloseHandle(Mutex);
end.
--
GCA/ED d s+:++ a C++ ULA P+++ L+ E--- W+++ N+++ o+ K- w+++ O+ M+ V-
PS PE++ Y-- PGP- t-- 5-- X+ !tv R b+ DI-- D+ G e++ h--- r+++ z+++*
AbiX
2008-09-04 09:34:35 UTC
Permalink
Post by Piotr Bochaczyk
Jeśli chodzi o inną instancję Twojego programu to najwygodniej użyć
mutexa. W pliku dpr dopisujesz.
var
Mutex:THandle;
begin
Mutex:=CreateMutex(nil,true,PChar('Unikalny identyfikator programu'));
if (Mutex<>0)and(GetLastError=0)then begin //Wykrycie innej instancji
Application.Initialize;
Application.Title := 'ble ble programu nazwa';
Application.CreateForm(TfoMain, foMain);
Application.Run;
end;
if Mutex<>0 then CloseHandle(Mutex);
end.
Jeśli Delphi2007 podczas uruchamiania tworzy mutex to powinno zadziałać.
Ale nie mam pojęcia jaki może być "Unikalny identyfikator programu"
czyli identyfikator Delphi.
Potrzebuję tego przyznam - z lenistwa.
Może wytłumaczę do czego jest mi to potrzebne, otóż...
Na co dzień pracuję na kilkoma projektami - w niektórych od czasu do
czasu nanoszę małe poprawki.
Każdy program ma swój system logowania, często klienci przysyłają swoje
bazy bo błąd pojawia się tylko w specyficznych przypadkach.
Chciałbym żeby program uruchomiony pod Deplhi nie wyświetlał okno
logowania z samą nazwą użytkownika lub w ogóle nie wyświetlał tego okna
i od razu przechodził do pracy. Ale ten sam program uruchomiony z
Windowsa (Run without debugging) powinien działać już normalnie.
f1j@k_?
2008-09-04 10:26:00 UTC
Permalink
Post by AbiX
Chciałbym żeby program uruchomiony pod Deplhi nie wyświetlał okno
logowania z samą nazwą użytkownika lub w ogóle nie wyświetlał tego okna
i od razu przechodził do pracy.
Móglbyś sprawdzać parenta uruchamianego procesu jeśli proces rodzic ma
nazwe exeka delphi to uruchamiano spod delphi
Ale ten sam program uruchomiony z
Post by AbiX
Windowsa (Run without debugging) powinien działać już normalnie.
Run bez debb jednak tez bedzie uruchamiany spod delphi wiec moj pomsyl
nie zadziala, ale moze mozesz uruchamiac "recznie" spod explorera,
ratuje cie takie rozwiazanie?
abix
2008-09-04 20:16:01 UTC
Permalink
Post by ***@k_?
Móglbyś sprawdzać parenta uruchamianego procesu jeśli proces rodzic ma
nazwe exeka delphi to uruchamiano spod delphi
Potestuję w pracy z parentem i dam znać o efektach
Post by ***@k_?
Ale ten sam program uruchomiony z
Run bez debb jednak tez bedzie uruchamiany spod delphi wiec moj pomsyl
nie zadziala, ale moze mozesz uruchamiac "recznie" spod explorera,
ratuje cie takie rozwiazanie?
Prawda jest taka że rzadko używam Run without debuging. Tylko właśnie
odpalam programy ze skrótu, zwłaszcza teraz się to sprawdza jak na
laptopie mam Vistę i Delphi musi być odpalone w trybie administratora.
wloochacz
2008-09-04 11:09:27 UTC
Permalink
[ciach]
Post by AbiX
Chciałbym żeby program uruchomiony pod Deplhi nie wyświetlał okno
logowania z samą nazwą użytkownika lub w ogóle nie wyświetlał tego okna
i od razu przechodził do pracy. Ale ten sam program uruchomiony z
Windowsa (Run without debugging) powinien działać już normalnie.
Ja to po prostu załatwiam dyrektywą kompilatora.
Jeśli app skompilowana z dyrektywo DEBUG, to WkompilujIUruchomAutoLogowanie.
I już.
Dla wersji dla klienta, dyrektywa jest zawsze wyłączana, a tego kodu nie
ma wersji binarnej.
--
wloochacz
Andrzej Dąbrowski
2008-09-04 13:11:54 UTC
Permalink
Post by AbiX
Każdy program ma swój system logowania, często klienci przysyłają swoje
bazy bo błąd pojawia się tylko w specyficznych przypadkach.
Chciałbym żeby program uruchomiony pod Deplhi nie wyświetlał okno
logowania z samą nazwą użytkownika lub w ogóle nie wyświetlał tego okna
i od razu przechodził do pracy. Ale ten sam program uruchomiony z
Windowsa (Run without debugging) powinien działać już normalnie.
Tak jak napisał Wloochacz użyj kompilacji warunkowej,
w kodzie po nazwie pliku pas wpisujesz:
{$I NazwaPlikuZStalymi.inc}

Potem w kodzie programu:
{$ifdef net}
kod co robić gdy jest zmienna net
{$endif}

{$ifdef embed}
kod co robić gdy jest zmienna embed
{$endif}

Sam plik to przykładowo (wraz z komentarzami):
//zmienne zdefiniowane i wykorzystywane przez kompilator
//******* embed - praca lokalna
//******* net - praca sieciowa
{$define embed}
//{$define net}

//******* client - wersja kliencka
//******* work - wersja wewnętrzna
{$define client}
//{$define work}

Dość proste i łatwe w użyciu
--
Andrzej Dąbrowski
Technical Team (Poland)
Embarcadero Partner,
phone +48 (22) 864 14 65
Przemyslaw Osmanski
2008-09-04 13:45:02 UTC
Permalink
Post by Andrzej Dąbrowski
Dość proste i łatwe w użyciu
Tak przy okazji tych ifdefów, w D2007 nadal jest babol i zastanawiam sie
czy w D2008 tez on został.

Wchodzimy w DPR i w pierwszej linijce gdzie jest
program nazwa;
nalezy wprobowac wpisac:
{$IFDEF
w celu takiej konstrukcji {$IFDEF DLL}librarty {$ELSEIF}program
{$ENDIF}nazwaprogramu;
W D2005 zwiecha, w D2006 zwiecha, w D2007 zwiecha...

pozdrawiam,
Przemek O.
Piotr Rezmer
2008-09-04 14:10:05 UTC
Permalink
Post by Przemyslaw Osmanski
Post by Andrzej Dąbrowski
Dość proste i łatwe w użyciu
Tak przy okazji tych ifdefów, w D2007 nadal jest babol i zastanawiam sie
czy w D2008 tez on został.
U mnie jeszcze Delphi gubi IFDEFy jeśli dodam do projektu nowy
unit/form/module. Szczerze mówiąc nie wierzę aby w jakiejkolwiek wersji
poprawiono problemy z warunkowymi dyrektywami.
--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
abix
2008-09-04 20:20:55 UTC
Permalink
Post by Piotr Rezmer
U mnie jeszcze Delphi gubi IFDEFy jeśli dodam do projektu nowy
unit/form/module. Szczerze mówiąc nie wierzę aby w jakiejkolwiek wersji
poprawiono problemy z warunkowymi dyrektywami.
Właśnie dziwiłem się dlaczego w jednym projekcie działa {$IFDEF DEBUG}
a w drugim już nie. Nie sprawdziłem jeszcze dokładnie opcji projektu
dlatego o niczym nie wspominam.
Dzisiaj natomiast spotkałem się z czymś takim że po przełączeniu
ustawień na Release kompilował się nadal fragment po {$IFDEF DEBUG}
(Miałem w tym momencie uruchomione 2x Delphi z różnymi projektami)
Piotr Rezmer
2008-09-04 22:01:19 UTC
Permalink
Post by abix
Dzisiaj natomiast spotkałem się z czymś takim że po przełączeniu
ustawień na Release kompilował się nadal fragment po {$IFDEF DEBUG}
(Miałem w tym momencie uruchomione 2x Delphi z różnymi projektami)
Istotne jest też czy robisz kompilację, czy build. W pierwszym przypadku
zmiana zmiennej w opcjach projektu wpłynie tylko na te unity w których
zrobiłeś zmiany :(
--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
AbiX
2008-09-05 05:40:43 UTC
Permalink
Post by Piotr Rezmer
Istotne jest też czy robisz kompilację, czy build. W pierwszym przypadku
zmiana zmiennej w opcjach projektu wpłynie tylko na te unity w których
zrobiłeś zmiany :(
O.. na to nie wpadłem. Dzięki
Andrzej Dąbrowski
2008-09-05 07:24:14 UTC
Permalink
Post by Piotr Rezmer
Post by Przemyslaw Osmanski
Post by Andrzej Dąbrowski
Dość proste i łatwe w użyciu
Tak przy okazji tych ifdefów, w D2007 nadal jest babol i zastanawiam
sie czy w D2008 tez on został.
U mnie jeszcze Delphi gubi IFDEFy jeśli dodam do projektu nowy
unit/form/module. Szczerze mówiąc nie wierzę aby w jakiejkolwiek wersji
poprawiono problemy z warunkowymi dyrektywami.
Sporo tego używałem zanim zacząłem pracować w Borlandzie/Embarcadero i
nigdy z tym problemów nie miałem, a rozwijałem aplikacje, dodawałem
Unity, itp. A co do "babola" sprawdzę jak wyjdzie będę miał wersję
ostateczną (RTM), bo na razie mam jeszcze poinstalowane testowe..
--
Andrzej Dąbrowski
Technical Team (Poland)
Embarcadero Partner,
phone +48 (22) 864 14 65
Piotr Rezmer
2008-09-05 19:52:30 UTC
Permalink
Post by Andrzej Dąbrowski
Sporo tego używałem zanim zacząłem pracować w Borlandzie/Embarcadero i
nigdy z tym problemów nie miałem, a rozwijałem aplikacje, dodawałem
Unity, itp. A co do "babola" sprawdzę jak wyjdzie będę miał wersję
ostateczną (RTM), bo na razie mam jeszcze poinstalowane testowe..
Problemy są jeśli IFDEF jest umieszczone w pliku .dpr /.dproj wewnątrz
bloku typu initialize/CreateForm/run/finalize. Wtedy IDE przy dodaniu
pliku do projektu tworzy tę część ponownie i pomija wcześniejsze IFDEFy
--
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Piotr Hosowicz
2008-09-04 09:19:19 UTC
Permalink
Post by AbiX
Witam!!!
Jak można sprawdzić czy program jest uruchomiony spod Delphi.
Próbowałem szukać na grupie ale skończyły mi się pomysły na treść pytania.
Na razie stosuję coś w rodzaju...
{$IFDEF DEBUG}
lblDebug.Visible:=True;
e_IdentOper.Text:='ADMIN';
{$ENDIF}
...ale oczywiście działa to inaczej.
Nie pamiętam odpowiedzi, chodziło chyba o sprawdzenie czy okno o
określonym caption, nazwie klasy okna czy coś istnieje. Pytanie
faktycznie dawno się nie pojawiało, ale napewno kilkukrotnie było
zadawane i byuły odpowiedzi. Jak Pan porządnie poszuka w Google to Pan
znajdzie.

Pozdrawiam,

Piotr Hosowicz
marfi
2008-09-04 09:55:31 UTC
Permalink
Post by AbiX
Witam!!!
Jak można sprawdzić czy program jest uruchomiony spod Delphi.
Próbowałem szukać na grupie ale skończyły mi się pomysły na treść pytania.
Na razie stosuję coś w rodzaju...
{$IFDEF DEBUG}
lblDebug.Visible:=True;
e_IdentOper.Text:='ADMIN';
{$ENDIF}
...ale oczywiście działa to inaczej.
Może to poniżej pomoze?


(**************************************************************)
(* Unit Name: DelRun *)
(* Description: Detect whether the current process is running *)
(* under the control of Delphi under Windows 95 *)
(* and NT. *)
(* Author: Yorai Aminov *)
(* Created: 30 April 1998 *)
(* Updates: 12 April 1999 *)
(* Use correct IsDebuggerPresent on Windows 98 *)
(* *)
(* Copyright (c) 1998, 99 Yorai Aminov *)
(**************************************************************)
unit DelRun;

interface


uses
Windows, Classes, SysUtils;


function RunningUnderDelphi: Boolean;


implementation


{ NtQueryInformation constants }


const
ProcessBasicInformation = 0;


{ NtQueryInformation types }


type
TProcessBasicInformation = packed record
ExitStatus: Integer;
PebBaseAddress: Pointer;
AffinityMask: Integer;
BasePriority: Integer;
UniqueProcessID: Integer;
InheritedFromUniqueProcessID: Integer;
end;


TNtQueryInformationProcess =
function(hProcess: THandle; ProcessInformationClass: Integer;
var ProcessInformation; ProcessInformationLength: Integer;
var ReturnLength: Integer): Integer; stdcall;


{ NT IsDebuggerPresent prototype }


type
TIsDebuggerPresent = function: BOOL; stdcall;


{ Retrieve parent process ID from NtQueryInformation }


function GetParentProcessIDForNT: Integer;
var
hNTDLL: Integer;
NtQueryInformationProcess: TNtQueryInformationProcess;
PBI: TProcessBasicInformation;
ReturnLength: Integer;
begin
Result := 0;
// Attempt to load NTDLL
hNTDLL := LoadLibrary('NTDLL.DLL');
if hNTDLL <> 0 then
begin
// Retrieve address of NtQueryInformationProcess
NtQueryInformationProcess := GetProcAddress(hNTDLL,
'NtQueryInformationProcess');
if Assigned(NTQueryInformationProcess) then
begin
// Call NtQueryInformationProcess
NtQueryInformationProcess(GetCurrentProcess,
ProcessBasicInformation,
PBI, SizeOf(PBI), ReturnLength);
// Return parent process ID
Result := PBI.InheritedFromUniqueProcessID;
end;
// Release NTDLL
FreeLibrary(hNTDLL);
end;
end;


{ Check for debugger under NT }


function IsDebuggerPresentForNT: Boolean;
var
Kernel32: THandle;
FIsDebuggerPresent: TIsDebuggerPresent;
begin
Result := False;
// Attempt to load KERNEL32
Kernel32 := LoadLibrary('KERNEL32.DLL');
if Kernel32 <> 0 then
begin
// Retrieve address of IsDebuggerPresent
FIsDebuggerPresent := GetProcAddress(Kernel32,
'IsDebuggerPresent');
// Return True if a debugger is present
if Assigned(FIsDebuggerPresent) then
Result := FIsDebuggerPresent;
// Release KERNEL32
FreeLibrary(Kernel32);
end;
end;


{ ToolHelp32 constants }


const
TH32CS_SNAPPROCESS = $00000002;


{ ToolHelp32 types }


type
PProcessEntry32 = ^TProcessEntry32;
TProcessEntry32 = record
dwSize: DWORD;
cntUsage: DWORD;
th32ProcessID: DWORD;
th32DefaultHeapID: DWORD;
th32ModuleID: DWORD;
cntThreads: DWORD;
th32ParentProcessID: DWORD;
pcPriClassBase: Longint;
dwFlags: DWORD;
szExeFile: array[0..MAX_PATH - 1] of Char;// Path
end;


{ ToolHelp32 function prototypes }


type
TCreateToolhelp32Snapshot =
function(dwFlags, th32ProcessID: DWORD): THandle; stdcall;
TProcess32First =
function(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;
stdcall;
TProcess32Next =
function(hSnapshot: THandle; var lppe: TProcessEntry32): BOOL;
stdcall;


function GetParentProcessIDForWindows: Integer;
var
Kernel32: THandle;
CreateToolhelp32Snapshot: TCreateToolhelp32Snapshot;
Process32First: TProcess32First;
Process32Next: TProcess32Next;
Snapshot: THandle;
Entry: TProcessEntry32;
WalkResult: Boolean;
ID: ULONG;
begin
Result := 0;
// Attempt to load KERNEL32
Kernel32 := LoadLibrary('KERNEL32.DLL');
if Kernel32 <> 0 then
begin
// Retrieve ToolHelp32 function addresses
CreateToolhelp32Snapshot :=
GetProcAddress(Kernel32, 'CreateToolhelp32Snapshot');
Process32First := GetProcAddress(Kernel32, 'Process32First');
Process32Next := GetProcAddress(Kernel32, 'Process32Next');
if Assigned(CreateToolhelp32Snapshot) and
Assigned(Process32First) and
Assigned(Process32Next) then
begin
// Retrieve current process ID for comparison
ID := GetCurrentProcessId;
// Create processes snapshot
Snapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Integer(Snapshot) <> -1 then
begin
// Start walking list of processes
Entry.dwSize := SizeOf(TProcessEntry32);
WalkResult := Process32First(Snapshot, Entry);
// Walk through entire list until result can be determined
while (GetLastError <> ERROR_NO_MORE_FILES) and (Result = 0)
do
begin
if WalkResult then
begin
// If this is the current process, return its parent
if Entry.th32ProcessID = ID then
Result := Entry.th32ParentProcessID;
end;
// Move to next item in the process list
Entry.dwSize := SizeOf(TProcessEntry32);
WalkResult := Process32Next(Snapshot, Entry);
end;
// Release handle to the snapshot
CloseHandle(Snapshot);
end;
end;
// Release KERNEL32
FreeLibrary(Kernel32);
end;
end;


{ Process database constants }


const
fDebugSingle = $00000001;


{ Process database types }


type
PProcessDatabase = ^TProcessDatabase;
TProcessDatabase = packed record
DontCare1: array[0..7] of Integer;
Flags: Integer;
DontCare2: array[0..11] of Integer;
DebugeeCB: Integer;
DontCare3: array[0..22] of Integer;
DontCare4: Word;
end;


function IsDebuggerPresentForWindows: Boolean;
var
PDB: PProcessDatabase;
TID: Integer;
Obsfucator: ULONG;
begin
Result := False;
Obsfucator := 0;
TID := GetCurrentThreadID;
// Calculate Obsfucator
asm
MOV EAX, FS:[18h]
SUB EAX, 10h
XOR EAX, [TID]
MOV [Obsfucator], EAX
// Obsfucator := (@TIB - $10) xor GetCurrentThreadID
end;
if Obsfucator <> 0 then
begin
// Retriece pointer to the PDB
PDB := Pointer(GetCurrentProcessID xor Obsfucator);
// Return True if process is being debugged
Result := (PDB^.Flags and fDebugSingle) <> 0;
end;
end;


function GetParentProcessID: Integer;
begin
// If Windows 95/98 or NT 5.0+, use ToolHelp32
if (Win32Platform = VER_PLATFORM_WIN32_NT) and
(Win32MajorVersion < 5) then
Result := GetParentProcessIDForNT else
Result := GetParentProcessIDForWindows;
end;


function IsDebuggerPresent: Boolean;
begin
// If Windows 95, use PDB. Otherwise, use NT's IsDebuggerPresent
if (Win32Platform = VER_PLATFORM_WIN32_NT) or
((Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
((Win32MajorVersion > 4) or
((Win32MajorVersion = 4) and (Win32MinorVersion > 0)))) then
Result := IsDebuggerPresentForNT else
Result := IsDebuggerPresentForWindows;
end;


procedure EnumWindowsProc(Window: THandle; LParam: Integer); stdcall;
var
ClassName: string;
begin
// Allocate space for class name
SetLength(ClassName, 255);
// Retrieve window's class name
GetClassName(Window, PChar(ClassName), 255);
// Reallocate string length
SetLength(ClassName, StrLen(PChar(ClassName)));
// If window belongs to an instance of Delphi, add to list
if ClassName = 'TAppBuilder' then
TList(LParam).Add(Pointer(Window));
end;


function RunningUnderDelphi: Boolean;
var
List: TList;
i: Integer;
ID, ParentID: Integer;
begin
Result := False;
// Retrieve ID for the parent process
ParentID := GetParentProcessID;
// If ID found and being debugged, check for Delphi
if (ParentID <> 0) and (IsDebuggerPresent) then
begin
// Create a list of window handles
List := TList.Create;
// Fill list with window handles for instances of Delphi
EnumWindows(@EnumWindowsProc, Integer(List));
// Check Delphi instances
for i := 0 to List.Count - 1 do
begin
// Get process ID for the Delphi window
GetWindowThreadProcessID(Integer(List[i]), @ID);
// Compare IDs
if ID = ParentID then
begin
// The process parent ID is Delphi's process ID
Result := True;
Break;
end;
end;
// Free list
List.Free;
end;
end;


end.
MirKasp
2008-09-04 12:28:32 UTC
Permalink
Post by AbiX
Jak można sprawdzić czy program jest uruchomiony spod Delphi.
Próbowałem szukać na grupie ale skończyły mi się pomysły na treść pytania.
A może coś takiego:

function IsInsideDelphiIDE(): boolean;
begin
Result := (System.DebugHook <> 0);
end;

pozdrawiam
MirKasp
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
abix
2008-09-04 20:32:39 UTC
Permalink
Post by MirKasp
function IsInsideDelphiIDE(): boolean;
begin
Result := (System.DebugHook <> 0);
end;
Kurcze.. działa :) ale bajer :D
A help na to "This is variable System.DebugHook." - fest
Post by MirKasp
pozdrawiam
MirKasp
Dzięki za odpowiedzi.

Pozdrawiam wszystkich.
AbiX
Piotr Hosowicz
2008-09-05 06:04:11 UTC
Permalink
Post by abix
Post by MirKasp
function IsInsideDelphiIDE(): boolean;
begin
Result := (System.DebugHook <> 0);
end;
Kurcze.. działa :) ale bajer :D
Wrzucę to do FAQ, pytanie nie za częste, ale mogę sobie wyobrazić, że
nielatwe do znalezienia.

Mam prośbę - orientujecie się od którego Delphi to jest? Proszę
sprawdzić, odkryjemy na jakim najstarszym Delphi to działa i napiszę to
w FAQ. Nie chcę tam dawać np. rozwiązania Pana Marfiego, bo możliwe że
już nie trzeba aż takiej armaty w roku 2008 do tego.

Pozdrawiam,

Piotr Hosowicz
Adam Siwoń
2008-09-05 10:26:57 UTC
Permalink
Post by Piotr Hosowicz
Post by abix
Post by MirKasp
function IsInsideDelphiIDE(): boolean;
begin
Result := (System.DebugHook <> 0);
end;
Kurcze.. działa :) ale bajer :D
Wrzucę to do FAQ, pytanie nie za częste, ale mogę sobie wyobrazić, że
nielatwe do znalezienia.
Mam prośbę - orientujecie się od którego Delphi to jest? Proszę
sprawdzić, odkryjemy na jakim najstarszym Delphi to działa i napiszę to
w FAQ. Nie chcę tam dawać np. rozwiązania Pana Marfiego, bo możliwe że
już nie trzeba aż takiej armaty w roku 2008 do tego.
W D6 Pro jest.
--
z pozdrowieniami
Adam Siwoń
Piotr Hosowicz
2008-09-05 10:54:26 UTC
Permalink
Post by Adam Siwoń
Post by Piotr Hosowicz
Mam prośbę - orientujecie się od którego Delphi to jest? Proszę
sprawdzić, odkryjemy na jakim najstarszym Delphi to działa i napiszę
to w FAQ. Nie chcę tam dawać np. rozwiązania Pana Marfiego, bo możliwe
że już nie trzeba aż takiej armaty w roku 2008 do tego.
W D6 Pro jest.
Ok, no to dopisałem i jest:

http://www.delphi.org.pl/faq/question.php?id=2003

Pozdrawiam,

Piotr Hosowicz
Informatic
2008-09-05 13:14:20 UTC
Permalink
Przy Delphi 7 Avast wariuje...
Nazwa Pasożyta: Win32:Trojan-gen {Other}

heh...
ale kompiluje się.. .. czyli pewnie działa..
Piotr Hosowicz
2008-09-05 14:06:52 UTC
Permalink
Post by Informatic
Przy Delphi 7 Avast wariuje...
Nazwa Pasożyta: Win32:Trojan-gen {Other}
heh...
ale kompiluje się.. .. czyli pewnie działa..
Dopisałem.

Pozdrawiam,

Piotr Hosowicz
Bartosz Derleta
2008-09-06 18:12:33 UTC
Permalink
Post by Piotr Hosowicz
Post by abix
Post by MirKasp
function IsInsideDelphiIDE(): boolean;
begin
Result := (System.DebugHook <> 0);
end;
Kurcze.. działa :) ale bajer :D
Wrzucę to do FAQ, pytanie nie za częste, ale mogę sobie wyobrazić, że
nielatwe do znalezienia.
Mam prośbę - orientujecie się od którego Delphi to jest?
Delphi 3 Standard - działa ślicznie. Mogę jeszcze sprawdzić na Delphi 1
Standard, o ile się odpali pod Vistą.
--
Pozdrawiam,
Bartosz Derleta
Bartosz Derleta
2008-09-06 18:22:07 UTC
Permalink
Mogę jeszcze sprawdzić na Delphi 1 Standard, o ile się odpali pod Vistą.
...ale się nie odpala (norma). General protection fault, nawet w trybie
administratora przy zgodności z Win 95 ;/
--
Pozdrawiam,
Bartosz Derleta
Informatic
2008-09-07 11:42:55 UTC
Permalink
moge jeszcze sprawdzic (w przeciągu 1 tyg. przepraszam..) na D5
Standard.
jakbyś podesłał to ja moge spróbować. (i hate vista - xp..)
Piotr Hosowicz
2008-09-07 11:48:55 UTC
Permalink
Post by Informatic
moge jeszcze sprawdzic (w przeciągu 1 tyg. przepraszam..) na D5
Standard.
jakbyś podesłał to ja moge spróbować. (i hate vista - xp..)
Nie, dzięki, jeśli działa na D3 Standard to już wystarczy tego sprawdzania.

Pozdrawiam,

Piotr Hosowicz

Piotr Hosowicz
2008-09-06 18:43:44 UTC
Permalink
Post by Bartosz Derleta
Delphi 3 Standard - działa ślicznie.
Dopisałem, dzięki.

Pozdrawiam,

Piotr Hosowicz
Loading...