DLL 中如何检测调用者是 GUI or Console?
在 DLL 中如何检测调用 AP 是图形界面还是命令行模式?先仅限于 windows (WIN32 及 WIN64)操作系统。 搜到一英文网站:How to detect console vs GUI mode from a DLL,里面介绍了两种方案:#include <windows.h>#include <tchar.h>int main(){ char *base = (char*)GetModuleHandle(0); // "returns a handle to the file used to create the calling process (.exe file)." IMAGE_DOS_HEADER *idh = (IMAGE_DOS_HEADER*)(base+0); IMAGE_FILE_HEADER *ifh =(IMAGE_FILE_HEADER*)(base+idh->e_lfanew+sizeof(DWORD)); IMAGE_OPTIONAL_HEADER *ioh =(IMAGE_OPTIONAL_HEADER*)(base+idh->e_lfanew+sizeof(DWORD)+sizeof(IMAGE_FILE_HEADER)) ; // const TCHAR *subsystem=0; switch (ioh->Subsystem) { case IMAGE_SUBSYSTEM_UNKNOWN: subsystem=_T("unknown"); break; case IMAGE_SUBSYSTEM_NATIVE: subsystem=_T("native"); break; case IMAGE_SUBSYSTEM_WINDOWS_CUI: subsystem=_T("console"); break; case IMAGE_SUBSYSTEM_WINDOWS_GUI: subsystem=_T("windows"); break; case IMAGE_SUBSYSTEM_OS2_CUI: subsystem=_T("os2"); break; case IMAGE_SUBSYSTEM_POSIX_CUI: subsystem=_T("posix"); break; case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: subsystem=_T("ce"); break; case IMAGE_SUBSYSTEM_XBOX: subsystem=_T("xbox"); break; default: subsystem=_T("???"); } MessageBox(0,subsystem,subsystem,MB_OK); return 0;}以及:if(!GetConsoleTitle(NULL, 0) && GetLastError() == ERROR_SUCCESS) {// CUI} else {// GUI} windows API 我不了解。
如果是自己写的dll的话,倒很简单,添加一个变量或者函数来指明状态即可 DLL 是被调的,它是被动的,如何给这个变量赋值?
这需要自动侦测的。 呵呵,俺不清楚具体是什么dll,不知道dll在这个问题中的角色~~
除了表示关注之外帮不了什么忙了
页:
[1]