有关API的定时器的,希望有api经验的大侠指点一下,感激不尽!解决方案

有关API的定时器的,希望有api经验的大侠指点一下,感激不尽!!!
求windows api高手帮忙,

我用c写了个播放器,其中有一段代码,如下

//设定的TIMER定时器,为获得歌曲的播放位置
VOID CALLBACK TimerProc( HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) 

   
TCHAR pps[10];

mciSendString(posstr,str2,255,NULL);
mms2=strtol(str2,NULL,10);
mciSendString(stustr,pps,lstrlen(pps),NULL);
Dealtime(&mms2,hmsstr2);

if((state==1)&&(!lstrcmp(TEXT("stopped"),pps)))
  {
SendMessage(hwndbutton[IDC_NEXT],BM_CLICK,1,0);//发送 点击“下一曲”按钮的消息
MessageBeep(-1); //该句代码是为测试是否在最小化时程序还可以执行到此处而写的
}
InvalidateRect(hwnd,NULL,FALSE);
}


问题是:当我把播放器显示在桌面上时,播放的歌曲可以通过该定时器自动在一首歌结束后向下播放下一曲(MessageBeep只响一次)。而当我把播放器最小化或将客户区调整到小的看不到时,播放器就不能实现自动播放下一曲了!!!而是听到每秒一次MessageBeep发出的声音。

哎。。。我都折腾了好几天了,希望各位有经验的大侠能祝我一臂之力,让我快点解决这个问题。

小弟多谢!!!

------解决方案--------------------
SendMessage(hwndbutton[IDC_NEXT],BM_CLICK,1,0);//发送 点击“下一曲”按钮的消息
LZ为什么要模拟按钮点击消息来实现播放下一首呢?
我猜想是最小化的时候,按钮不能被点击。

为何不抽象出一个函数来。
switch(LOWORD(wParam))
{
case IDC_NEXT:
PlayNext();
}

if((state==1)&&(!lstrcmp(TEXT("stopped"),pps)))
{
PlayNext();
MessageBeep(-1); //该句代码是为测试是否在最小化时程序还可以执行到此处而写的
}


另外,不知道LZ的实现机理是怎样的。
存储歌曲名路径神马的,建议可以用双链表来实现,数据结构活学活用。