Перейти к содержимому

Фото
- - - - -

focus.exe "firefox.exe" - как?


  • Вы не можете создать новую тему
  • Please log in to reply
4 ответов в этой теме

#1 don Jao

don Jao
  • Пользователь
  • 138 сообщений
  • Откуда:Таллинн

Отправлено 09 Август 2010 - 17:28

Всем привет

Как сделать (написать) программу, которя могла бы фокусировать уже запушенную программу под windows? Т.е, грубо говоря мне нужно 'setFocus("firefox.exe");' или через cmd: 'focus.ехе -а "firefox.ехе"' Сказали что это делается в C++. Так вот, не подскажите, с чего начать? Где просше скомпилировать?

Заранее спасибо.
  • 0

#2 Vitalts

Vitalts
  • Постоялец
  • 1 842 сообщений

Отправлено 09 Август 2010 - 19:44

FindWindowEx
SetForegroundWindow
Но судя по вопросам, боюсь тебе это не поможет, ищи на просторах тырнета готовый софт. Только всплывает еще один вопрос, что делать, если запущено несколько экземпляров лисы?
Самый адекватный вариант, запуск лисы с параметрами командной строки разрешающими только одну копию приложения, тогда повторный запуск выведит окно уже запущенного экземпляра на передний план. А вот обладает ли firefox подобной возможностью, это вопрос к гуглу.
  • 0

#3 don Jao

don Jao
  • Пользователь
  • 138 сообщений
  • Откуда:Таллинн

Отправлено 09 Август 2010 - 21:21

FindWindowEx
SetForegroundWindow
Но судя по вопросам, боюсь тебе это не поможет, ищи на просторах тырнета готовый софт. Только всплывает еще один вопрос, что делать, если запущено несколько экземпляров лисы?
Самый адекватный вариант, запуск лисы с параметрами командной строки разрешающими только одну копию приложения, тогда повторный запуск выведит окно уже запущенного экземпляра на передний план. А вот обладает ли firefox подобной возможностью, это вопрос к гуглу.


Спасибо за наводку. Но оно, к сожалению, мне ничё не даёт.

Во-первых, мне нужна эта прога не для лисы. Я сам пишу ActionScript3 на Eclipse и усердно юзаю Ant. Но есть беда: после сложных операций с муравьём, на переднем плане оказывается не то, что нужно. Вот, собсно хочу написать прогу, которую можно запускать через command prompt с одним параметром - названием инстанса проги.

Во-вторых, у меня нет никакого опыта с C++ или другими C. Поэтому, есть просьба разжевать всё это для чайников. Мне очень хорошо знаком Eclipse, поэтому я установил для него CDT.

Но вот, что делать дальше? Я чесно говоря - х.з. Ты не мог бы ткнуть меня в урок или другой ресурс, где можно почитать про то, что мне нужно?

Спасибо.

Ладно, качаю Visual Studio 2010, может там будет попонятнее. А то, в эклипсе ничего не удаёться забилдить.
  • 0

#4 Vitalts

Vitalts
  • Постоялец
  • 1 842 сообщений

Отправлено 09 Август 2010 - 21:57

Эти функции не имеют никакого отношения к сям. Они из набора Windows API и обращение к ним может быть осуществелно на любом языке, способном вызывать функции из длл. Синтаксис функций описан на сях потому, как винда написана на сях. Если хорошо погуглить, возможно, сможешь прикрутить и к Eclipse, но в этом случае теряеться кроссплатформенность (оно и понятно, ведь у пингвинов, чертей и иже с ними функций с такими наименованиями и объявлениями нет).
Гугли основы работы с Windows API на наиболее известном тебе языке.
  • 0

#5 don Jao

don Jao
  • Пользователь
  • 138 сообщений
  • Откуда:Таллинн

Отправлено 11 Август 2010 - 10:08

Так. Написал я прогу на C#. Но блин, не подходит оно мне. Надо на C++ и Win32 Console Application. Т.к., привязка в фреймфорку очень проблематична.

Кстати сделал это посредствам цикла всех процессов.

Примерно так.
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;


namespace FocusIt
{
    class Program
    {
        static void Main(string[] args)
        {
            Process[] processes = Process.GetProcessesByName("firefox");
            foreach (Process p in processes)
            {
                IntPtr handle = p.MainWindowHandle;
                SetForegroundWindow(handle);
            }
        }

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern bool SetForegroundWindow(IntPtr hWnd); 
    }
}

Осталось это портнуть в C++. Может кто знает/может чем помочь?

Спасибо.
  • 0