none
VB2008 呼叫 C#的程式 RRS feed

  • 問題

  • 我們是一群學生 互寫程式 在做整合
    遇到一個問題是
    我是寫C#的程式
    主程式是VB2008寫成
    變成連結上有一點問題
    想詢問這裡的高手 能否協助
    功能
    我想要一個VB2008程式 可以點選BUTTON開啟C#的程式
    先謝謝各位高手了
    2009年9月2日 下午 06:28

解答

  • 參考

    [C#][VB.NET] VB.NET 的程式透過 SendMessage 傳送資訊到 C# 的程式


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    • 已標示為解答 2009年9月8日 下午 08:16
    2009年9月3日 上午 03:15
    版主
  • 參考線上手冊的範例,SendKeys 作用的對象是目前作用中的視窗,所以 AppActivate 不可少:
    Dim ProcID As Integer
    ' Start the Calculator application, and store the process id.
    ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
    ' Activate the Calculator application.
    AppActivate(ProcID)
    ' Send the keystrokes to the Calculator application.
    My.Computer.Keyboard.SendKeys("22", True)
    My.Computer.Keyboard.SendKeys("*", True)
    My.Computer.Keyboard.SendKeys("44", True)
    My.Computer.Keyboard.SendKeys("=", True)
    ' The result is 22 * 44 = 968.
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 2009年9月8日 下午 08:16
    2009年9月6日 上午 11:23

所有回覆

  • 我用一個很簡單的方法~

    把C#程式弄成exe檔

    用vb 寫shell的方式

    我目前在家測試 是沒有問題的

     Shell("C:\4567\123.exe", vbNormalFocus)

    的確會開啟c#的程式
    2009年9月2日 下午 06:57
  • 我現在還有遇到一個問題

    我已經可以用VB開啟C#的程式

    但是 我想要用VB的那個程式 點選BUTTON2 控制C#裡的程式裡的按鈕

    (  BUTTON1是開啟C#程式  )

    需要怎麼寫BUTTON2的語法呢?

    先謝謝

    感恩~~
    2009年9月2日 下午 07:18
  • hi
    可以利用 sendmessage達成你的需求
    須引用user32.dll
    '自動傳送textbox內容給記事本
     Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
     Const WM_SETTEXT = &HC
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim hWnd As Integer
            context= Me.TextBox1.Text
            Dim hw As Long
            hWnd = FindWindow(Nothing, "未命名 - 記事本")
            hw = FindWindowEx(hWnd, 0&, "edit", Nothing)
            SendMessage(hw , WM_SETTEXT, 0, context)
            Me.TextBox1.Clear()
        End Sub
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年9月2日 下午 08:23
  • 我現在還有遇到一個問題

    我已經可以用VB開啟C#的程式

    但是 我想要用VB的那個程式 點選BUTTON2 控制C#裡的程式裡的按鈕

    (  BUTTON1是開啟C#程式  )

    需要怎麼寫BUTTON2的語法呢?

    先謝謝

    感恩~~
    1.將C#的button click事件設定為public。
     public void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show("Hello,C#!");
            }
    2.於VB.NET專案內將C#的執行檔加入參考。
    3.呼叫C#執行檔中的button click方法。
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim CShape As CShapeDemo.Form1 = New CShapeDemo.Form1()
            CShape.button1_Click(Nothing, Nothing)
        End Sub

    2009年9月3日 上午 02:19
  • 參考

    [C#][VB.NET] VB.NET 的程式透過 SendMessage 傳送資訊到 C# 的程式


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    • 已標示為解答 2009年9月8日 下午 08:16
    2009年9月3日 上午 03:15
    版主
  • 如果都是自己人開發的,在 C# 那個程式加入命令列參數會比較省事。
    不然至少 Button 名稱也要包含熱鍵,以便用 SendKeys 控制,用個 SendMessage 去呼叫 WM_MouseClick 滿辛苦的~
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月3日 上午 03:29
  • 我現在還有遇到一個問題

    我已經可以用VB開啟C#的程式

    但是 我想要用VB的那個程式 點選BUTTON2 控制C#裡的程式裡的按鈕

    (  BUTTON1是開啟C#程式  )

    需要怎麼寫BUTTON2的語法呢?

    先謝謝

    感恩~~
    1.將C#的button click事件設定為public。
     public void button1_Click(object sender, EventArgs e)
    
            {
    
                MessageBox.Show("Hello,C#!");
    
            }
    
    
    2.於VB.NET專案內將C#的執行檔加入參考。
    3.呼叫C#執行檔中的button click方法。
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim CShape As CShapeDemo.Form1 = New CShapeDemo.Form1()
    
            CShape.button1_Click(Nothing, Nothing)
    
        End Sub
    
    


    我第一先使用你的方法~

    是可以從VB 叫出 C的Hello

    但是我原本C的功能卻沒有反應

    只能一直叫出 Hello~~~

    不知道是我哪個步驟出錯還是怎麼了?

    還請高手能協助 謝謝
    2009年9月3日 上午 06:37
  • private void button5_Click(object sender, EventArgs e)
            {
                ++iCount;
                this.webCamPictureBox2.Image = this.webCamPictureBox1.Image;
                this.webCamPictureBox1.Image.Save("c:\\456\\" + iCount + ".jpg");
             }

    這是我C的 button的功能
    我vb 要能控制此按鈕的功能

    還請大大高手們能協助我  謝謝

    2009年9月3日 上午 06:41
  • To 成

    1. 使用 TerryChuang 所提供的方法無法達成您要的目的,他是去呼叫你 C# 程式中所提供的 button5_Click 事件,但是跟你已經執行的 C# 程式無關

    2. 其他網友的回答你好像都沒看到 ?


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/
    2009年9月3日 上午 07:11
    版主
  • To 成

    1. 使用 TerryChuang 所提供的方法無法達成您要的目的,他是去呼叫你 C# 程式中所提供的 button5_Click 事件,但是跟你已經執行的 C# 程式無關

    2. 其他網友的回答你好像都沒看到 ?


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/

    不好意思...我現在還在研究

    我先從感覺回覆比較簡單的方式著手 試試看

    我現在看到的是有兩種方式

    第一種 是 SendMessage
    第二種 是 SendKeys

    共兩種
    這兩種我還在研究當中 我還不是很了解

    不好意思~~

    也先謝謝各位高手的指導

    2009年9月3日 上午 07:52
  • To 成

    1. 使用 TerryChuang 所提供的方法無法達成您要的目的,他是去呼叫你 C# 程式中所提供的 button5_Click 事件,但是跟你已經執行的 C# 程式無關

    2. 其他網友的回答你好像都沒看到 ?


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/

    的確我的作法只能呼叫C#提供的方法,如果要模擬UI的操作,恐怕就不適合用這招了。
    2009年9月3日 上午 10:13
  • :::你有試試看將C#程式Compiler成Dll檔案,然後在VB.net加入參考的做法嗎???
    2009年9月3日 下午 11:31
  • 感謝各位大大的協助幫忙

    目前小弟我還在研究當中

    若我還是卡住的話~~

    還需要各位大大的教導了

    謝謝~~~^^
    2009年9月4日 上午 05:55
  • 如果都是自己人開發的,在 C# 那個程式加入命令列參數會比較省事。
    不然至少 Button 名稱也要包含熱鍵,以便用 SendKeys 控制,用個 SendMessage 去呼叫 WM_MouseClick 滿辛苦的~
    論壇是網友平等互助 保證解答請至 微軟技術支援服務

    很感謝您提供的方法
    對於我還是有一些問題
    1.C# 加入命令列參數
    2.button包含熱鍵這方面 感覺好像會比較好著手

    我程式不是很強 關於各位有說的DLL 其實我並不是很懂 很難著手寫
    我覺得感覺用上SendKeys控制 應該會比較簡單
    我查了資料~對於sendkeys的資訊不是很充足(這方面的資訊我比較沒查到)

    我變成無法下手對於sendkeys這個要如何控制c#
    還能請各位大大再給小弟能多一點的教導

    先謝謝各位
    2009年9月6日 上午 10:08
  • 參考線上手冊的範例,SendKeys 作用的對象是目前作用中的視窗,所以 AppActivate 不可少:
    Dim ProcID As Integer
    ' Start the Calculator application, and store the process id.
    ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
    ' Activate the Calculator application.
    AppActivate(ProcID)
    ' Send the keystrokes to the Calculator application.
    My.Computer.Keyboard.SendKeys("22", True)
    My.Computer.Keyboard.SendKeys("*", True)
    My.Computer.Keyboard.SendKeys("44", True)
    My.Computer.Keyboard.SendKeys("=", True)
    ' The result is 22 * 44 = 968.
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    • 已標示為解答 2009年9月8日 下午 08:16
    2009年9月6日 上午 11:23
  • 參考線上手冊的範例,SendKeys 作用的對象是目前作用中的視窗,所以 AppActivate 不可少:
    Dim ProcID As Integer
    
    ' Start the Calculator application, and store the process id.
    
    ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
    
    ' Activate the Calculator application.
    
    AppActivate(ProcID)
    
    ' Send the keystrokes to the Calculator application.
    
    My.Computer.Keyboard.SendKeys("22", True)
    
    My.Computer.Keyboard.SendKeys("*", True)
    
    My.Computer.Keyboard.SendKeys("44", True)
    
    My.Computer.Keyboard.SendKeys("=", True)
    
    ' The result is 22 * 44 = 968.
    
    
    
    

    論壇是網友平等互助 保證解答請至 微軟技術支援服務

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim ProcID As Integer
            ' Start the Calculator application, and store the process id.
            ProcID = Shell("123.exe", AppWinStyle.NormalFocus)
            ' Activate the Calculator application.

            AppActivate(ProcID)<<<<<這行就會跳出 找不到處理序'{0}'...這樣的問題
    不知道是我哪裡有錯誤 還煩請高手協助 謝謝

        
    2009年9月6日 下午 05:06
  • 畫面上是否看得到?
    PID 可用工作管理員檢查,預設沒這欄,從選單自訂欄位就可拉出這欄。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月6日 下午 05:24
  • 畫面上是否看得到?
    PID 可用工作管理員檢查,預設沒這欄,從選單自訂欄位就可拉出這欄。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    心冷大大

    不好意思 我不太懂您的第二句話,我有開工作管理員,到處理程序,就不太懂您的意思了

    不過點選Button1 是可以執行跳出c#的程式
    不過就是會跳出
    Image Hosted by ImageShack.us

    有圖不過..不知道有沒有成功

    有點不太懂這段的意思

    這個方法可以叫出c#程式

    可是我這樣還要多加什麼程式進去

    才能從vb裡的button控制c#的程式裡的其中一個按鈕呢?

    我程式的c#是一個webcam的程式

    裡面有個功能是拍照的功能

    我想要的是我能從vb開啟此程式後

    還可以從vb的程式裡點選按鈕做拍照

    不知道這樣子會不會比較清楚呢?

    還是先謝謝各位大大了~
    • 已編輯 2009年9月6日 下午 09:02
    2009年9月6日 下午 08:48
  • 剛剛稍早我自己覺得有一點點的突破

    關於心冷大大之前講的

    Button 名稱也要包含熱鍵<<<

    我現在有在C#的拍照的按鈕 有做出熱鍵

    也就是我可以按F7 C#就可以拍照了

    不過還是一樣 沒有辦法從vb裡的程式選按鈕 做拍照的動作

    還要勞煩各位大大們的協助

    謝謝..感恩
    2009年9月6日 下午 08:53
  • 你的錯誤訊息表示 ProcID 為 0 ,請配合工作管理員檢查。
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    2009年9月7日 上午 07:01
  • 參考

    [C#][VB.NET] VB.NET 的程式透過 SendMessage 傳送資訊到 C# 的程式


    .NET菜鳥自救會 http://www.dotblogs.com.tw/chou/

    小歐~很感謝您提供的範例檔

    目前我已經使用您給我的範例檔

    已經修改完成~目前已經可以用VB的按鈕控制C#

    也很感謝大家的協助幫忙~^^

    真的很開心

    若之後還有遇到什麼樣的問題

    還煩請各位高手不吝嗇的指導

    先謝謝 非常的感恩

    2009/09/09 04:12 成
    2009年9月8日 下午 08:16