1

アホイ タール

既存の TD6.3 アプリケーション内から .​​exe プログラム (別の言語で記述された小さなヘルパー アプリ) を実行しようとしています。

ドキュメントを見ると、これは SalLoadApp (または、理想的には SalLoadAppAndWait で動作すると思います。終了するまで待つ必要があり、ユーザーには見えないようにしたいためです。アプリは、目に見える出力のないコンソール アプリです)またはユーザーの操作)、しかし、そのように呼び出そうとしても、まったく何もしません。appname だけをパラメーターとして両方試しました (TD アプリケーションと同じフォルダーにあります)。

Call SalLoadApp('HelperApp.exe', '')

フルパスと同様に:

Call SalLoadApp('C:\Users\user\ProjectFolder\HelperApp.exe', '')

これがどのように機能するか、またはそこに何かが欠けているかを誤解していますか? TD アプリケーションでのみ機能しますか? コードを介して既存の非 TD .exe ファイルを実行する別の方法はありますか?

4

2 に答える 2

0

ShellExecuteW() を使用します。このようにして、より詳細に制御できます

1) SHELL32.dll の一部として外部関数として含めます。

Library name: SHELL32.DLL
ThreadSafe: No
Function: ShellExecuteW
    Description: The ShellExecute function opens or prints a specified file. The file can be an executable file or a document file. See ShellExecuteEx also.

    Export Ordinal: 0
    Returns
        Number: DWORD
    Parameters
        Window Handle: HWND
        String: LPWSTR
        String: LPWSTR
        String: LPWSTR
        String: LPWSTR
        Number: INT

2)次の構文でexeを実行します(または詳細については「ShellExecute」を参照してください)

Call ShellExecuteW( hWndNULL, "open", "C:\\Program Files (x86)\\Gupta\\TeamDeveloper6.2.1\\Your.exe", STRING_Null, STRING_Null, SW_SHOWNORMAL )

3) 必要に応じてラッパー関数を記述して、必要なリターン コードを確認できるようにします。

Select Case nRet
Case SE_ERR_FNF
    If spApplication
        Set sError = 'Either the Application, or the specified file was not found. ' || sCTRL || sCTRL ||
                'Check the Application ' || spApplication || ' and any Compatibility Packs have been installed on this machine .' || sCTRL  || sCTRL  ||
                'Check the file ' || spFile || ' exists. '
    Else
        Set sError = 'The specified file was not found. ' || sCTRL || sCTRL ||
                'Check the file ' || spFile || ' exists. '
    Break
Case SE_ERR_PNF
    Set sError = 'The specified Path was not found'
    Break
Case SE_ERR_ACCESSDENIED
    Set sError = 'The operating system denied access to the specified file.'
    Break
Case SE_ERR_ASSOCINCOMPLETE
    Set sError = 'The filename association is incomplete , invalid, or has not been defined within Windows'
    Break
Case SE_ERR_DDEBUSY
    Set sError = 'The DDE transaction could not be completed because other DDE transactions are being processed.'
    Break
Case SE_ERR_DDEFAIL
    Set sError = 'The DDE transaction failed.'
    Break
Case SE_ERR_DDETIMEOUT
    Set sError = 'The DDE transaction could not be completed because the request timed out'
    Break
Case SE_ERR_NOASSOC
    Set sError = 'There is no application associated with the given filename extension'
    Break
Case SE_ERR_OOM
    Set sError = 'There was not enough memory to launch the application'
    Break
Case SE_ERR_SHARE
    Set sError = 'Another user has this document open.'
    Break
Case 0
    Set sError = 'The operating system is out of memory or resources'
    Break
Default
    Break


If nRet <=32
If spApplication
    Call SalMessageBox( sError || sCTRL || sCTRL ||
             'File Name =  ' || spFile || sCTRL || sCTRL ||
            'Application Name = ' ||  spApplication , 'Application or File Open Error' , MB_IconStop  |  MB_Ok )
Else
    Call SalMessageBox( sError || sCTRL || sCTRL ||
             'File Name =  ' || spFile , 'File Open Error' , MB_IconStop  |  MB_Ok )
If nRet = SE_ERR_NOASSOC or nRet = SE_ERR_ASSOCINCOMPLETE
    ! Now open the OpenAs dialog from Windows to select an application from a list or browse.
    Call ShellExecuteW( hWndNULL, "open", "rundll32.exe", "shell32.dll,OpenAs_RunDLL " || spFile, STRING_Null, npShowState )
Set bOk = FALSE
于 2019-11-19T21:22:54.860 に答える
0

はい、その目的で SalLoadApp を使用できます。この関数は、任意の exe ファイルを呼び出すために使用できます (td exe のみのような制限はありません)。たとえば、windows 電卓を呼び出したい場合は、次のように記述します。

SalLoadApp( "calc.exe", "" )

また、ファイル パスを指定する場合は、以下に示すように、(シングルスラッシュの代わりに) ダブル スラッシュを使用してください。

Call SalLoadApp('C:\\Users\user\\ProjectFolder\\HelperApp.exe', '')

SalLoadApp の形式は次のとおりです。 SalLoadApp( strAppName, strParameters )

strAppName - exe ファイルの名前。

strParameters - パラメーター配列 (strParameters 内のスペースは、1 つの引数の終わりを示します)。

また、ファイルの場所を指定せずに salloadapp を呼び出したい場合は、両方の exe を同じフォルダー ( HelperApp.exe と呼び出し元のアプリケーション) に保持できます。

于 2019-11-19T19:33:01.147 に答える