none
以VB程式來獲得其他程式彈出的訊息視窗的內容 RRS feed

  • 問題

  • 請問各位先進,情形是這樣的,有一個儀器是用來接收一個控制板的IO資訊來判斷控制板的控制程式是否正確,儀器提供Client端的程式在測試的過程中會彈出提示視窗來指示使用者手動操作相應的控制板的操作,請問是否有方法來獲得彈出視窗的文字內容來簡化使用者的操作?
    2012年11月22日 上午 09:07

解答

所有回覆

  • 2012年11月22日 上午 09:46
  • 感謝回覆,請問得知訊息視窗已經出現之後要如何用讀取訊息的字串內容?能夠傳送鍵盤動作到訊息視窗嗎?

            Dim hwd1 As IntPtr
            hwd1 = FindWindow(vbNullString, "Step1")

            If Not hwd1.Equals(IntPtr.Zero) Then
                      //要如何讀取訊息的字串內容或傳送鍵盤動作
            End If

    2012年11月22日 下午 05:48
  • 先用 Visual Studio 提供的 Spy++ 查目標視窗。

    針對該視窗用 GetWindowText 看可不可以抓,基本上能抓的話 Spy++ 會有。

    如果不能抓,例如是畫上去的,就不用試了。

    如果能抓,依照 Spy++ 樹狀目錄來檢討使用 FindWindowEx 還是 EnumWindow 之類的函數來用。


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


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年11月22日 下午 11:56
  • 鍵盤內容可以用 Spy++ 錄製動作,然後手動操作一次,過濾到底是哪個,送到哪個視窗,確認後用 SendMessage 來處理。


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


    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。

    2012年11月22日 下午 11:57
  • 看看這個範例有沒有幫助:Controlling another application in VB.NET

    2012年11月23日 上午 08:43
  • 我有做過 跟你類似的事 

    因為大陸工廠的作業員看不懂英文 燒錄的時後常常亂按

    也不懂的看燒錄的結果對不對  所以我當時寫了一個外掛的程式

    第一個就是使用  FindWindow 去抓取Handle

    我第二個是去搜尋記憶體    去找物件記憶體的位置 如你輸出的字串   label1.text=XXXX  

    基本上label1的記憶體位置在這台電腦上每次開啟來都是一樣的 但在不同的電腦 會不一樣

    所以我在初始化會去搜尋一下

    找到的話就能去判斷訊息  接下來就是送出你要的字串

    Dim WindowsHandle As IntPtr = FindWindow(vbNullString, "MPLAB IDE v8.56 - [Output]")

    GetWindowThreadProcessId(WindowsHandle, Process_ID)
     Process_Handle = OpenProcess(PROCESS_ALL_ACCESS, False, Process_ID)

    h = Form1.ReadProcessMemory(Form1.Process_Handle, j, buffer, buffer.Length, bytesRead)

    (J就是你搜尋到的啟始位置)  把它讀出來做比對  在送出你要的字串

    (因為它的編譯器可能是16位元或32位元的 所以要試一下)

     SetForegroundWindow(WindowsHandle)

    SendKeys.SendWait("%G")

    你會用到的應該就這幾個API  其它自己去完成吧

    2012年11月27日 上午 03:42
  • 感謝以上前輩的回覆,程式已大致完成了,但有一個問題想要請教,就是使用Sendkeys.sendwait({Enter})到另一個視窗按按鈕,有時候並不會成功,請問問題可能是在什麼地方?
    2012年12月4日 上午 02:30
  • 您好

    如果你要使用 SendKeys,請確認你的視窗是當前 Active、最上層且獲得 Focus 的視窗


    歡迎參觀我的Blog【菜鳥自救會】 【粉絲專頁】

    2012年12月4日 上午 03:29
    版主
  • to小歐ou
    您好,我會傳送類似下面這樣的指令

    Sendkeys.sendwait({Enter})

    Sendkeys.sendwait("211")

    Sendkeys.sendwait({Enter})

    我有試著使用SetForegroundWindow(hWnd1) 和 AppActivate("Step1")
    但是指令有時候會有些沒有傳過去

    2012年12月5日 上午 03:36
  • 你把你使用的指令當關鍵字搜尋就可以看到很多既有討論。例如這篇:

    [VB 2010] Sendkeys 問題 http://social.msdn.microsoft.com/Forums/zh-TW/232/thread/99d3dbf2-edca-4232-803e-f4d9df6a0f96

    T.L. Cheng

    2012年12月15日 上午 09:10
    版主