カスタムコンポーネントの作成者の中には、シェアウェアの制限を設定するためにDelphiが実行されているかどうかを確認するRTLルーチンを使用していると聞いてきました。誰でもこのルーチンが何であるか知っていますか? "DelphiRunning"や "IsDelphiRunning"のような明白な名前を確認しても何も役に立たない。私のプログラムはDelphiが動作しているかどうかをどのように伝えることができますか?
答えて
ここ2さまざまなアイデアあります
- Delphiはアップと
を実行している - アプリケーションは、Delphiはを実行しているかどうかをテストする一般的な方法で確認することで、デバッガ
で実行されているが、 TAppBuilderやTPropertyInspectorのような特定のクラス名を持つ既知のIDE Windowsの存在。
これら2つは、すべてのバージョンのDelphi IIRCで動作します。
、あなたのアプリケーションがデバッガ、すでに実行しているとき、すなわち「ファイル名を指定して実行」(F9)をIDEから正常に立ち上げやデバッガに添付の下で実行されているであるかどうかを知りたい場合は、あなただけのDebugHookグローバルをテストする必要があり変数。
「プログラムからデタッチ」はDebugHook値を削除しませんが、「プロセスにアタッチ」がそれを設定することに注意してください。
function IsDelphiRunning: Boolean;
begin
Result := (FindWindow('TAppBuilder', nil) > 0) and
(FindWindow('TPropertyInspector', 'Object Inspector') > 0);
end;
function IsOrWasUnderDebugger: Boolean;
begin
Result := DebugHook <> 0;
end;
目標は、アプリケーションが開発されているときに、あなたのコンポーネントの試用版の使用を制限にある場合は、両方が欠陥持っている:
- 適切なクラス名/タイトルとの隠されたウィンドウをすることができますアプリケーションに含める
- DebugHookはコード内で手動で設定できます
www.delphitricks.com/source-code/misc/check_if_delphi_is_running.htmlのコードスニペットです。
function WindowExists(AppWindowName, AppClassName: string): Boolean;
var
hwd: LongWord;
begin
hwd := 0;
hwd := FindWindow(PChar(AppWindowName), PChar(AppClassName));
Result := False;
if not (Hwd = 0) then {window was found if not nil}
Result := True;
end;
function DelphiLoaded: Boolean;
begin
DelphiLoaded := False;
if WindowExists('TPropertyInspector', 'Object Inspector') then
if WindowExists('TMenuBuilder', 'Menu Designer') then
if WindowExists('TAppBuilder', '(AnyName)') then
if WindowExists('TApplication', 'Delphi') then
if WindowExists('TAlignPalette', 'Align') then
DelphiLoaded := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DelphiLoaded then
begin
ShowMessage('Delphi is running');
end;
end;
function DelphiIsRunning: Boolean;
begin
Result := DebugHook <> 0;
end;
ホラーをコピーアンドペーストします。このコードスニペットはクリーンアップするか忘れてください。本当に。 –
コンポーネントコードからDebugHook <> 0を使用することができます。 DebugHookは、Delphi/RAD Studio IDEによって設定されたグローバル変数(IIRC、システムユニットにあります)で、どこからでも設定することはできませんでした。
他の手法(たとえば、TAppBuilderのFindWindow())がありますが、DebugHookはその中からすべての作業を行います。
DebugHookはIDE内でF9が押された場合にのみtrueを返します。 IDE内でCtrl + Shift + F9が押された場合はtrueを返しません。 –
@ MichaelRiley-AKAGunny:もちろんそうです。 Ctrl + Shift + F9はDebuggingなしで**実行されます.DebugHookは設定されません。しかし、デバッガの制御下で実行していない場合は、IDEで実行していないのでしょうか? –
- 1. ウェブページが参照元なしのWebアプリケーションビューで開いているかどうかをウェブページがどのように伝えることができますか?
- 2. 誰かが私が間違っていることをどこに伝えることができますか?
- 3. 親フォームは、非モーダルフォームがまだ開いているかどうかをどのように伝えることができますか?
- 4. どのようにlog4jにプロパティファイルがあるのかを伝えることができますか?
- 5. VSTO Excelアドインは、ブックがワードドキュメントに埋め込まれているかどうかをどのように伝えることができますか?
- 6. 私は星を動かすことができるかどうか確認しようとしています
- 7. UICollectionViewをリロードできるようにデバイスが回転していることをどのように伝えることができますか
- 8. メモリ内で、セクションがプログラムか静的なlibかどうかをどのように伝えますか?
- 9. LinuxがPAEモードまたは非PAEモードであることをプログラムでどのように伝えるか?
- 10. データベースフォルダーダイアログでユーザーが選択したフォルダーをアプリがどのように伝えることができますか?
- 11. 誰かがこのMSテキストが伝えようとしていることを説明できますか?
- 12. シェルスクリプトは、256色サポートのxtermウィンドウで実行されているかどうかをどのように伝えることができますか?
- 13. 私のgitブランチが変更されたEmacsにどうやって伝えることができますか?
- 14. ユーザーがスクリーンショットを作成したかどうかはどのように知ることができますか?
- 15. どのように私はdeleteRowsAtIndexPathsを作ることができます:GenericTableViewControllerで動作しますか?
- 16. ブログページの場合は、ヘッダー内の何かを行うように私のワードプレスにどのように伝えることができますか?
- 17. どのメニューアイテムがDelphiで開いているかをどのように教えていますか?
- 18. ファイルのサイズをカーネルモジュールからどのように伝えることができますか?
- 19. どのようにシートを印刷するのかをGoogleスクリプトに伝えることはできますか?
- 20. Tensorflow:私のコードがどのように見えるか、反復プログラムここで
- 21. 行が隠されているかどうかを伝える
- 22. Oracleデータベース用にプログラムで作成したDSNの場合どのようにして確実にドライバ名を伝えることができますか?
- 23. スクリプトはどのように動作させることができますか?
- 24. どのようにポートスキャナが動作しているかどうかを確認できますか?
- 25. ストリームが閉じているかどうかをどのように知ることができますか?
- 26. どのように私はこのhtmlコードのjavascriptにすべてのボタンに影響しないと伝えることができますか?
- 27. どのように私の手紙を隠す柔らかい終わりのように作ることができますか?私は私の手紙を隠しソフトエンドのように作ることができますどのように
- 28. どのように私はこのようなボタンをWindowsのフォームで作ることができますか?
- 29. フォントはどのようにOSに「私はモンスター/フィックスドフォントを使用していますか」と伝えますか?
- 30. Python.hがどこにあるのかBazelに伝えるにはどうすればいいですか?
+1、しかし、 'DebugHookはコード内に手動で設定することができますか?'という短所の両方で、何らかの回避策がありますか? – PresleyDias
@PresleyDias、そして、あなたはcatとmouseの再生を開始します。ただし、覚えておくべきことは、手動でDebugHookを設定すると、アプリケーションが 'DebugBreak'または' asm int 3 end'に遭遇し、 ... –
オハイオ州オクラホマ:P ...オクラホマ、アプリケーションがクラッシュした場合は、それはいいです – PresleyDias