من نمیدونم چرا کدی رو که شما دادید همیشه صفر رو بر می گردونه یعنی نمیدونم چرا هیچوقت حتی با اینکه اون برنامه در بار دوم هم اجرا میشه در if اول اجرا نمیشه !!! (در مد دیباگ دیدم)
من کاری رو که میخواستم رو با فایلها انجام دادم اما با استفاده از FindWindow نتونستم جواب بگیرم در اون لینکی هم که دادید (من یکی که خوب متوجه نشدم چون فکر میکنم مربوط به پروژه های چند سندی میشد)
در هر حال میشه بگید اشتباه من کجاست ؟ من به این صورت عمل میکنم :
بعد از تعاریف header ها دو متغیر عمومی hwnd و hwnd1 رو به صورت زیر تعریف میکنم :
در ادامه :
HWND GetRunningWin()
{
LPCTSTR lpszUniqueClass = _T("test");
HWND hwnd = ::FindWindow (lpszUniqueClass ,0);
if (::IsWindow (hwnd))
{
HWND hwndP = ::GetLastActivePopup (hwnd);
if (::IsWindow (hwndP))
hwnd = hwndP;
return hwnd;
}
else
return hwnd1;
}
و در ادامه در OnInitDialog() به این صورت :
if(GetRunningWin()==hwnd)
EndDialog(IDD_TEST_DIALOG);
در تئوری که همه چیز درست به نظر میاد اما در عمل نه : انتظار میره در اجرای اولیه برنامه چون هنوز پنجره ای باز نیست مقدار hwnd1 برگردونده شه و خط بعد از if اجرا نشه (که همینطور هم هست ) اما در اجراهای بعدی باز هم hwnd1 برگردونده میشه