admin管理员组

文章数量:1530949

KIS 旗舰版 VB6.0调用C#可执行程序,并传递参数

调用C#可执行程序部分代码

        Dim FID As String
        Dim FBillNo As String
        Dim CtlIndex As Integer
        Dim Cnnstring As String
        Dim path As String
        FID = m_BillTransfer.SaveVect.Item(1).Value("FInterID")
        CtlIndex = CheckBill("FBillNo", 1)
        FBillNo = m_BillTransfer.GetHeadText(CtlIndex)
        Cnnstring = Split(Split((m_BillTransfer.Cnnstring), ";")(5), "=")(1)
        path = "C:\Program Files\KPART\My Product Name\Customprint.exe " & Cnnstring & " " & FBillNo & " " & FID
        'path = "C:\Program Files (x86)\KPART\My Product Name\Customprint.exe " & Cnnstring & " " & FBillNo & " " & FID

        Shell path, 1

完整VB代码

 
'定义插件对象接口. 必须具有的声明, 以此来获得事件
Private WithEvents m_BillTransfer   As k3BillTransfer.Bill
 
Public Sub Show(ByVal oBillTransfer As Object)
 
    '接口实现
    '注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = oBillTransfer
 
End Sub

Private Sub Class_Terminate()
 
    '释放接口对象
    '注意: 此方法必须存在, 请勿修改
    Set m_BillTransfer = Nothing

End Sub

Private Sub m_BillTransfer_BillInitialize()
 
'*************** 开始设置菜单 ***************
 
    m_BillTransfer.AddUserMenuItem "自定义打印", "自定义菜单"
 
'*************** 结束设置菜单 ***************
 

End Sub

Private Sub m_BillTransfer_UserMenuClick(ByVal Index As Long, ByVal Caption As String)
 
    'TODO: 请在此处添加代码响应事件 UserMenuClick
On Error GoTo ErrH
    Select Case Caption
    Case "自定义打印"
        '此处添加处理 自定义打印 菜单对象的 Click 事件
        Dim FID As String
        Dim FBillNo As String
        Dim CtlIndex As Integer
        Dim Cnnstring As String
        Dim path As String
        FID = m_BillTransfer.SaveVect.Item(1).Value("FInterID")
        CtlIndex = CheckBill("FBillNo", 1)
        FBillNo = m_BillTransfer.GetHeadText(CtlIndex)
        Cnnstring = Split(Split((m_BillTransfer.Cnnstring), ";")(5), "=")(1)
        path = "C:\Program Files\KPART\My Product Name\Customprint.exe " & Cnnstring & " " & FBillNo & " " & FID
        'path = "C:\Program Files (x86)\KPART\My Product Name\Customprint.exe " & Cnnstring & " " & FBillNo & " " & FID

        Shell path, 1
    Case Else
    End Select
Exit Sub
ErrH:
    MsgBox Err.Description, 48, "金蝶提示"
End Sub

Private Function CheckBill(checkName As String, Sort As Integer) As Integer
Dim HeadCtl As Variant
Dim EntryCtl As Variant
Dim reCName As String
Dim I As Integer
reCName = ""

If checkName = "" Or Sort > 2 Or Sort < 1 Then
   CheckBill = 0
   Exit Function
End If

If Sort = 1 Then
    HeadCtl = m_BillTransfer.HeadCtl
    For I = 1 To UBound(HeadCtl)
        If UCase(HeadCtl(I).FieldName) = UCase(checkName) Then
        CheckBill = I
        Exit Function
        Exit For
        End If
    Next I
 End If

If Sort = 2 Then
    EntryCtl = m_BillTransfer.EntryCtl
    For I = 1 To UBound(EntryCtl)
      If UCase(EntryCtl(I).FieldName) = UCase(checkName) Then
        CheckBill = I
        Exit Function
        Exit For
       End If
     Next I
End If
End Function

C#程序入口
string[] args VB参数
HandleRunningInstance 方法,程序已运行限制重复打开并把窗口显示在最前端。
HandleRunningInstance 方法,转载网络可自行查找使用。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace Customprint
{
    static class Program
    {
        /// <summary> 
        /// 该函数设置由不同线程产生的窗口的显示状态。 
        /// </summary> 
        /// <param name="hWnd">窗口句柄</param> 
        /// <param name="cmdShow">指定窗口如何显示。查看允许值列表,请查阅ShowWlndow函数的说明部分。</param> 
        /// <returns>如果函数原来可见,返回值为非零;如果函数原来被隐藏,返回值为零。</returns> 
        [DllImport("User32.dll")]
        private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
        /// <summary> 
        /// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口。键盘输入转向该窗口,并为用户改各种可视的记号。系统给创建前台窗口的线程分配的权限稍高于其他线程。 
        /// </summary> 
        /// <param name="hWnd">将被激活并被调入前台的窗口句柄。</param> 
        /// <returns>如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零。</returns> 
        [DllImport("User32.dll")]
        private static extern bool SetForegroundWindow(IntPtr hWnd);
        private const int WS_SHOWNORMAL = 1;

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)//VB参数
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);


            Process instance = RunningInstance();
            if (instance == null)
            {
                Application.Run(new FormMain(args));//VB参数

            }
            else
            {
                HandleRunningInstance(instance);
            }


        }
        /// <summary> 
        /// 获取正在运行的实例,没有运行的实例返回null; 
        /// </summary> 
        public static Process RunningInstance()
        {
            Process current = Process.GetCurrentProcess();
            Process[] processes = Process.GetProcessesByName(current.ProcessName);
            foreach (Process process in processes)
            {
                if (process.Id != current.Id)
                {
                    if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    {
                        return process;
                    }
                }
            }
            return null;
        }


        /// <summary> 
        /// 显示已运行的程序。 
        /// </summary> 
        public static void HandleRunningInstance(Process instance)
        {
            ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //显示,可以注释掉 
            SetForegroundWindow(instance.MainWindowHandle);            //放到前端 
        }
    }
}

本文标签: 可执行旗舰版参数程序KIS