在VB中有一段程序:Option ExplicitPublic Const GWL_WNDPROC = -4
Public Const GWL_USERDATA = (-21)
Public Const WM_SIZE = &H5
Public Const WM_USER = &H400
Public Const WM_CLOSE = &H10
Public Const WM_DESTORY = &H2
Public Const WM_QUIT = &H12
Public Const WMA_InterPro = &H500 '与软件通信的消息号
Public Const SW_SHOWNORMAL = 1
'***********参数类型值********
Public Const CX_OK = 0
Public Const CX_DC1 = 1
Public Const CX_DC2 = 2
Public Const CX_DC3 = 3
Public Const CX_DC4 = 4
Public Const CX_DC5 = 5
Public Const CX_DC6 = 6
Public Const CX_DC7 = 7
Public Const CX_DC8 = 8
Public Const CX_Login = 10
Public Const CX_Down = 11Public ToHandle As Long '对方窗体的句柄(软件)
Public lHwndA As Long '本方窗体的句柄(程序)Public Declare Function PostMessage& Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPublic Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub Main()
    Dim lResult As Long
   
    Load FrmMain    lHwndA = FrmMain.hWnd    lResult = ShellExecute(lHwndA, "open", "WX.exe", CStr(lHwndA), "", SW_SHOWNORMAL)
    
    FrmMain.Show
End Sub
将其中红色的语句,转换为C#,我本人用的是using System.Runtime.InteropServices;
[DllImport("shell32.dll")]
        public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);
这段C#语句可以调用记事本等一些外部程序,可是有我要实现的功能没有实现,不明白为什么VB可以调用成功的程序,在C#中调用不成功。

解决方案 »

  1.   

    lResult = ShellExecute(lHwndA, "open", "WX.exe", CStr(lHwndA), "", SW_SHOWNORMAL),在VB中这句转换为C#
      

  2.   

          [DllImport("shell32.dll", EntryPoint = "ShellExecuteA", ExactSpelling = true, CharSet = CharSet.Ansi, SetLastError = true)]
            public static extern int ShellExecute(int hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, int nShowCmd);这样声明看看.