Я портирую приложение (использующее заглушку запуска) в Windows (используя MinGW GCC).
Вот минимальный пример, который я буду использовать в качестве ссылки для демонстрации проблемы.
#include <process.h>
int main(int argc, char *argv[])
{
chdir("C:\appdir");
spawnl(P_WAIT, "C:\appdir\app.exe", "C:\appdir\app.exe", NULL);
return 0;
}
Эта заглушка средства запуска компилируется следующим образом:
gcc -O3 -o launcher.o -c launcher.c
gcc -mwindows -o launcher.exe launcher.o
Когда запускается launcher.exe
, он правильно выполняет app.exe
, а затем ожидает его завершения, прежде чем завершить сам.
Неожиданным побочным эффектом этого является то, что курсор Windows переходит в режим стрелки + песочные часы примерно на 5 секунд после появления launch.exe
.
Этого не происходит, когда app.exe
запускается напрямую (черезкомандной строки или двойным щелчком по ней.)
Я уже пытался добавить следующее в приложение выше, но безуспешно (курсор по-прежнему работает точно так же, как и раньше):
#include <windows.h>
SetCursor(LoadCursor(NULL, IDC_ARROW));
Интересно, что при запуске launcher.exe
из командной строки (вместо двойного щелчка в проводнике) курсор работает нормально.То есть он просто мигает в песочных часах и почти мгновенно возвращается в нормальное состояние.
Как можно подавить занятый курсор?Или, по крайней мере, вернулось обратно надежно, без необходимости блокировать?