none
關於用網頁控制windows from 程式!! RRS feed

  • 問題

  • 不知道有沒有辨法,直接從網頁上直接控制遠端開發的vb.NET
    小弟最近想研究這個! 但是不知道方面!!
    不知道沒有相關的資源呢?!!
    謝謝
    2006年6月23日 下午 02:29

解答

  • 你的意思是類似 vnc 嗎?

    若是指這類當然可以。

    Windows Server 有內建,終端機服務就可以用網頁登入。

    當然也可以裝 vnc , ibm 這類現成有網頁登入的介面。

    自己要做也是可以,不過這類做起來會花很多時間,要接觸的東西也涉及很廣。

    比如說登入時,到底要像 微軟 那種以不同使用者登入還是使用目前登入使用者桌面等。

    使用者滑鼠動作反而是比較單純的,但是螢幕畫面就很麻煩,當然不可能用 bmp ,要不要減色輸出?要採用哪種壓縮方式傳遞?重繪動作是以全視窗還是以目前重繪區域為主?

    一開始可以考慮以目前登入使用者畫面來開始實做,畫面存成 png 送出,但是馬上就會發現流量驚人,後面的問題就開始浮現。

    實做一個有效率的系統,必須對 GDI 函數精熟,雖然用 .Net 寫,但是基本上大多數的功能都必須直接呼叫 API 比較快,甚至對系統做 WndProc 的攔截,以便取得最小重繪區域,此外針對圖面偵測,以便選擇圖面壓縮的方式,滑鼠動作反而問題比較小,鍵盤動作比較複雜的是 ctrl+alt+del 的攔截與轉傳。

    如果用 IE 會比較單純,鍵盤的特殊功能鍵動作可以用 ActiveX 去攔截,滑鼠倒是用 Javascript / VBScript 就可以偵測,區域重繪可以只更新特殊範圍,例如選單跳出,若是想要讓 Firefox 共用,則 Server 輸出就不能直接以整張圖面為單位輸出,而是以表格將畫面切成多塊,重繪動作以小區塊為單位更新,但是切割多塊畫面會造成總傳輸量增加,如何選擇適度的大小分割,就要經驗跟知識的累積。

    2006年6月25日 上午 10:00
    版主
  • 如果是這樣的話,看看你存取資料的密度及屬性變更是否有即時性

    比如說,沒有即時性,定時掃瞄某個資料庫,定時為某個秒數,當網頁變更該資料庫該欄的屬性值後,在下一個掃描的秒數時更新屬性,適用於 Windows 執行檔。

    另一種是封裝一個 dll 物件存取 com port ,直接用 aspnet 存取這個物件,不過不適用於持續執行的程式。

    另外有即時性的方法,比如說 a 為 window form 的程式,定義滑鼠中鍵取得的 x,y 位置代表意義,然後程式碼直接寫在 Mouse_Down 內,可以免去寫自訂事件的麻煩,在 aspnet 那邊用 findwindow + sendmessage ,用此法可能需要調高該 aspnet 應用程式的權限。

    2006年6月25日 下午 03:06
    版主

