Korzystam z programu „SoftXPand 2011 Duo” firmy Miniframe na komputerze z systemem Windows 7. Tworzy dwie stacje robocze z jednego komputera. Korzysta z usług terminalowych wbudowanych w Windows, aby utworzyć dodatkową sesję. Używam dwóch ekranów, dwóch klawiatur i dwóch myszy, aby stworzyć tę „iluzję” dwóch komputerów. Działa całkiem dobrze i mogę nawet grać w dwie różne gry 3D na dwóch ekranach podłączonych do tej pojedynczej maszyny (używając Radeon HD5770 i Core i5 2500k z 8 GB pamięci RAM).
Jest kilka wad tego. Właśnie znalazłem o jednym, który jest ukryty przy pierwszym spojrzeniu. Sesje, w których jesteś (nawet na pierwszej stacji roboczej) będą identyfikowane jako sesja serwera terminali! Teraz niektóre programy będą działać z ograniczonymi efektami (graficznymi), a niektóre w ogóle nie będą działać.
Spowodowało to również, że niektóre gry w ogóle nie działały. Mówią tylko: „Nie można uruchomić w sesji serwera terminali” i kończą pracę. Udowodniłem już, że najlepsze współczesne gry (DirectX 10, 11) działają tak samo dobrze, jak na tej samej maszynie bez SoftXPand, więc jest to dość sztuczne ograniczenie!
Czy mogę w jakiś sposób zhakować bieżącą sesję, aby nie wyglądała ona jak sesja serwera terminali? TO ZNACZY
#include <windows.h>
#pragma comment(lib, "user32.lib")
BOOL IsRemoteSession(void)
{
return GetSystemMetrics( SM_REMOTESESSION );
}
Zwróci FAŁSZ? (To nie jest pytanie programistyczne! Tylko przykład, jak programy wykrywają, czy są w sesji serwera terminali!)
źródło
Odpowiedzi:
Istnieje kilka sposobów sprawdzania, czy aplikacja działa w sesji serwera terminali. Niektóre z nich możesz zhakować, jak poniżej:
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\TSAppCompat
.Tego klucza brakuje w normalnej sesji na moim pulpicie.
Możesz spróbować go usunąć, jeśli możesz.
Możesz spróbować uruchomić grę z wiersza polecenia (cmd) po wykonaniu
SET SESSIONNAME=Console
(wartość mojego pulpitu) lubSET SESSIONNAME=
(pusta).Aby sprawdzić aktualną wartość, wprowadź
SET SESSIONNAME
przed zmianą.Niewiele możesz z tym zrobić, oprócz napisania haka systemowego.
W razie zainteresowania zapoznaj się z tym artykułem codeproject.com: ujawniono zaczepienie API .
źródło
Znalazłem rozwiązanie: uruchamianie żądanych programów przez „runas”
Po zalogowaniu się za pomocą pulpitu wpisz to w cmd:
runy / użytkownik: YOUR_NAME „YOUR_PROGRAM_PATH”
Przetestowałem to na oprogramowaniu Bently i działają dobrze.
źródło
Korzystam z Microsoft Remote Desktop i wypróbowałem pierwsze 2 metody opublikowane przez @harrymc, ale w moim przypadku nie działają. Trzeci jest dla mnie zbyt skomplikowany, więc nie spróbowałem.
W końcu odkryłem, że Parallel Access pozwala mi korzystać z programu, który wyświetlał błąd. Nie jest tak płynny jak RDP, więc używam go, jeśli naprawdę muszę korzystać z programu.
źródło
Nie odnosi się bezpośrednio do pytania SoftXPand, ale znalazłem się tutaj z powodu wyszukiwania w Google i jest to odpowiedź @ harrymc.
Utworzyłem plik wsadowy, który miał opóźnienie 60 sekund, a następnie uruchamia aplikację, którą chcę uruchomić. Uruchomiłem plik wsadowy, wylogowałem się z mojego połączenia RDP, odczekałem około 5 minut, a następnie ponownie połączyłem się z RDP. Ta wstrętna aplikacja, którą chciałem, czekała na mnie, kiedy wróciłem. Oto zawartość pliku wsadowego:
Cytaty wokół ścieżki są konieczne, jeśli masz spacje na ścieżce.
Mam tutaj informacje o partii: /programming/8324352/creating-a-batch-file-for-programs-to-start-using-a-delay
rekwizyty temu facetowi: https://stackoverflow.com/users/959263/raihan
(powiedział, aby podać szczegóły i udostępnić moje badania)
źródło