Создайте приложение без окна

Проблема с вашим исправленным кодом заключается в том, что index находит только первый вхождение заглавной буквы в строке. Поскольку вы повторяли экземпляры с одинаковыми заглавными буквами, функция никогда не находит последующие экземпляры. Вы можете упростить свой подход и избежать этой проблемы, просто объединяя буквы с подчеркиванием или без подчеркивания, в зависимости от того, являются ли они заглавными буквами при итерации.

Например:

def underscore_caps(s):
    result = ''
    for c in s:
        if c.isupper():
            result += f'_{c.lower()}'
        else:
            result += c

    return result

print(underscore_caps('courseID pathID apiID'))
# course_i_d path_i_d api_i_d

Или немного более кратко, используя понимание списка и join:

def underscore_caps(s):
    return ''.join([f'_{c.lower()}' if c.isupper() else c for c in s])

print(underscore_caps('courseID pathID apiID'))
# course_i_d path_i_d api_i_d
24
задан Ates Goral 22 October 2008 в 05:10
поделиться

5 ответов

Когда Вы пишете программу WinMain, Вы автоматически получаете опцию SUBSYSTEM / быть окнами в компиляторе. (Принятие Вас использует Visual Studio). Для любого другого компилятора могла бы присутствовать подобная опция, но имя флага могло бы отличаться.

Это заставляет компилятор создавать запись в формате исполняемого файла ( формат PE), который отмечает исполняемый файл как исполняемый файл окон.

, Как только эта информация присутствует в исполняемом файле, системный загрузчик, который запускает программу, будет рассматривать Ваш двоичный файл как исполняемый файл окон и не консольную программу, и поэтому это не заставляет консоли автоматически открываться, когда это работает.

, Но Windows-программа не должен создавать окна, если она не должна хотеть, во многом как все те программы и сервисы, что Вы видите выполнение в панели задач, но не смотрите соответствующие окна для них. Это может также произойти, если Вы создаете окно, но решили не показать его.

Все, что необходимо сделать, для достижения всего этого,

#include <Windows.h>

int WinMain(HINSTANCE hInstance,
            HINSTANCE hPrevInstance, 
            LPTSTR    lpCmdLine, 
            int       cmdShow)
    {
    /* do your stuff here. If you return from this function the program ends */
    }

причина Вы требуете, чтобы сам WinMain был то, что, как только Вы отмечаете подсистему как Windows, компоновщик предполагает, что Вашей функцией точки входа (то, которое называют после загрузок программы и библиотеки C Run TIme, инициализирует) будет WinMain и не основная. Если Вы не обеспечите WinMain в такой программе, то Вы получите неразрешенную ошибку символа во время процесса соединения.

39
ответ дан 28 November 2019 в 23:13
поделиться

окна In:

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    // <-- Program logic here
    return 0;
}   

убедиться использовать ключ компоновщика ПОДСИСТЕМЫ/, как упомянуто Adam Mitz.

На других платформах:

int main(int argc, char**argv)
{
  // <-- Program logic here
  return 0;
}
14
ответ дан 28 November 2019 в 23:13
поделиться

Если вам нужно непрерывно запустить вашу программу без консоли или окна, вы можете найти полезные deamon в * NIX или службах в Windows , этот пример .NET, если вам нужно обычный win32 просто погуглите немного для примера.
Так как ваш вопрос помечен как win32, я предполагаю, что услуги более актуальны для вас.

4
ответ дан 28 November 2019 в 23:13
поделиться

Используйте мастер Visual Studio для создания приложения Win32. Но не создавайте окно, т.е. вы удаляете функцию создания окна. В качестве альтернативы мы можем создать приложение Win Service.

0
ответ дан 28 November 2019 в 23:13
поделиться

Если вы используете MSVC или Visual Studio , просто используйте новый Project Wizard и выберите Консольное приложение .

-8
ответ дан 28 November 2019 в 23:13
поделиться