2010-06-01 87 views
2

我想讓我的應用程序最小化,以便在按下熱鍵時捕獲在另一個應用程序窗口中選擇的數據。我的應用程序絕對沒有重點。另外,當按下熱鍵時,我想呈現一個淡出的彈出窗口(Outlook樣式),所以我的應用程序永遠不會焦點。VB.net中的全局熱鍵捕獲

至少我想捕獲窗口名稱,進程ID和選定的數據。有焦點的應用程序不是我的應用程序?

我知道一個選擇是嗅探剪貼板,但有沒有其他解決方案。

這是審計數據輸入到另一個我無法控制的系統的速率。它是一個大型機模擬客戶端程序(attachmate又名java支持3250支持的telnet)。

該計劃是應用X.

    1. 完整數據輸入選擇應用程序X中的屏幕,該屏幕是數據條目(事務ID)證明的某些部分。
    2. 按下魔術熱鍵,然後'發送'選擇到我的應用程序。
    3. 從System.environment或system.Threading我可以找到Windows登錄。
    4. 同樣我也可以捕捉時間。
    5. 所有的數據將被記錄到SQL。
    6. 一旦完成顯示Outlook風格彈出說,數據錄入已被記錄。

    任何想法。

  • +0

    我現在就在這上面工作! :-) – ggonsalv 2010-06-01 21:07:06

    +0

    在App X中選擇屏幕的某個部分可能會提供數據輸入的證據,當然不能證明。 – hemp 2010-06-01 22:27:41

    +0

    實際上我從主框架應用程序獲得一個Feed。交易ID是單調遞增的數字,不能僞造。對於給定的數據輸入日期,只能有一個唯一的(認爲是自動編號/身份)交易ID,我可以根據該提要進行驗證。 – ggonsalv 2010-06-01 22:48:07

    回答

    0

    這聽起來像你需要建立一個全球性的鍵盤鉤子捕獲熱鍵這段代碼項目介紹瞭如何做到這一點(在C#中,但它不是太大的區別): http://www.codeproject.com/KB/cs/globalhook.aspx

    然後你可以使用FindWindow API查找其他應用程序窗口,然後找到包含「交易ID」的控件並使用WM_GETTEXT消息從中複製文本。

    +0

    我試圖吸取數據的應用程序是一個Java小程序。既然有控制本身,任何想法。似乎只有一個頂級窗口/ SunAwtCanvas類型的句柄。在記事本或任何常規的Windows應用程序中,我會看到每個控件的實際句柄,但不在applet的情況下。 – ggonsalv 2010-06-02 21:06:30

    1

    掛鉤鍵盤/鼠標&屏幕抓取幾乎是你可以用applet做什麼的限制。記住Java被編譯爲字節碼並在JVM中運行。由於JVM的特性,可移植性和安全性問題,您無法真正訪問小程序中的任何內容。您可能會從.Net中看到的是一個沒有孩子的「SunAwtFrame」分類窗口。

    重點是可行的,只需使用SendMessage(&其他)API在後臺執行所需的操作,只要不改變焦點,它就會保持不變(即運行代碼不需要焦點)

    就數據提取而言,它將歸結爲是否可以使用某些(可能是核心)圖像處理從屏幕提取該信息。 Applets是一種無人地帶(來自.net atleast),沒有JavaWindow.Textbox.GetAStringForMePlease()。

    爲了記錄,如果您物理控制小程序,則存在例外。在這種情況下,您可以製作一種小程序外殼來鉤住小程序的內容。