[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Code:
    if (choice [B]==[/B] Sunday || choice == Saturday) 
     
  2. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Ребят подскажите пожалуйста, как можно имея несколько spinedit на форме, записать их значения в файл, а потом по щелчку на кнопку восстановить их каждый в свой spinedit. Все это на C++
     
  3. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Для хранения юзай ini файлы, для работы с ними что-то из этого, http://stackoverflow.com/questions/12633/what-is-the-easiest-way-to-parse-an-ini-file-in-c
     
    1 person likes this.
  4. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Сделал так мало ли кому понадобится.
    Code:
    #include <inifiles.hpp> 
    Code:
    TIniFile *ini = new TIniFile(ExtractFilePath(Application->ExeName)+"interval.ini");
    
    Записать в иник
    Code:
    ini->WriteString("Interval","interval1",Interval1->Value);
    Считать из
    Code:
    Interval1->Value =StrToInt(ini->ReadString("Interval","interval1",Interval1->Value));
    Interval1->Value; это spinedit1->value;
     
  5. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Есть еще вопросик ))
    Как программно нажать клавишу в активном окне.

    Мне нужно нажать в браузере клавишу F5 (обновить страничку), но я не знаю какой браузер будет запущен ( Как это сделать подскажите.
    Заранее спасибо.
     
  6. khvdaiver

    khvdaiver New Member

    Joined:
    29 Oct 2012
    Messages:
    79
    Likes Received:
    2
    Reputations:
    0
    странный вопрос, если у вас ответ сразу в отчете об ошибке :DDD
     
  7. khvdaiver

    khvdaiver New Member

    Joined:
    29 Oct 2012
    Messages:
    79
    Likes Received:
    2
    Reputations:
    0
    может, вам поможет какой-нибдуь яваскриптовый вызов location.reload ? (могу ошибаться)
     
  8. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Дак к нему как-то обратится надо? Как я из C++ к DOM Обращусь? Надо просто программно нажать F5 в активном окне. Только как определить активное окно? После чего отправить нажатие клавиши туда?
     
  9. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Я думаю что примерно так: http://cboard.cprogramming.com/windows-programming/61016-sending-keystroke-hwnd.html
     
    1 person likes this.
  10. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Нормально, только как в активное окно послать?
     
  11. 0o Chris o0

    0o Chris o0 New Member

    Joined:
    16 Oct 2011
    Messages:
    142
    Likes Received:
    1
    Reputations:
    0
    Code:
    vector <std::string> cont;
    
    Ошибки:
    Code:
    error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
    error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
    error C2238: непредвиденные лексемы перед ";"
    
     
  12. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Полагаю, что ошибки исправятся так:

    std::vector<std::string> cont;
     
  13. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Ребят, подскажите как узнать какое окно в винде активно в данный момент на C++
     
  14. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    GetForegroundWindow()
     
    1 person likes this.
  15. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Короче сделал вот так, может кому пригодится.
    Все это в таймере.

    Code:
     HWND hWind;
    hWind=GetForegroundWindow();
    
    wchar_t Buffik[255];
      GetWindowText(hWind, Buffik, 254);
      ListBox1->Items->Strings[0]=Buffik;
    
    
    
    	char* listitem = AnsiString(ListBoxik->Items->Strings[0]).c_str();
    		if (strstr(listitem,"Братва и Кольцо")) {
    
    keybd_event(VK_F5, 0, 0 , 0);
    keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
    
    
    		}
    Братва и Кольцо это приложение в контакте )).
     
  16. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Блин, мне уже становится стыдно сюда писать )))
    Ребят нужна ваша помощь.
    Ситуация такая у меня есть таймер. В таймере вызывается функция, которая мышкой кликает в разные места на экране

    Code:
    void ClickPos (int x, int y)
    {
    SetCursorPos(x,y);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); // нажали левую кнопку мыши
    Sleep(30);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); // отпустили левую кнопку мыши
    }
    В таймере она вызывается многократно, с разными параметрами

    Code:
    ClickPos(Main->Left+679, Main->Top+94); // Вернуться на площадь
    Sleep (Settingi->Interval9->Value);
      ClickPos(Main->Left+581, Main->Top+38);  // Проверка на Игровую поляну
      Sleep (Settingi->Interval5->Value);
      ClickPos(Main->Left+546, Main->Top+33); // Проверка на ништяк
    Sleep(Settingi->Interval3->Value);
    ClickPos(Main->Left+427, Main->Top+229); // Магазин
    Sleep (Settingi->Interval4->Value);
      ClickPos(Main->Left+581, Main->Top+38);  // Проверка на Игровую поляну
      Sleep (Settingi->Interval5->Value);
       ClickPos(Main->Left+Hillx->Value, Main->Top+Hilly->Value); // Использовать навыбор хилок ебать я написал )).
       Sleep (Settingi->Interval6->Value);
    	ClickPos(Main->Left+305, Main->Top+252);  //Проверка на У вас Максимльное здоровье
    	Sleep (Settingi->Interval7->Value);
    	 ClickPos(Main->Left+542, Main->Top+33); // Проверка на ништяк
    Automatikaa1->Interval=320000
    
    Я решил добавить горячие клавиши, чтобы отключать данный таймер.

    При создании формы
    Code:
    RegisterHotKey(Handle,0,MOD_ALT+MOD_CONTROL,VK_RETURN); //Регистрируем под номером 0 связку клавиш Alt + Ctrl + Enter.
    В обработчике событий
    Code:
    void __fastcall TMain::ApplicationEvents1Message(tagMSG &Msg, bool &Handled)
    {
    if (Msg.message == WM_HOTKEY)
    		{
    		if (Msg.wParam == 0) // Здесь идет проверка идентификатора. Если параметр 0, что соответствует нашей первой связке, то
    				{
    				Automatikaa1->Enabled=0; // Отключаю таймер
    				ShowMessage("Бот остановлен, чтобы запустить заного, нажмите на кнопку с выбором сложности противника.");
    
    				}
    
    		}
    }
    При закрытии формы
    Code:
    UnregisterHotKey(Handle,0);
    Дак вот, теперь сама проблема, как понятно из выше приведенного кода, при нажатии на клавиши ALT+CTRL+ENTER Таймер Automatikaa1 должен отключится, после чего должно вылезсти сообщение "Бот остановлен, чтобы запустить заного, нажмите на кнопку с выбором сложности противника", но на деле, если нажать на это сочетание клавиш то, все действия произойдут, только после того как таймер завершит весь код внутри себя. То есть выполнит все вызовы функции ClickPos, и установит интервал Interval=320000.

    Вопрос, как остановить таймер в любое время, чтобы не дожидаться пока он дощелкает до конца?
     
  17. LibertyPaul

    LibertyPaul New Member

    Joined:
    16 Jan 2010
    Messages:
    36
    Likes Received:
    0
    Reputations:
    0
    не могу сказать точно, но как мне кажется, у тебя там для реализации задержки в 320 секунд вызывается Sleep(320000).
    Если это так, то разбей этот промежуток по пол-секунды, например, и каждые пол-секунды проверяй, не нажимал ли юзерок на кнопки.

    как то так:
    PHP:
    for(int i=0;i<640;++i){
    Sleep(500);
    //проверка с выходом из цикла
    }
     
  18. 0xd098d0b3d0

    0xd098d0b3d0 New Member

    Joined:
    26 Oct 2012
    Messages:
    54
    Likes Received:
    1
    Reputations:
    0
    Она вызывается не Sleep а изменением интервала работы таймера. И как раз во время этой "задержки" все нормально нажимается, а вот когда она заканчивается и таймер начинает работать заного то опять не нажать..
     
  19. Spot

    Spot Elder - Старейшина

    Joined:
    1 Mar 2007
    Messages:
    461
    Likes Received:
    38
    Reputations:
    1
    Создай отдельный трид для обработки "внутренностей" кликов мышки. При нажатии связки вызывай Thread.Abort()
    Почитать примеры можно тут
     
    1 person likes this.
  20. dim76

    dim76 New Member

    Joined:
    3 Jan 2013
    Messages:
    49
    Likes Received:
    0
    Reputations:
    0
    Может не совсем в тему, но: где можно скачать С++ лучше ентерпрайс? Какая версия лучше? И чтобы нормально активировать? Дайте линк.
     
Thread Status:
Not open for further replies.