我將一個應用程序(使用啓動程序存根)移植到Windows(使用MinGW GCC)。移植GCC應用程序,Windows光標停留在IDC_APPSTARTING
這是一個我將用作參考來展示問題的最小示例。
#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
,然後等待其結束自己之前終止。
這種意外的副作用是在產生launch.exe
之後,Windows光標進入箭頭+沙漏模式約5秒鐘。
時app.exe
直接運行(通過命令提示符或雙擊它。)
我已經嘗試添加上述以下的應用程序,但沒有成功(光標仍然表現完全不會出現這種情況如前):
#include <windows.h>
SetCursor(LoadCursor(NULL, IDC_ARROW));
有趣的是,在運行在命令提示(而不是雙擊在資源管理器)launcher.exe
,使光標正常起作用。也就是說,它只閃爍到沙漏,幾乎立即恢復正常。
忙碌光標如何被抑制?或者至少可靠地換回,沒有不得不阻止?
整個啓動器被張貼以上。沒有窗戶,也不應該產生一個控制檯。 GetMessage()會引入不需要的阻塞行爲。啓動程序本身充當主可執行程序的包裝。 – Unsigned
您可以通過發佈任何消息避免在「GetMessage」中阻塞。請嘗試更新後的答案中的代碼。 – rodrigo