2008-10-08 127 views
0

我有一個管理病人人口統計信息的應用程序。隨着這些數據,用戶可以掃描患者的圖片並將該圖片分配給患者。當用戶單擊掃描按鈕時,會打開一個單獨的應用程序作爲對話框來掃描圖像。在XP上運行時,一切正常。成像應用程序加載良好並獲得了關注。然而,在Vista上,成像應用程序偶爾不會獲得關注,並會在主應用程序後面彈出。當運行全屏或通過2008 Application Server時,您看不到該應用程序,您只會看到一個鎖定的屏幕,看起來什麼都沒有發生。有什麼辦法可以改變Vista上的窗口焦點管理以按照XP的方式工作嗎?我正在尋找一種方法來解決這個問題,如果可能的話,在不改變實際應用的情況下。Vista窗口焦點問題

回答

0

您可以迭代所有頂級HWND並通過其窗口類識別掃描應用程序,然後發送適當的消息以提升窗口。

1

我認爲您必須對您的應用程序進行更改才能讓映像應用程序關注焦點。我將假設您的應用程序通過ShellExecuteCreateProcess啓動映像應用程序。如果是這樣,您可以通過SHELLEXECUTEINFO.hProcess(對於ShellExecute)或PROCESS_INFORMATION.hProcess(對於CreateProcess)獲得已啓動進程的進程句柄。發射後立即成像應用程序調用API AllowSetForegroundWindow

AllowSetForegroundWindow(GetProcessId(hProcess)); 

這將使成像應用來放置它的主窗口/對話框中的前景時,它的啓動。

1

你可以嘗試以下步驟:
1.右鍵單擊EXE
2.選擇屬性
3.選擇兼容性選項卡
4.檢查運行該程序在campatibility模式:
5.選擇Windows XP(Service Pack 2)

+0

我無法這樣做,因爲此應用程序必須能夠從網絡驅動器運行,並且您無法在存儲在網絡驅動器上的應用程序啓用兼容模式。 – 2008-10-08 20:59:29

0

我不相信這是Vista與XP相關的。我認爲,簡單來說這個圖像應用程序需要更長的時間才能在Vista上啓動 自Windows 2000以來,窗口管理器已阻止後臺應用程序竊取前臺。當一個應用程序啓動時,它有一個機會創建和顯示一個窗口,將採取前景。如果需要太長時間,窗口管理者認爲當前窗口應該保持前景,並禁止其他應用程序在最終啓動時處於前景。

我想不出任何具體的方法來避免這種情況...除了在啓動應用程序之後使用FindWindow搜索其他應用程序窗口。當你最終找到它時,調用SetForegroundWindow將它帶到前臺。

+0

由於主窗口線程在成像應用程序打開時被鎖定,因此它不應阻止對焦點的竊取。在XP中這是真的,所以它在XP上根本不會發生。 Vista的DWM通常比XP更好,因爲它將Windows視爲容器,這隻會導致這種情況下的問題。 – 2008-10-15 13:53:00