summaryrefslogtreecommitdiff
path: root/worldtime/plugwin.cpp
diff options
context:
space:
mode:
author(no author) <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10>2010-04-05 05:44:52 +0000
committer(no author) <(no author)@4f64403b-2f21-0410-a795-97e2b3489a10>2010-04-05 05:44:52 +0000
commit9a8ea65ccec0256ecda95581edd69c8d91020867 (patch)
treea6614ace0f554686f44e11af80390a98977ce0bc /worldtime/plugwin.cpp
parent70ee49c6aa80f3dd35078321fc4807fcd55353fc (diff)
Added x64 port
Converted to Unicode Reduced size git-svn-id: https://server.scottellis.com.au/svn/mim_plugs@494 4f64403b-2f21-0410-a795-97e2b3489a10
Diffstat (limited to 'worldtime/plugwin.cpp')
-rw-r--r--worldtime/plugwin.cpp181
1 files changed, 87 insertions, 94 deletions
diff --git a/worldtime/plugwin.cpp b/worldtime/plugwin.cpp
index 920b19c..690cefe 100644
--- a/worldtime/plugwin.cpp
+++ b/worldtime/plugwin.cpp
@@ -19,7 +19,7 @@ HICON upIcon, downIcon, riseIcon, setIcon;
HMENU hMainMenu;
UINT menuItemId;
-ITEMLIST listbox_items;
+ITEMLIST listbox_items(5);
TCHAR format_string[512], date_format_string[512];
@@ -48,17 +48,15 @@ static int transparentFocus=1;
#define WMU_INITIALIZE (WM_USER + 11)
#define WMU_SIZELIST (WM_USER + 12)
-static int CLUILoadTitleBarFont()
+static HFONT CLUILoadTitleBarFont()
{
- char facename[]="MS Shell Dlg";
HFONT hfont;
- LOGFONT logfont;
- memset(&logfont,0,sizeof(logfont));
- memcpy(logfont.lfFaceName,facename,sizeof(facename));
+ LOGFONT logfont = {0};
+ _tcscpy(logfont.lfFaceName, _T("MS Shell Dlg"));
logfont.lfWeight=FW_NORMAL;
logfont.lfHeight=-10;
hfont=CreateFontIndirect(&logfont);
- return((int)hfont);
+ return hfont;
}
HFONT GetCLCFont0()
@@ -74,22 +72,22 @@ HFONT GetCLCFont0()
SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(LOGFONT),lf,FALSE);
- if(!DBGetContactSetting(NULL,"WorldTime","FontName",&dbv)) {
- lstrcpy(lf->lfFaceName,dbv.pszVal);
+ if(!DBGetContactSettingTString(NULL,"WorldTime","FontName",&dbv)) {
+ lstrcpy(lf->lfFaceName, dbv.ptszVal);
DBFreeVariant(&dbv);
} else {
- wsprintf(idstr,"Font%dName",i);
- if(!DBGetContactSetting(NULL,"CLC",idstr,&dbv)) {
- lstrcpy(lf->lfFaceName,dbv.pszVal);
+ mir_snprintf(idstr, SIZEOF(idstr), "Font%dName", i);
+ if(!DBGetContactSettingTString(NULL,"CLC",idstr,&dbv)) {
+ lstrcpy(lf->lfFaceName,dbv.ptszVal);
DBFreeVariant(&dbv);
}
}
- wsprintf(idstr, "Font%dCol", i);
+ mir_snprintf(idstr, SIZEOF(idstr), "Font%dCol", i);
ContactFontColour = (COLORREF)DBGetContactSettingDword(NULL, "CLC", idstr, GetSysColor(COLOR_WINDOWTEXT));
if(!DBGetContactSetting(NULL,"WorldTime","FontSize",&dbv)) {
lf->lfHeight=(char)dbv.bVal;
} else {
- wsprintf(idstr,"Font%dSize",i);
+ mir_snprintf(idstr, SIZEOF(idstr), "Font%dSize", i);
lf->lfHeight=(char)DBGetContactSettingByte(NULL,"CLC",idstr,lf->lfHeight);
if(lf->lfHeight > 0)
lf->lfHeight=-MulDiv(abs(lf->lfHeight), GetDeviceCaps(hdc, LOGPIXELSY), 72);
@@ -99,10 +97,10 @@ HFONT GetCLCFont0()
#define DBFONTF_ITALIC 2
#define DBFONTF_UNDERLINE 4
- if(!DBGetContactSetting(NULL,"WorldTime","FontSty",&dbv)) {
+ if(!DBGetContactSettingString(NULL,"WorldTime","FontSty",&dbv)) {
style=(BYTE)DBGetContactSettingByte(NULL,"WorldTime","FontSty",(lf->lfWeight==FW_NORMAL?0:DBFONTF_BOLD)|(lf->lfItalic?DBFONTF_ITALIC:0)|(lf->lfUnderline?DBFONTF_UNDERLINE:0));
} else {
- wsprintf(idstr,"Font%dSty",i);
+ mir_snprintf(idstr, SIZEOF(idstr), "Font%dSty", i);
style=(BYTE)DBGetContactSettingByte(NULL,"CLC",idstr,(lf->lfWeight==FW_NORMAL?0:DBFONTF_BOLD)|(lf->lfItalic?DBFONTF_ITALIC:0)|(lf->lfUnderline?DBFONTF_UNDERLINE:0));
}
lf->lfWidth=lf->lfEscapement=lf->lfOrientation=0;
@@ -114,7 +112,7 @@ HFONT GetCLCFont0()
if(!DBGetContactSetting(NULL,"WorldTime","FontSet",&dbv)) {
lf->lfCharSet = dbv.bVal;
} else {
- wsprintf(idstr,"Font%dSet",i);
+ mir_snprintf(idstr, SIZEOF(idstr), "Font%dSet", i);
lf->lfCharSet=DBGetContactSettingByte(NULL,"CLC",idstr,lf->lfCharSet);
}
lf->lfOutPrecision=OUT_DEFAULT_PRECIS;
@@ -130,10 +128,10 @@ HFONT GetCLCFont0()
HFONT GetFont() {
if(ServiceExists(MS_FONT_REGISTER)) {
LOGFONT log_font;
- ContactFontColour = (COLORREF)CallService(MS_FONT_GET, (WPARAM)&font_id, (LPARAM)&log_font);
+ ContactFontColour = (COLORREF)CallService(MS_FONT_GETT, (WPARAM)&font_id, (LPARAM)&log_font);
return CreateFontIndirect(&log_font);
} else
- return (HFONT)GetCLCFont0();
+ return GetCLCFont0();
}
int ReloadFont(WPARAM wParam, LPARAM lParam) {
@@ -181,7 +179,7 @@ void CALLBACK plug1TimerProc(
void CALLBACK plug1TimerProc2(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
- UINT idEvent, // timer identifier
+ UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
)
{
@@ -196,7 +194,7 @@ void CALLBACK plug1TimerProc2(
void CALLBACK plug1TimerProc3(
HWND hwnd, // handle to window
UINT uMsg, // WM_TIMER message
- UINT idEvent, // timer identifier
+ UINT_PTR idEvent, // timer identifier
DWORD dwTime // current system time
)
{
@@ -283,7 +281,7 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
if(dis->itemID != -1) {
oldFont = (HFONT)SelectObject(dis->hDC, ContactFont);
- GetTextExtentPoint32(dis->hDC,"X",1,&textSize);
+ GetTextExtentPoint32(dis->hDC,_T("X"),1,&textSize);
SendMessage(label, LB_SETITEMHEIGHT, 0, (LPARAM)DBGetContactSettingWord(NULL, "WorldTime", "RowHeight",GetSystemMetrics(SM_CYSMICON)));
// stop full list erase
//dis->rcItem.bottom = dis->rcItem.top + DBGetContactSettingWord(NULL, "WorldTime", "RowHeight",GetSystemMetrics(SM_CYSMICON));
@@ -393,13 +391,13 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
MyGetSystemTime(&st);
EnterCriticalSection(&cs2);
- for(ITEMLIST::iterator i = listbox_items.begin(); i != listbox_items.end(); i++) {
+ for(int i = 0; i < listbox_items.getCount(); i++) {
TIME_ZONE_INFORMATION tzi;
- tzi.Bias = timezone_list[i->timezone_list_index].TZI.Bias;
- tzi.DaylightBias = timezone_list[i->timezone_list_index].TZI.DaylightBias;
- tzi.DaylightDate = timezone_list[i->timezone_list_index].TZI.DaylightDate;
- tzi.StandardBias = timezone_list[i->timezone_list_index].TZI.StandardBias;
- tzi.StandardDate = timezone_list[i->timezone_list_index].TZI.StandardDate;
+ tzi.Bias = timezone_list[listbox_items[i].timezone_list_index].TZI.Bias;
+ tzi.DaylightBias = timezone_list[listbox_items[i].timezone_list_index].TZI.DaylightBias;
+ tzi.DaylightDate = timezone_list[listbox_items[i].timezone_list_index].TZI.DaylightDate;
+ tzi.StandardBias = timezone_list[listbox_items[i].timezone_list_index].TZI.StandardBias;
+ tzi.StandardDate = timezone_list[listbox_items[i].timezone_list_index].TZI.StandardDate;
MySystemTimeToTzSpecificLocalTime(&tzi, &st, &other_st);
@@ -409,8 +407,8 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
} else
GetTimeFormat(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &other_st, 0, buf, 512);
- int risediff = minutes_diff(&other_st, &i->sunrise),
- setdiff = minutes_diff(&other_st, &i->sunset);
+ int risediff = minutes_diff(&other_st, &listbox_items[i].sunrise),
+ setdiff = minutes_diff(&other_st, &listbox_items[i].sunset);
if(risediff >= 0 && setdiff < 0) {
if(risediff < 30)
hIcon = riseIcon;
@@ -423,12 +421,12 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
hIcon = downIcon;
}
- if(strcmp(buf, i->pszTimeText) || (set_format && strcmp(buf2, i->pszDateText)) || i->icon != hIcon) {
+ if(_tcscmp(buf, listbox_items[i].pszTimeText) || (set_format && _tcscmp(buf2, listbox_items[i].pszDateText)) || listbox_items[i].icon != hIcon) {
need_repaint = true;
- strcpy(i->pszTimeText, buf);
- if(set_format) strcpy(i->pszDateText, buf2);
- else i->pszDateText[0] = '\0';
- i->icon = (HICON)hIcon;
+ _tcscpy(listbox_items[i].pszTimeText, buf);
+ if(set_format) _tcscpy(listbox_items[i].pszDateText, buf2);
+ else listbox_items[i].pszDateText[0] = '\0';
+ listbox_items[i].icon = (HICON)hIcon;
}
}
LeaveCriticalSection(&cs2);
@@ -442,7 +440,7 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
if(tbrush) DeleteObject(tbrush);
- return (BOOL)(tbrush = CreateSolidBrush((COLORREF)DBGetContactSettingDword(NULL,"WorldTime","BgColour", GetSysColor(COLOR_3DFACE))));
+ return (INT_PTR)(tbrush = CreateSolidBrush((COLORREF)DBGetContactSettingDword(NULL,"WorldTime","BgColour", GetSysColor(COLOR_3DFACE))));
}
break;
case WM_ERASEBKGND:
@@ -485,9 +483,9 @@ LRESULT CALLBACK mypluginwindow1proc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM
break;
case WM_CREATE:
- label=CreateWindow("LISTBOX", "", (WS_VISIBLE | WS_CHILD | LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_NOTIFY) & ~WS_BORDER, 0, 0, 0, 0, hwnd, NULL, hInst,0);
+ label=CreateWindow(_T("LISTBOX"), _T(""), (WS_VISIBLE | WS_CHILD | LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_NOTIFY) & ~WS_BORDER, 0, 0, 0, 0, hwnd, NULL, hInst,0);
- oldListWindowProc = (WNDPROC)SetWindowLong(label, GWL_WNDPROC, (LONG)SubclassedListWindowProc);
+ oldListWindowProc = (WNDPROC)SetWindowLongPtr(label, GWLP_WNDPROC, (LONG_PTR)SubclassedListWindowProc);
if (DBGetContactSettingByte(NULL,"CList","Transparent",0))
{
@@ -742,8 +740,8 @@ int FillList(WPARAM wParam, LPARAM lParam) {
EnterCriticalSection(&cs2);
- for(ITEMLIST::iterator i = listbox_items.begin(); i != listbox_items.end(); i++) {
- SendMessage(label, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)i->pszText);
+ for(int i = 0; i < listbox_items.getCount(); i++) {
+ SendMessage(label, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)listbox_items[i].pszText);
}
LeaveCriticalSection(&cs2);
@@ -752,7 +750,7 @@ int FillList(WPARAM wParam, LPARAM lParam) {
return 0;
}
-static int PlugShowWindow(WPARAM wParam, LPARAM lParam) {
+static INT_PTR PlugShowWindow(WPARAM wParam, LPARAM lParam) {
if(pluginwind && !hook_window_behaviour_to_clist) {
ShowWindow(pluginwind, IsWindowVisible(pluginwind) ? SW_HIDE : SW_SHOW);
DBWriteContactSettingByte(NULL, "WorldTime", "WindowVisible", IsWindowVisible(pluginwind) ? 1 : 0);
@@ -819,49 +817,49 @@ int ReloadIcons(WPARAM wParam, LPARAM lParam) {
void load_listbox_items() {
int num = DBGetContactSettingDword(0, "WorldTime", "NumEntries", 0);
for(int i = 0; i < num; i++) {
- LISTITEM li = {0};
- std::ostringstream p1, p2, p3, p4, p5;
+ LISTITEM lsi = {0};
+ char p1[20], p2[20], p3[20], p4[20], p5[20];
- p1 << "Label" << i;
- p2 << "Index" << i;
- p3 << "Sunrise" << i;
- p4 << "Sunset" << i;
- p5 << "TZName" << i;
+ mir_snprintf(p1, SIZEOF(p1), "Label%d", i);
+ mir_snprintf(p2, SIZEOF(p2), "Index%d", i);
+ mir_snprintf(p3, SIZEOF(p3), "Sunrise%d", i);
+ mir_snprintf(p4, SIZEOF(p4), "Sunset%d", i);
+ mir_snprintf(p5, SIZEOF(p5), "TZName%d", i);
DBVARIANT dbv;
- DBGetContactSetting(0, "WorldTime", p1.str().c_str(), &dbv);
- strncpy(li.pszText, dbv.pszVal, MAX_NAME_LENGTH);
+ DBGetContactSettingTString(0, "WorldTime", p1, &dbv);
+ _tcsncpy(lsi.pszText, dbv.ptszVal, MAX_NAME_LENGTH);
DBFreeVariant(&dbv);
- if(!DBGetContactSetting(0, "WorldTime", p5.str().c_str(), &dbv)) {
- for(TimeList::iterator j = timezone_list.begin(); j != timezone_list.end(); j++) {
- if(!strcmp(j->tcName, dbv.pszVal)) {
- li.timezone_list_index = j->list_index;
+ if(!DBGetContactSettingTString(0, "WorldTime", p5, &dbv)) {
+ for(int j = 0; j < timezone_list.getCount(); j++) {
+ if(!_tcscmp(timezone_list[j].tcName, dbv.ptszVal)) {
+ lsi.timezone_list_index = timezone_list[j].list_index;
break;
}
}
DBFreeVariant(&dbv);
} else
- li.timezone_list_index = (int)DBGetContactSettingDword(0, "WorldTime", p2.str().c_str(), 0);
+ lsi.timezone_list_index = (int)DBGetContactSettingDword(0, "WorldTime", p2, 0);
- GetSystemTime(&li.sunrise);
- GetSystemTime(&li.sunset);
+ GetSystemTime(&lsi.sunrise);
+ GetSystemTime(&lsi.sunset);
- int sunrise_min = (int)DBGetContactSettingDword(0, "WorldTime", p3.str().c_str(), 360), // 60 * 6 (6 am) = 360
- sunset_min = (int)DBGetContactSettingDword(0, "WorldTime", p4.str().c_str(), 1080); // 60 * 18 (6 pm) = 1080
+ int sunrise_min = (int)DBGetContactSettingDword(0, "WorldTime", p3, 360), // 60 * 6 (6 am) = 360
+ sunset_min = (int)DBGetContactSettingDword(0, "WorldTime", p4, 1080); // 60 * 18 (6 pm) = 1080
- li.sunrise.wHour = sunrise_min / 60;
- li.sunrise.wMinute = sunrise_min % 60;
- li.sunrise.wSecond = 0;
- li.sunset.wHour = sunset_min / 60;
- li.sunset.wMinute = sunset_min % 60;
- li.sunset.wSecond = 0;
+ lsi.sunrise.wHour = sunrise_min / 60;
+ lsi.sunrise.wMinute = sunrise_min % 60;
+ lsi.sunrise.wSecond = 0;
+ lsi.sunset.wHour = sunset_min / 60;
+ lsi.sunset.wMinute = sunset_min % 60;
+ lsi.sunset.wSecond = 0;
- li.pszTimeText[0] = '\0';
- li.pszDateText[0] = '\0';
- li.icon = upIcon;
+ lsi.pszTimeText[0] = '\0';
+ lsi.pszDateText[0] = '\0';
+ lsi.icon = upIcon;
- listbox_items.push_back(li);
+ listbox_items.insert(new LISTITEM(lsi));
}
}
@@ -935,7 +933,7 @@ int addmypluginwindow1(HWND parent)
HookEvent(ME_SKIN_SERVICESCREATED, SkinReload);
}
- hUserDll = LoadLibrary("user32.dll");
+ hUserDll = GetModuleHandleA("user32");
if (hUserDll) {
MySetLayeredWindowAttributes = (BOOL (WINAPI *)(HWND,COLORREF,BYTE,DWORD))GetProcAddress(hUserDll, "SetLayeredWindowAttributes");
MyAnimateWindow=(BOOL (WINAPI*)(HWND,DWORD,DWORD))GetProcAddress(hUserDll,"AnimateWindow");
@@ -950,12 +948,12 @@ int addmypluginwindow1(HWND parent)
show_icons = (DBGetContactSettingByte(NULL, "WorldTime", "ShowIcons", 1) == 1);
hide_menu = (DBGetContactSettingByte(NULL, "WorldTime", "HideMenu", 0) == 1);
DBVARIANT dbv;
- if(!DBGetContactSetting(NULL, "WorldTime", "TimeFormat", &dbv)) {
- strncpy(format_string, dbv.pszVal, 512);
+ if(!DBGetContactSettingTString(NULL, "WorldTime", "TimeFormat", &dbv)) {
+ _tcsncpy(format_string, dbv.ptszVal, 512);
}
DBFreeVariant(&dbv);
- if(!DBGetContactSetting(NULL, "WorldTime", "DateFormat", &dbv)) {
- strncpy(date_format_string, dbv.pszVal, 512);
+ if(!DBGetContactSettingTString(NULL, "WorldTime", "DateFormat", &dbv)) {
+ _tcsncpy(date_format_string, dbv.ptszVal, 512);
}
DBFreeVariant(&dbv);
@@ -981,11 +979,11 @@ int addmypluginwindow1(HWND parent)
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
wndclass.lpszMenuName = NULL;
- wndclass.lpszClassName = PLUG;
+ wndclass.lpszClassName = _T(PLUG);
RegisterClass(&wndclass);
if(ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) {
- pluginwind=CreateWindow(PLUG,Translate("World Time"),
+ pluginwind=CreateWindow(_T(PLUG),TranslateT("World Time"),
WS_BORDER|WS_CHILD|WS_CLIPCHILDREN,
0,0,0,0,parent,NULL,hInst,NULL);
@@ -1018,7 +1016,7 @@ int addmypluginwindow1(HWND parent)
visible = ((int)DBGetContactSettingByte(NULL, "WorldTime", "WindowVisible", 1) == 1);
}
- pluginwind=CreateWindowEx(WS_EX_TOOLWINDOW, PLUG,Translate("World Time"),
+ pluginwind=CreateWindowEx(WS_EX_TOOLWINDOW, _T(PLUG),TranslateT("World Time"),
WS_POPUPWINDOW | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | (visible ? WS_VISIBLE : 0) | WS_CLIPCHILDREN,
x,y,width,height,parent,NULL,hInst,NULL);
@@ -1041,8 +1039,8 @@ int addmypluginwindow1(HWND parent)
font=SendMessage(parent,WM_GETFONT,0,0);
SendMessage(pluginwind,WM_SETFONT,font,0);
- TitleBarFont = (HFONT)CLUILoadTitleBarFont();
- ContactFont = (HFONT)GetFont();
+ TitleBarFont = CLUILoadTitleBarFont();
+ ContactFont = GetFont();
SendMessage(label,WM_SETFONT,(WPARAM)TitleBarFont,0);
@@ -1072,32 +1070,27 @@ LRESULT CALLBACK NullWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM
return DefWindowProc(hWnd, message, wParam, lParam);
}
-void CALLBACK sttMainThreadCallback( ULONG dwParam )
+void CALLBACK sttMainThreadCallback( ULONG_PTR dwParam )
{
- POPUPDATAEX* ppd = ( POPUPDATAEX* )dwParam;
-
- if ( ServiceExists(MS_POPUP_ADDPOPUPEX) )
- CallService( MS_POPUP_ADDPOPUPEX, ( WPARAM )ppd, 0 );
- else
- if ( ServiceExists(MS_POPUP_ADDPOPUP) )
- CallService( MS_POPUP_ADDPOPUP, ( WPARAM )ppd, 0 );
+ POPUPDATAT* ppd = ( POPUPDATAT* )dwParam;
+ CallService( MS_POPUP_ADDPOPUPT, ( WPARAM )ppd, 0 );
free( ppd );
}
-void __stdcall ShowPopup( const char* line1, const char* line2, int flags )
+void __stdcall ShowPopup( const TCHAR* line1, const TCHAR* line2, int flags )
{
- if ( !ServiceExists( MS_POPUP_ADDPOPUP )) {
- MessageBox( NULL, line2, Translate("World Time"), MB_OK | MB_ICONINFORMATION );
+ if ( !ServiceExists( MS_POPUP_ADDPOPUPT )) {
+ MessageBox( NULL, line2, TranslateT("World Time"), MB_OK | MB_ICONINFORMATION );
return;
}
- POPUPDATAEX* ppd = ( POPUPDATAEX* )calloc( sizeof( POPUPDATAEX ), 1 );
+ POPUPDATAT* ppd = ( POPUPDATAT* )calloc( sizeof( POPUPDATAT ), 1 );
ppd->lchContact = NULL;
ppd->lchIcon = 0;
- strcpy( ppd->lpzContactName, line1 );
- strcpy( ppd->lpzText, line2 );
+ _tcscpy( ppd->lptzContactName, line1 );
+ _tcscpy( ppd->lptzText, line2 );
ppd->colorBack = GetSysColor( COLOR_BTNFACE );
ppd->colorText = GetSysColor( COLOR_WINDOWTEXT );
@@ -1106,7 +1099,7 @@ void __stdcall ShowPopup( const char* line1, const char* line2, int flags )
ppd->PluginWindowProc = ( WNDPROC )NullWindowProc;
ppd->PluginData = NULL;
- QueueUserAPC( sttMainThreadCallback , mainThread, ( ULONG )ppd );
+ QueueUserAPC( sttMainThreadCallback , mainThread, ( ULONG_PTR )ppd );
}
void plugwin_cleanup() {