所有回覆

  • 不太了你的意思 ... 可否說明清楚些 ?
    2006年6月25日 上午 02:14
    版主
  • 小弟的意思是說!!

    ASP.NET與VB.NET有沒有能力製作可以用任何瀏覽器或作業系統觀看的網頁,以便在遠端監督及控制其測試和量測應用程式。

    能不能直接從網頁控制本地端的電腦上做一些動作,

    像是ip攝影機這一類的運用,使用者不需要另外安裝軟體,只要透過IE或是FIREFOX這一類瀏覽器

    就可以監控固定ip上的程式,或是控制讓是要用SOCKET類別嗎?

    還是說這樣的功能,是做不到的嗎?!!

    謝謝!!

    2006年6月25日 上午 06:58
  • 你的意思是類似 vnc 嗎?

    若是指這類當然可以。

    Windows Server 有內建,終端機服務就可以用網頁登入。

    當然也可以裝 vnc , ibm 這類現成有網頁登入的介面。

    自己要做也是可以,不過這類做起來會花很多時間,要接觸的東西也涉及很廣。

    比如說登入時,到底要像 微軟 那種以不同使用者登入還是使用目前登入使用者桌面等。

    使用者滑鼠動作反而是比較單純的,但是螢幕畫面就很麻煩,當然不可能用 bmp ,要不要減色輸出?要採用哪種壓縮方式傳遞?重繪動作是以全視窗還是以目前重繪區域為主?

    一開始可以考慮以目前登入使用者畫面來開始實做,畫面存成 png 送出,但是馬上就會發現流量驚人,後面的問題就開始浮現。

    實做一個有效率的系統,必須對 GDI 函數精熟,雖然用 .Net 寫,但是基本上大多數的功能都必須直接呼叫 API 比較快,甚至對系統做 WndProc 的攔截,以便取得最小重繪區域,此外針對圖面偵測,以便選擇圖面壓縮的方式,滑鼠動作反而問題比較小,鍵盤動作比較複雜的是 ctrl+alt+del 的攔截與轉傳。

    如果用 IE 會比較單純,鍵盤的特殊功能鍵動作可以用 ActiveX 去攔截,滑鼠倒是用 Javascript / VBScript 就可以偵測,區域重繪可以只更新特殊範圍,例如選單跳出,若是想要讓 Firefox 共用,則 Server 輸出就不能直接以整張圖面為單位輸出,而是以表格將畫面切成多塊,重繪動作以小區塊為單位更新,但是切割多塊畫面會造成總傳輸量增加,如何選擇適度的大小分割,就要經驗跟知識的累積。

    2006年6月25日 上午 10:00
    版主
  • 這邊有一些可以用在 Server 端的範例:

    滑鼠模擬:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Module&Module=32

    螢幕擷取:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=25&Function=202

    轉圖檔的話,用 Graphic 存成 png 到 Stream 或是位元陣列。

    輸出圖檔:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=8&Function=43

    這上面都是各片段的功能,作業級的,大概再加點程式碼及流程控管可以完成,不過很吃流量。

    2006年6月25日 上午 10:10
    版主
  • 感謝璉璉大大的指點:
    可惜的是,小弟並不是要開發類似VNC的軟體,沒有那麼復雜 
    小弟在電腦上已經用vb.NET開了一個可以透過rs232來擷取數據跟控制的程式
    現在就是想透過網頁來控制這個程式,而不用讓使用者另外安裝軟體
    但是不知道要如何下手,是用ASP.NET有辨法做到嗎?
    VB.NET這邊要多寫什麼樣子的程式呢?
    謝謝

    2006年6月25日 下午 12:56
  • 如果是這樣的話,看看你存取資料的密度及屬性變更是否有即時性

    比如說,沒有即時性,定時掃瞄某個資料庫,定時為某個秒數,當網頁變更該資料庫該欄的屬性值後,在下一個掃描的秒數時更新屬性,適用於 Windows 執行檔。

    另一種是封裝一個 dll 物件存取 com port ,直接用 aspnet 存取這個物件,不過不適用於持續執行的程式。

    另外有即時性的方法,比如說 a 為 window form 的程式,定義滑鼠中鍵取得的 x,y 位置代表意義,然後程式碼直接寫在 Mouse_Down 內,可以免去寫自訂事件的麻煩,在 aspnet 那邊用 findwindow + sendmessage ,用此法可能需要調高該 aspnet 應用程式的權限。

    2006年6月25日 下午 03:06
    版主
  •  璉璉 寫信:

    如果是這樣的話,看看你存取資料的密度及屬性變更是否有即時性

    比如說,沒有即時性,定時掃瞄某個資料庫,定時為某個秒數,當網頁變更該資料庫該欄的屬性值後,在下一個掃描的秒數時更新屬性,適用於 Windows 執行檔。

    我即時性應該不是太需要因為我的動作都是階段性的

    璉大您的方法是指說,利用網頁去改變資料庫特定欄位的資料,然後我在電腦的程式中寫好,每隔固定的秒數去讀取這個資料,然後來進行我程式的控制或是監控是這樣子的意思嗎?!!

    THANKS*

     

    2006年6月25日 下午 04:06
  • 是的,這是最簡單的,前面只提到參數變更,你要看結果的話,一樣可回寫到資料庫,再由資料庫內抓出來展示。

    當然,若是你的程式可以任意終結,你還可以用

    Process.Start 來啟動

    Process.Kill 來終結

    注意:在 ASP.NET 呼叫啟動的程式會以該帳號的權限執行,若需調高權限,可考慮在 web.config 中使用較高權限的使用者。

    2006年6月25日 下午 11:57
    版主
  •  璉璉 寫信:

    是的,這是最簡單的,前面只提到參數變更,你要看結果的話,一樣可回寫到資料庫,再由資料庫內抓出來展示。

    當然,若是你的程式可以任意終結,你還可以用

    Process.Start 來啟動

    Process.Kill 來終結

    注意:在 ASP.NET 呼叫啟動的程式會以該帳號的權限執行,若需調高權限,可考慮在 web.config 中使用較高權限的使用者。

    小弟對於asp.NET並不是很熟,所以不太懂
    關於璉大寫到這個方式Process.Start 來啟動,Process.Kill 來終結。
    要如何實做呢?!! 還是說也是透過字串儲存到資料庫。
    另一件事就是小弟最近剛剛在接觸ASP.NET,想請問一下權限設定的問題。
    因為往往都是iis上的權限設定,讓我的程式無法執行,所以想請教一下,有沒有相關的文章可以拜讀一下
    謝謝

    2006年6月26日 上午 06:16
  • 通常我若是會碰上權限問題時,我會先拿管理者來 try ,等到程式部份沒問題後,在開始調降權限

    ex. 設定 web.config

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.web>
     <identity impersonate="true" userName="Administrator" password="xxxxxxxxxxxxxxxxxx" />   
      </system.web>
    </configuration>

    web.config 可僅授予某個子目錄權限,例如某個子目錄作檔案管理功能,需要特別調高權限,則應用程式目錄的 web.config 不需要改,只要把上面東西貼到子目錄下,產生一個 web.config 即可,未宣告的部份會繼承根目錄的宣告。

    註:這邊密碼是馬賽克,不是 web.config 幫你加密,在 web.config 裡面要用明碼。

    2006年6月26日 上午 07:49
    版主
  • 我需要做一個類似Rocksan的控制,不過我的程式是即時性的。請問有沒有更詳細的TUTORIAL或範例可供參考, vnc 也可。

    謝謝!

     

    2006年11月25日 上午 02:43