2010-03-10 62 views
1

我想用我的手機發送條形碼到我的電腦。我的電腦有一個簡單的服務器運行,它監聽條碼。當條形碼到達時,服務器應用程序應該能夠將接收到的條形碼的值輸入到活動應用程序中(我並不關心哪個應用程序將獲得輸入,用戶應該能夠選擇gedit,終端窗口或瀏覽器如果他們選擇)。從java(或其他平臺)發送字符串到應用程序

我的語言目前是GNU/Linux(Ubuntu)上的Java,所以我知道Robot類。但是Robot類模擬鍵盤,這意味着:當您在美國鍵盤佈局上發送VK_1時,確實輸出爲'1',但是當您在另一個佈局(比如我使用的比利時語)上發送VK_1時,需要進行移位'1'鍵,輸出'&'(這是'1'鍵上的字符,當你沒有按住Shift鍵時)。

我也發現了xsendkeys,但是這個應用程序也要求你指定是否需要保持移位。所以它可以發送一個'a',但是發送一個'A'(因此大寫),你需要指定你想用你的'a'進行轉換。

是不是一個簡單的方法來做到這一點,對於GNU/Linux和Windows,只是使用字符串。我希望能夠將「12a68dd」發送到活動應用程序。我也希望能夠將UTF-8字符發送到活動應用程序。

我一直在尋找一個解決方案,但大多數需要按鍵擊穿,這往往取決於鍵盤佈局。

+0

跟進:因爲做這件事並不容易,定製鍵盤內核模塊會是一個更簡單的解決方案嗎?我想不是,但編碼起來可能很有趣。但是再次,在學校他們告訴我們:內核模塊可以燒你的CPU。 (不知道這是否是真的,或者你是否真的有這種感覺)所以我不太願意這樣做。 – MrSnowflake 2010-03-10 22:19:35

回答

0

只想讓你知道我的sollution:

從Java調用輸入xvkbd -text並給予文字作爲論點。如果文本包含空格,我會在xvkbd -text \ [space]內調用xvkbd多次。

我目前的方式很容易「移植」到windows,所以不會太難以使用SendKeys VB應用程序運行。

謝謝大家的幫助!

0

我可能沒有完全掌握你的問題,但是你想分開用Java編寫的應用程序來交換信息嗎?我建議你閱讀關於RMI的文章,這是爲了達到目的。

+0

這不是主意:)。我有一個Java應用程序的服務器,它應該發送擊鍵到任何其他可能的應用程序。服務器部分僅用於從我的手機實際接收條形碼。 但謝謝你的時間。 – MrSnowflake 2010-03-10 13:09:13

+0

啊,我不確定這是可行的...它可能不會很優雅。如果所涉及的所有應用程序都是Web服務,那麼您只是喜歡。 – mikek 2010-03-10 16:08:02

+0

當然這是可行的,你的鍵盤驅動程序/內核模塊這樣做:)。儘管我希望這很容易,就像在Internet上傳輸的Visual Basic SendKeys示例一樣。 – MrSnowflake 2010-03-10 22:21:46

1

好像你想要能夠發送任意鍵盤序列到任何可能的應用程序。有了這個,我不能幫你(你應該尋找「Java UI測試自動化」來找到任何合適的工具),但是如果你發送字符串的應用程序在它的標準輸入上聽它,我會去:

// Example: send your string to "cat" (or "type" on Windows), which simply prints it. 
Process spawned = ProcessBuilder.command("cat" /*No arguments*/).start(); 
spawned.getOutputStream().write(yourString.getBytes("UTF-8")); 

簡單的stdin/stdout重定向,換句話說。

+0

這隻適用於控制檯應用程序否? 我的想法是讓服務器在網絡表單的輸入字段中或者在文本編輯器中輸入一些條形碼。 感謝您的提示,但我會看看測試自動化。 – MrSnowflake 2010-03-10 13:10:07

+0

正如另一張海報所說,簡短的回答是你不能提供任何可能的應用程序的輸入。 *這不僅對於Java而言,而且對整個IT行業來說都是不可能的。這就是爲什麼人們正在開發各種協議(比如Web服務,RMI,IIOP等),以允許他們的應用程序「向」理解「這些協議的其他應用程序」發言「(將其視爲人類語言;您首先應該學習日語,如果你想聽並理解它)。您可能會發現任何UI自動化測試工具都將綁定到特定的操作系統或GUI工具包。你被警告了。 :) – dimitarvp 2010-03-10 14:07:18

+0

...和順便說一句,不,這不會僅用於控制檯應用程序。 *這將適用於所有真正閱讀stdin流*的應用程序*。每個應用程序都有stdin/stdout/stderr流,即使是GUI應用程序(沒有控制檯界面),但並非所有應用程序都在讀取/寫入流。 – dimitarvp 2010-03-10 14:09:02

1

如果我理解正確,您希望將一系列字符發送到另一個應用程序(目標)。這個目標可能是任何應用程序,並且您可能無法訪問其源代碼。

答案根本不是。

關鍵筆劃不同於字符(我收集你可能已經計算出來)和機器人僅用於調用擊鍵。這些擊鍵的輸出結果通常是不同的,因爲大多數使用的鍵盤不遵循鍵盤的ISO標準。

經常有完成相同的其他方式影響,雖然,通過API,文件IO等

相關問題