Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.150.163] |
|
Сообщ.
#1
,
|
|
|
Помогите плиз ...
Какими функциями можно узнать параметры коммандной строки ? Коммандная строка имеет вид: моя_программа.exe -u root -s "тема" adr@mail.ru текст_сообщения Пробовал пользоваться так: CString Path; //Определим входные параметры CCommandLineInfo p; ParseCommandLine(p); Path = p.m_strFileName; Но в данном случае выберается только параметр <root> ??? |
Сообщ.
#2
,
|
|
|
Держи:
class CCmdLineArgv { public: CCmdLineArgv( LPTSTR pCmdLine) : m_pArgv(NULL), m_pCmdLine(NULL), m_tArgc(0) { if(!pCmdLine) return; m_pCmdLine = new TCHAR[ _tcslen(pCmdLine) + sizeof(TCHAR)]; if(!m_pCmdLine) return; _tcscpy( m_pCmdLine, pCmdLine); bool inwords = false; TCHAR* pTmp = m_pCmdLine; for( ; *pTmp; pTmp++) { if( *pTmp == TCHAR(' ') || *pTmp == TCHAR('\t') ) { if(inwords) { *pTmp = TCHAR('\0'); inwords = false; } } else { if(!inwords) { m_tArgc++; inwords = true; } } } m_pArgv = new TCHAR*[ m_tArgc]; pTmp = m_pCmdLine; for( size_t i = 0; i < m_tArgc; i++) { m_pArgv[i] = pTmp; pTmp += DWORD(_tcslen(pTmp)) + sizeof(TCHAR); } } //--------------------------------------------------------- virtual ~CCmdLineArgv() { delete[] m_pArgv; delete[] m_pCmdLine; } //--------------------------------------------------------- LPCTSTR operator [] ( size_t idx) const { return idx < m_tArgc ? LPCTSTR(m_pArgv[ idx]) : NULL; } //--------------------------------------------------------- size_t Count() const { return m_tArgc; } //--------------------------------------------------------- private: size_t m_tArgc; TCHAR** m_pArgv; TCHAR* m_pCmdLine; }; Юзанье: ... CCmdLineArgv argv( GetCommandLine()); for( size_t i = 0; t < argv.Count(); t++) { if( !stricmp( argv[ t], "-u")) { ... } if( !stricmp( argv[ t], "тема")) { ... } } |
Сообщ.
#3
,
|
|
|
Да спасибо - класс работает !
Но столкнулся с непредвиденной проблемой ! В последнем параметре перед именем файла стоит знак < и потому все после этого знака, включая его самого, в коммандную строку НЕ ПОПАДАЕТ ??! Подскажите как выровнять ситуацию ? |
Сообщ.
#4
,
|
|
|
Кажется вот отсюда можно вытянуть всё, попробуй :
BOOL CMyApp::InitInstance() { AfxEnableControlContainer(); #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif SetRegistryKey(_T("MyApp")); ///////////////////////// Вот оно !!!!! : for (int i = 1; i < __argc; i++) { LPCTSTR pszParam = __targv[i]; CString parsParamStr = pszParam; if (_T("-d")==(CString) pszParam) { m_bStartLog = TRUE; } } CDlgWelcome Dialog; if (IDOK == Dialog.DoModal()) { CMyDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; } Попробуй , может поможет |
Сообщ.
#5
,
|
|
|
Цитата VAV, 16.01.04, 08:32 В последнем параметре перед именем файла стоит знак < и потому все после этого знака, включая его самого, в коммандную строку НЕ ПОПАДАЕТ ??! Командный процессор распознает это как перенаправление ввода в твою программу и не делает частью командной строки. |
Сообщ.
#6
,
|
|
|
Цитата Flex_Ferrum @ 16.01.04, 06:56 Цитата VAV, 16.01.04, 08:32 В последнем параметре перед именем файла стоит знак < и потому все после этого знака, включая его самого, в коммандную строку НЕ ПОПАДАЕТ ??! Командный процессор распознает это как перенаправление ввода в твою программу и не делает частью командной строки. Это все хорошо - НО как мне получить эти данные ? |
Сообщ.
#7
,
|
|
|
Цитата VAV, 16.01.04, 10:51 Это все хорошо - НО как мне получить эти данные ? Эти - никак. Хвост строки в этом случае интерпретируется самим командным процессором и прогремме не передается |
Сообщ.
#8
,
|
|
|
Цитата Flex_Ferrum @ 16.01.04, 07:55 Цитата VAV, 16.01.04, 10:51 Это все хорошо - НО как мне получить эти данные ? Эти - никак. Хвост строки в этом случае интерпретируется самим командным процессором и прогремме не передается Но ведь программа как-то обрабатывает эти данные ??? |
Сообщ.
#9
,
|
|
|
Цитата VAV, 16.01.04, 11:01 Но ведь программа как-то обрабатывает эти данные ??? Нет. В этом случае stdin программы открыт не с консоли, а из файла. И делает это командный процессор при запуске программы. |
Сообщ.
#10
,
|
|
|
Цитата Flex_Ferrum @ 16.01.04, 08:17 Цитата VAV, 16.01.04, 11:01 Но ведь программа как-то обрабатывает эти данные ??? Нет. В этом случае stdin программы открыт не с консоли, а из файла. И делает это командный процессор при запуске программы. Но как мне заполучить содержимое этого файла ? Уж подругому просто никак не изменить этот параметр ! |
Сообщ.
#11
,
|
|
|
Читать из стандартного ввода (cin, stdin) - и будет тебе содержимое этого файла.
|
Сообщ.
#12
,
|
|
|
Цитата Flex_Ferrum @ 16.01.04, 08:32 Читать из стандартного ввода (cin, stdin) - и будет тебе содержимое этого файла. Спасибо все работает теперь (((-: |