2012-03-11 67 views
0

如何檢測當前會話是否是VB6應用程序中的終端服務(遠程桌面)會話?如何檢測是否在VB6的終端服務會話中?

+0

你可以嘗試迫使窗口恢復(未最大化)負載狀態,看看是否有幫助。 – Deanna 2012-03-12 12:07:27

+0

你是什麼意思? 'Form.WindowState'或一些API調用? – CJ7 2012-03-12 12:20:21

+0

是的,'Form.WindowState = vbNormal'。 – Deanna 2012-03-12 12:29:59

回答

3

使用SM_REMOTESESSION標誌調用GetSystemMetrics function會告訴您應用程序是否在終端服務會話中運行。

要調用從VB 6,你需要聲明它的模塊中,像這樣:

Const SM_REMOTESESSION As Long = &H1000 
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long 

如果您在終端服務環境中運行,返回值將是非零。

...但是,您應該確實修復您的居中代碼,而不是試圖通過不同的行爲解決此問題,具體取決於您是否在終端服務會話中運行。這隻會爲你帶來更多的工作,並引入更多的錯誤。不幸的是,我無法告訴你,如果您使用的是居中代碼而沒有看到它有什麼問題。

+0

@克雷格:這不是鏈接問題的答案。問題是您的代碼中心窗口不正確。它做出了一些正常工作的假設,但在終端服務下運行時會崩潰。 – 2012-03-12 07:07:16

+0

@克雷格:啊,我明白你在說什麼了。您沒有編寫表單居中代碼,您正在設置屬性並讓VB處理它。所以這個錯誤在於VB關於屏幕座標的假設,而不是你可以修復的東西。是的,我瞭解TS配置工具的含義,但這並不能改變居中代碼錯誤的事實,只是如果您無法訪問源代碼,則可以解決此問題。 – 2012-03-12 09:41:47

+0

最好的辦法是使用'SPI_GETWORKAREA'手動對齊表格。VB忽略任務欄停靠位置並且不會在分辨率更改時重新加載屏幕大小。你的bug不太常見,也沒有那麼令人討厭。 – wqw 2012-03-12 15:07:39

0

我有同樣的問題。據我瞭解,你的表單將你想要的東西放在你想要的地方(例如屏幕中央)。您的應用程序在普通桌面上運行良好,但在終端環境中將會最大化。如果是這樣,我發現了一個小竅門。把一個計時器該窗體上,使其interval=1timer1_timer事件

Me.WindowState = 0 
'then put the movement code like this 
formname.Top = (Screen.Height/2) - (formname.Height/2) -400 '(400 for form title bar) 
formname.Left = (Screen.Width/2) - (formname.Width/2) 
timer1.interval=0 
timer1.enabled=false 

就是這樣寫的。 [email protected]

+1

我通過向表單加載和激活事件添加了'Form.WindowState = vbNormal'來解決了這個問題。 – CJ7 2012-06-03 03:01:21

相關問題