關於我第一次創作的背景。這是一個基於C#的啓動程序,它允許在主要家庭影院媒體播放器(在我的情況下,Plex,MediaPortal和Kodi)之間輕鬆切換,這樣它們都可以用於各自的優點(Plex用於下載內容,MediaPortal用於電視錄音和電視直播,科代所有其他,通常是流媒體)。
這些應用程序使用pssuspend暫停,這意味着它們可以全部保持打開狀態,這對於慢速計算機來說非常適用。VisualStudio窗口切換所需的調試
用戶按一個按鈕(在他們的遙控器上)切換回啓動器來選擇另一個應用程序。
我差不多在一個可用的版本,但我有一個問題,我已經縮小了一段時間。
如果我的啓動程序切換到應用程序(使用下面提到的方法),我不能切換回我的啓動程序進程。
- VisualStudio中沒有調試或 「Visual Studio中宿主進程」(進程的vshost版)是不運行:
這僅時發生。
- 鍵盤/遠程輸入已經被應用到應用程序切換到
- 即:如果我下移到應用程序隨時隨地切換到我可以回去發射正常,但只要我還有內按什麼我無法切換的應用程序。
- 切換出切換到的應用程序,而不是從啓動器進入它。
在所有其他時間,一切都按預期工作。
要切換,我目前使用SwitchToThisWindow(IntPtr hWnd, bool fAltTab)
(從http://www.pinvoke.net/default.aspx/user32/SwitchToThisWindow.html)。我也使用Microsoft.VisualBasic.Interaction.AppActivate
(來自http://msdn.microsoft.com/en-us/library/x9784w8e(v=vs.100).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1)。
這兩者都有相同的結果。
事情我已經證實是不相關的問題:
- pssuspend:如果我沒有切換回到啓動前暫停運行應用程序,同樣的事情發生
- 操作系統和計算機:我在3臺計算機上發生相同的問題,我的Windows 8安裝和兩個Windows 7安裝
- 監聽器返回到主屏幕:這是使用來自EventGhost的UDP廣播並執行其他所有需要完成的操作,例如更新在發射器上的接口,只是不切換到發射器
- 在本地機器上編譯:我最初認爲這有幫助,但僅僅是因爲上述情況。只要該vshost進程處於打開狀態,我的Windows 8計算機上編譯的版本就可以在Windows 7上正常工作。我還沒有嘗試過任何其他系統。
- 以管理員身份運行並沒有產生效果
的東西,不應該是一個問題,但爲了以防萬一,應注意的是,發射器的前端是全部採用CefSharp(CEF是Chrome瀏覽器的集成版本)。 雖然在添加之前發生了問題。
自己的潛力的想法:
- 由於在
AppActivate
提到的事,我才意識到的UIPermission水平可能無所謂,但是手動將其設置爲完全信任不作任何改變。
我也意識到在VisualStudio中,「安全性」的屬性設置爲使用「OneClick安全性」設置,並且位於「這是一個完全信任的應用程序」選項。 這對我來說是有道理的,因爲調試器會給它提供這些提升的權限,但大概這應該在沒有調試運行的情況下工作。
的我的應用程序切換上下文中的某些代碼:
[DllImport("user32.dll", SetLastError = true)]
static extern void SwitchToThisWindow(IntPtr hWnd, bool fAltTab);
static Process currentProcess = Process.GetCurrentProcess();
public static void SwitchToApplication(Process toSwitchTo)
{
SwitchProcess(toSwitchTo);
}
public static void SwitchToLauncher()
{
FrontendBridge.GetInstance().Reset();
SwitchProcess(Process.GetCurrentProcess());
Taskbar.Hide();
}
private static void SwitchProcess(Process toSwitchTo)
{
if (currentProcess == toSwitchTo)
return;
if (toSwitchTo.MainWindowHandle != IntPtr.Zero)
{
SwitchToThisWindow(toSwitchTo.MainWindowHandle,true);
}
currentProcess = toSwitchTo;
}
希望有人有一些想法,或者已經在過去類似的問題。
如果您需要任何附加信息或源代碼位,請告訴我。
不要使用'SwitchToThisWindow'。研究更多的選擇。也可以嘗試以管理員身份運行以查看是否有差異。 – SimpleVar
感謝您的評論。如上所述,我嘗試了兩種不同的方法,但結果相同。我也嘗試作爲管理員運行,這並沒有什麼區別(將更新上面這個)。 – user3550959